diff options
author | Anton Khirnov <wyskas@gmail.com> | 2009-08-16 14:14:05 +0200 |
---|---|---|
committer | Anton Khirnov <wyskas@gmail.com> | 2009-08-16 14:14:05 +0200 |
commit | e182ce5429166f7f9be8714f255e516960d3e1c1 (patch) | |
tree | 7aedb5f0dad21989b216a62b2771dfd106fe7e44 /nephilim/plugins/Lyrics.py | |
parent | 1762217e373c3562501207ad020f59079dc98469 (diff) |
Lyrics: cosmetics
mark private/public variables, add comments, etc
Diffstat (limited to 'nephilim/plugins/Lyrics.py')
-rw-r--r-- | nephilim/plugins/Lyrics.py | 82 |
1 files changed, 46 insertions, 36 deletions
diff --git a/nephilim/plugins/Lyrics.py b/nephilim/plugins/Lyrics.py index 3d58c51..91ee4d8 100644 --- a/nephilim/plugins/Lyrics.py +++ b/nephilim/plugins/Lyrics.py @@ -15,8 +15,8 @@ # along with Nephilim. If not, see <http://www.gnu.org/licenses/>. # -from PyQt4 import QtGui, QtCore -from PyQt4.QtCore import QVariant +from PyQt4 import QtGui, QtCore +from PyQt4.QtCore import QVariant import socket import os @@ -25,81 +25,90 @@ import urllib from lxml import etree from ..plugin import Plugin -from .. import misc +from .. import misc -class wgLyrics(QtGui.QWidget): - txtView = None # text-object - p = None # plugin - logger = None +class LyricsWidget(QtGui.QWidget): + # public, read-only + plugin = None # plugin + logger = None + # private + __text_view = None # text-object __toolbar = None __label = None - def __init__(self, p, parent=None): - QtGui.QWidget.__init__(self, parent) - self.p = p - self.logger = p.logger + def __init__(self, plugin): + QtGui.QWidget.__init__(self) + self.plugin = plugin + self.logger = plugin.logger self.curLyrics = '' self.__label = QtGui.QLabel(self) # add text area - self.txtView = QtGui.QTextEdit(self) - self.txtView.setReadOnly(True) + self.__text_view = QtGui.QTextEdit(self) + self.__text_view.setReadOnly(True) # add toolbar self.__toolbar = QtGui.QToolBar('Lyrics toolbar', self) self.__toolbar.setOrientation(QtCore.Qt.Vertical) - self.__toolbar.addAction(QtGui.QIcon('gfx/refresh.png'), 'Refresh lyrics', self.p.refresh) + self.__toolbar.addAction(QtGui.QIcon('gfx/refresh.png'), 'Refresh lyrics', self.plugin.refresh) edit = self.__toolbar.addAction(QtGui.QIcon('gfx/edit.png'), 'Edit lyrics') edit.setCheckable(True) edit.connect(edit, QtCore.SIGNAL('toggled(bool)'), self.__toggle_editable) self.__toolbar.addAction(QtGui.QIcon('gfx/save.png'), 'Save lyrics', self.__save_lyrics) - self.__toolbar.addAction(QtGui.QIcon('gfx/delete.png'), 'Delete stored file', self.p.del_lyrics_file) + self.__toolbar.addAction(QtGui.QIcon('gfx/delete.png'), 'Delete stored file', self.plugin.del_lyrics_file) self.setLayout(QtGui.QGridLayout()) self.layout().setSpacing(0) self.layout().setMargin(0) self.layout().addWidget(self.__toolbar, 0, 0, -1, 1, QtCore.Qt.AlignTop) self.layout().addWidget(self.__label, 0, 1) - self.layout().addWidget(self.txtView, 1, 1) + self.layout().addWidget(self.__text_view, 1, 1) - self.connect(self.p, QtCore.SIGNAL('new_lyrics_fetched'), self.set_lyrics) + self.connect(self.plugin, QtCore.SIGNAL('new_lyrics_fetched'), self.set_lyrics) def set_lyrics(self, song, lyrics, flags = 0): + """Set currently displayed lyrics for song. flags parameter is + unused now.""" if not song: self.__label.clear() - return self.txtView.clear() + return self.__text_view.clear() - if song != self.p.mpclient.current_song(): + # a late thread might call this for a previous song + if song != self.plugin.mpclient.current_song(): return - self.txtView.clear() + self.__text_view.clear() self.__label.setText('<b>%s</b> by <u>%s</u> on <u>%s</u>'\ %(song.title(), song.artist(), song.album())) if lyrics: self.logger.info('Setting new lyrics.') - self.txtView.insertPlainText(lyrics.decode('utf-8')) + self.__text_view.insertPlainText(lyrics.decode('utf-8')) else: self.logger.info('Lyrics not found.') - self.txtView.insertPlainText('Lyrics not found.') + self.__text_view.insertPlainText('Lyrics not found.') def __save_lyrics(self): - self.p.save_lyrics_file(unicode(self.txtView.toPlainText()).encode('utf-8')) + self.plugin.save_lyrics_file(unicode(self.__text_view.toPlainText()).encode('utf-8')) def __toggle_editable(self, val): - self.txtView.setReadOnly(not val) + self.__text_view.setReadOnly(not val) class Lyrics(Plugin): + # public, read-only o = None + """A dict of { site name : function }. Function takes a song and returns lyrics + as a python string or None if not found.""" sites = {} - lyrics_dir = None - lyrics_path = None - DEFAULTS = {'sites' : QtCore.QStringList(['lyricwiki', 'animelyrics']), 'lyricdir' : '$musicdir/$songdir', - 'lyricname' : '.lyrics_nephilim_$artist_$album_$title', 'store' : True} + # private + DEFAULTS = {'sites' : QtCore.QStringList(['lyricwiki', 'animelyrics']), 'lyricdir' : '$musicdir/$songdir', + 'lyricname' : '.lyrics_nephilim_$artist_$album_$title', 'store' : True} __available_sites = {} + __lyrics_dir = None + __lyrics_path = None def __init__(self, parent, mpclient, name): Plugin.__init__(self, parent, mpclient, name) @@ -108,7 +117,7 @@ class Lyrics(Plugin): self.__available_sites['animelyrics'] = self.__fetch_animelyrics def _load(self): - self.o = wgLyrics(self) + self.o = LyricsWidget(self) for site in self.__available_sites: if site in self.settings().value('%s/sites'%self.name).toStringList(): self.sites[site] = self.__available_sites[site] @@ -133,17 +142,18 @@ class Lyrics(Plugin): self.fetch_func(self.song) def refresh(self): + """Attempt to automatically get lyrics first from a file, then from the internet.""" self.logger.info('Autorefreshing lyrics.') song = self.mpclient.current_song() if not song: return self.o.set_lyrics(None, None) - (self.lyrics_dir, self.lyrics_path) = misc.generate_metadata_path(song, + (self.__lyrics_dir, self.__lyrics_path) = misc.generate_metadata_path(song, self.settings().value(self.name + '/lyricdir').toString(), self.settings().value(self.name + '/lyricname').toString()) try: - self.logger.info('Trying to read lyrics from file %s.'%self.lyrics_path) - file = open(self.lyrics_path, 'r') + self.logger.info('Trying to read lyrics from file %s.'%self.__lyrics_path) + file = open(self.__lyrics_path, 'r') lyrics = file.read() file.close() if lyrics: @@ -152,7 +162,7 @@ class Lyrics(Plugin): self.logger.info('Error reading lyrics file: %s.'%e) - thread = self.FetchThread(self, self._fetch_lyrics, song) + thread = self.FetchThread(self, self.__fetch_lyrics, song) thread.start() def save_lyrics_file(self, lyrics, path = None): @@ -163,7 +173,7 @@ class Lyrics(Plugin): if path: file = open(path, 'w') else: - file = open(self.lyrics_path, 'w') + file = open(self.__lyrics_path, 'w') file.write(lyrics) file.close() self.logger.info('Lyrics successfully saved.') @@ -174,7 +184,7 @@ class Lyrics(Plugin): """Delete a lyrics file for song. If song is not specified current song is used.""" if not song: - path = self.lyrics_path + path = self.__lyrics_path else: path = misc.generate_metadata_path(song, self.settings().value(self.name + '/lyricdir').toString(), self.settings().value(self.name + '/lyricname').toString()) @@ -184,7 +194,7 @@ class Lyrics(Plugin): except IOError, e: self.logger.error('Error removing lyrics file %s: %s'%(path, e)) - def _fetch_lyrics(self, song): + def __fetch_lyrics(self, song): self.logger.info('Trying to download lyrics from internet.') lyrics = None for site in self.sites: |