summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <wyskas@gmail.com>2009-08-16 14:14:05 +0200
committerAnton Khirnov <wyskas@gmail.com>2009-08-16 14:14:05 +0200
commite182ce5429166f7f9be8714f255e516960d3e1c1 (patch)
tree7aedb5f0dad21989b216a62b2771dfd106fe7e44
parent1762217e373c3562501207ad020f59079dc98469 (diff)
Lyrics: cosmetics
mark private/public variables, add comments, etc
-rw-r--r--nephilim/plugins/Lyrics.py82
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: