summaryrefslogtreecommitdiff
path: root/nephilim
diff options
context:
space:
mode:
authorAnton Khirnov <wyskas@gmail.com>2009-08-20 13:48:12 +0200
committerAnton Khirnov <wyskas@gmail.com>2009-08-20 13:48:12 +0200
commit16be49f2deb42293f85b90b149516c643cc4f395 (patch)
treed5f60bdc2cbfe4ea78a0b534f2aa74e7f09dd82a /nephilim
parent167ef484e0382628ef6efd6b28d258cd5a667fa8 (diff)
Lyrics: cosmetics
Diffstat (limited to 'nephilim')
-rw-r--r--nephilim/plugins/Lyrics.py75
1 files 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('<br>|<br/>|<br />', '\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)