From 16be49f2deb42293f85b90b149516c643cc4f395 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Thu, 20 Aug 2009 13:48:12 +0200 Subject: [PATCH] Lyrics: cosmetics --- nephilim/plugins/Lyrics.py | 75 ++++++++++++++++++++++++++-------------------- 1 file changed, 43 insertions(+), 32 deletions(-) diff --git a/nephilim/plugins/Lyrics.py b/nephilim/plugins/Lyrics.py index e4aa723..5349ca5 100644 --- a/nephilim/plugins/Lyrics.py +++ b/nephilim/plugins/Lyrics.py @@ -106,27 +106,26 @@ class Lyrics(Plugin): o = None # private - DEFAULTS = {'sites' : QtCore.QStringList(['Lyricwiki', 'Animelyrics']), 'lyricdir' : '$musicdir/$songdir', + DEFAULTS = {'fetchers' : QtCore.QStringList(['Lyricwiki', 'Animelyrics']), 'lyricdir' : '$musicdir/$songdir', 'lyricname' : '.lyrics_nephilim_$artist_$album_$title', 'store' : True} "implemented fetchers" - available_sites = None + available_fetchers = None #XXX SettingsWidget currently uses it "enabled fetchers, those with higher priority first" __fetchers = None "number of returned results from last refresh() call" __results = None "index/priority of current lyrics" __index = None - "metadata" + "metadata paths" __lyrics_dir = None - "paths" __lyrics_path = None #### private #### def __init__(self, parent, mpclient, name): Plugin.__init__(self, parent, mpclient, name) - self.__fetchers = [] - self.available_sites = [self.FetchLyricwiki, self.FetchAnimelyrics] + self.__fetchers = [] + self.available_fetchers = [self.FetchLyricwiki, self.FetchAnimelyrics] def __new_lyrics_fetched(self, song, lyrics): self.logger.info('Got new lyrics.') @@ -227,7 +226,12 @@ class Lyrics(Plugin): lyrics = '' page = unicode(self.lrep.readAll(), encoding = 'utf-8') page = re.sub('
|
|
', '\n', page) - html = etree.HTML(page) + try: + html = etree.HTML(page) + except lxml.etree.XMLSyntaxError, e: + self.logger.error('Error parsing lyrics: %s' %e) + return self.finish() + for elem in html.iterfind('.//div'): if elem.get('class') == 'lyricbox': lyrics += etree.tostring(elem, method = 'text', encoding = 'utf-8') @@ -244,8 +248,11 @@ class Lyrics(Plugin): def __handle_search_res(self): # TODO use Qt xml functions - tree = etree.HTML(unicode(self.srep.readAll(), encoding = 'utf-8', errors='ignore')) - self.srep = None + try: + tree = etree.HTML(unicode(self.srep.readAll(), encoding = 'utf-8', errors='ignore')) + except lxml.etree.XMLSyntaxError, e: + self.logger.error('Error parsing lyrics: %s' %e) + return self.finish() url = None for elem in tree.iterfind('.//a'): @@ -262,7 +269,11 @@ class Lyrics(Plugin): def __handle_lyrics(self): lyrics = '' - tree = etree.HTML(unicode(self.lrep.readAll(), encoding = 'utf-8')) + try: + tree = etree.HTML(unicode(self.lrep.readAll(), encoding = 'utf-8')) + except lxml.etree.XMLSyntaxError, e: + self.logger.error('Error parsing lyrics: %s' %e) + return self.finish() for elem in tree.iterfind('.//pre'): if elem.get('class') == 'lyrics': lyrics += '%s\n\n'%etree.tostring(elem, method = 'text', encoding = 'utf-8') @@ -274,7 +285,7 @@ class Lyrics(Plugin): lyricdir = None lyricname = None store = None - sitelist = None + fetcherlist = None def __init__(self, plugin): Plugin.SettingsWidget.__init__(self, plugin) @@ -305,23 +316,23 @@ class Lyrics(Plugin): self.store.layout().addWidget(QtGui.QLabel('Lyrics filename'), 1, 0) self.store.layout().addWidget(self.lyricname, 1, 1) - # sites list - sites = self.settings.value('sites').toStringList() - self.sitelist = QtGui.QListWidget(self) - self.sitelist.setDragDropMode(QtGui.QAbstractItemView.InternalMove) - for site in sites: - it = QtGui.QListWidgetItem(site) + # fetchers list + fetchers = self.settings.value('fetchers').toStringList() + self.fetcherlist = QtGui.QListWidget(self) + self.fetcherlist.setDragDropMode(QtGui.QAbstractItemView.InternalMove) + for fetcher in fetchers: + it = QtGui.QListWidgetItem(fetcher) it.setCheckState(QtCore.Qt.Checked) - self.sitelist.addItem(it) - for site in self.plugin.available_sites: - if not site.name in sites: - it = QtGui.QListWidgetItem(site.name) + self.fetcherlist.addItem(it) + for fetcher in self.plugin.available_fetchers: + if not fetcher.name in fetchers: + it = QtGui.QListWidgetItem(fetcher.name) it.setCheckState(QtCore.Qt.Unchecked) - self.sitelist.addItem(it) + self.fetcherlist.addItem(it) self.setLayout(QtGui.QVBoxLayout()) self.layout().addWidget(self.store) - self._add_widget(self.sitelist, label = 'Sites', tooltip = 'A list of sources used for fetching lyrics.\n' + self._add_widget(self.fetcherlist, label = 'Sites', tooltip = 'A list of sources used for fetching lyrics.\n' 'Use drag and drop to change their priority.') self.settings.endGroup() @@ -332,12 +343,12 @@ class Lyrics(Plugin): self.settings.setValue('lyricname', QVariant(self.lyricname.text())) self.settings.setValue('store', QVariant(self.store.isChecked())) - sites = QtCore.QStringList() - for i in range(self.sitelist.count()): - it = self.sitelist.item(i) + fetchers = QtCore.QStringList() + for i in range(self.fetcherlist.count()): + it = self.fetcherlist.item(i) if it.checkState() == QtCore.Qt.Checked: - sites.append(it.text()) - self.settings.setValue('sites', QVariant(sites)) + fetchers.append(it.text()) + self.settings.setValue('fetchers', QVariant(fetchers)) self.settings.endGroup() self.plugin.refresh_fetchers() @@ -422,9 +433,9 @@ class Lyrics(Plugin): """Refresh the list of available fetchers.""" self.__fetchers = [] # append fetchers in order they are stored in settings - for name in self.settings.value('%s/sites'%self.name).toStringList(): - for site in self.available_sites: - if site.name == name: - self.__fetchers.append(site(self)) + for name in self.settings.value('%s/fetchers'%self.name).toStringList(): + for fetcher in self.available_fetchers: + if fetcher.name == name: + self.__fetchers.append(fetcher(self)) self.connect(self.__fetchers[-1], QtCore.SIGNAL('finished'), self.__new_lyrics_fetched) -- 2.11.4.GIT