summaryrefslogtreecommitdiff
path: root/nephilim/plugins/Lyrics.py
diff options
context:
space:
mode:
authorAnton Khirnov <wyskas@gmail.com>2009-08-19 09:43:20 +0200
committerAnton Khirnov <wyskas@gmail.com>2009-08-19 09:43:20 +0200
commitae94ee8e4baefa34ab47e73280c7198ca55a39c5 (patch)
treefea577bfba07b3f5989c23eb7df27519d67cd190 /nephilim/plugins/Lyrics.py
parentbec4257daa05a7c71678330e7f9747ecdfe5b2ca (diff)
Lyrics: cosmetics - group private/public functions.
Diffstat (limited to 'nephilim/plugins/Lyrics.py')
-rw-r--r--nephilim/plugins/Lyrics.py264
1 files changed, 135 insertions, 129 deletions
diff --git a/nephilim/plugins/Lyrics.py b/nephilim/plugins/Lyrics.py
index 960c400..33ea369 100644
--- a/nephilim/plugins/Lyrics.py
+++ b/nephilim/plugins/Lyrics.py
@@ -37,6 +37,8 @@ class LyricsWidget(QtGui.QWidget):
__text_view = None # text-object
__toolbar = None
__label = None
+
+ #### private
def __init__(self, plugin):
QtGui.QWidget.__init__(self)
self.plugin = plugin
@@ -69,6 +71,13 @@ class LyricsWidget(QtGui.QWidget):
self.layout().addWidget(self.__label, 0, 1)
self.layout().addWidget(self.__text_view, 1, 1)
+ def __save_lyrics(self):
+ self.plugin.save_lyrics_file(unicode(self.__text_view.toPlainText()).encode('utf-8'))
+
+ def __toggle_editable(self, val):
+ self.__text_view.setReadOnly(not val)
+
+ #### public ####
def set_lyrics(self, song, lyrics, flags = 0):
"""Set currently displayed lyrics for song. flags parameter is
unused now."""
@@ -91,11 +100,6 @@ class LyricsWidget(QtGui.QWidget):
self.logger.info('Lyrics not found.')
self.__text_view.insertPlainText('Lyrics not found.')
- def __save_lyrics(self):
- self.plugin.save_lyrics_file(unicode(self.__text_view.toPlainText()).encode('utf-8'))
-
- def __toggle_editable(self, val):
- self.__text_view.setReadOnly(not val)
class Lyrics(Plugin):
# public, read-only
@@ -114,86 +118,13 @@ class Lyrics(Plugin):
__lyrics_dir = None
__lyrics_path = None
+ #### private ####
def __init__(self, parent, mpclient, name):
Plugin.__init__(self, parent, mpclient, name)
self.__available_sites['lyricwiki'] = self.FetchLyricwiki
self.__available_sites['animelyrics'] = self.FetchAnimelyrics
- def _load(self):
- for site in self.__available_sites:
- if site in self.settings().value('%s/sites'%self.name).toStringList():
- self.__fetchers[site] = self.__available_sites[site](self)
- self.o = LyricsWidget(self)
- for fetcher in self.__fetchers:
- self.connect(self.__fetchers[fetcher], QtCore.SIGNAL('finished'), self.__new_lyrics_fetched)
- self.connect(self.mpclient, QtCore.SIGNAL('song_changed'), self.refresh)
- def _unload(self):
- self.o = None
- self.sites = {}
- self.disconnect(self.mpclient, QtCore.SIGNAL('song_changed'), self.refresh)
- def info(self):
- return "Show (and fetch) the lyrics of the currently playing song."
-
- def _get_dock_widget(self):
- return self._create_dock(self.o)
-
- def refresh(self):
- """Attempt to automatically get lyrics first from a file, then from the internet."""
- self.logger.info('Autorefreshing lyrics.')
- self.__results = 0
- self.o.lyrics_loaded = False
- song = self.mpclient.current_song()
- if not song:
- self.__lyrics_dir = ''
- self.__lyrics_path = ''
- return self.o.set_lyrics(None, None)
-
- (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')
- lyrics = file.read()
- file.close()
- if lyrics:
- return self.o.set_lyrics(song, lyrics)
- except IOError, e:
- self.logger.info('Error reading lyrics file: %s.'%e)
-
- for fetcher in self.__fetchers.values():
- fetcher.fetch(song)
-
- def save_lyrics_file(self, lyrics, path = None):
- """Save lyrics to a file specified in path.
- If path is None, then a default value is used."""
- self.logger.info('Saving lyrics...')
- try:
- if path:
- file = open(path, 'w')
- else:
- file = open(self.__lyrics_path, 'w')
- file.write(lyrics)
- file.close()
- self.logger.info('Lyrics successfully saved.')
- except IOError, e:
- self.logger.error('Error writing lyrics: %s', e)
-
- def del_lyrics_file(self, song = None):
- """Delete a lyrics file for song. If song is not specified
- current song is used."""
- if not song:
- 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())
-
- try:
- os.remove(path)
- except IOError, e:
- self.logger.error('Error removing lyrics file %s: %s'%(path, e))
-
def __new_lyrics_fetched(self, song, lyrics):
self.logger.info('Got new lyrics.')
self.__results += 1
@@ -203,56 +134,6 @@ class Lyrics(Plugin):
elif self.__results >= len(self.__fetchers) and not self.o.lyrics_loaded:
self.o.set_lyrics(song, None)
- class SettingsWidgetLyrics(Plugin.SettingsWidget):
- lyricdir = None
- lyricname = None
- store = None
-
- def __init__(self, plugin):
- Plugin.SettingsWidget.__init__(self, plugin)
- self.settings().beginGroup(self.plugin.name)
-
-
- # store lyrics groupbox
- self.store = QtGui.QGroupBox('Store lyrics.')
- self.store.setToolTip('Should %s store its own copy of lyrics?'%misc.APPNAME)
- self.store.setCheckable(True)
- self.store.setChecked(self.settings().value('store').toBool())
- self.store.setLayout(QtGui.QGridLayout())
-
- # paths to lyrics
- self.lyricdir = QtGui.QLineEdit(self.settings().value('lyricdir').toString())
- self.lyricdir.setToolTip('Where should %s store lyrics.\n'
- '$musicdir will be expanded to path to MPD music library (as set by user)\n'
- '$songdir will be expanded to path to the song (relative to $musicdir\n'
- 'other tags same as in lyricname'
- %misc.APPNAME)
- self.lyricname = QtGui.QLineEdit(self.settings().value('lyricname').toString())
- self.lyricname.setToolTip('Filename for %s lyricsfiles.\n'
- 'All tags supported by MPD will be expanded to their\n'
- 'values for current song, e.g. $title, $track, $artist,\n'
- '$album, $genre etc.'%misc.APPNAME)
- self.store.layout().addWidget(QtGui.QLabel('Lyrics directory'), 0, 0)
- self.store.layout().addWidget(self.lyricdir, 0, 1)
- self.store.layout().addWidget(QtGui.QLabel('Lyrics filename'), 1, 0)
- self.store.layout().addWidget(self.lyricname, 1, 1)
-
- self.setLayout(QtGui.QVBoxLayout())
- self.layout().addWidget(self.store)
-
- self.settings().endGroup()
-
- def save_settings(self):
- self.settings().beginGroup(self.plugin.name)
- self.settings().setValue('lyricdir', QVariant(self.lyricdir.text()))
- self.settings().setValue('lyricname', QVariant(self.lyricname.text()))
- self.settings().setValue('store', QVariant(self.store.isChecked()))
- self.settings().endGroup()
- self.plugin.refresh()
-
- def get_settings_widget(self):
- return self.SettingsWidgetLyrics(self)
-
class Fetcher(QtCore.QObject):
"""A basic class for lyrics fetchers. Provides a fetch(song) function,
emits a finished(song, lyrics) signal when done; lyrics is either a QString,
@@ -383,3 +264,128 @@ class Lyrics(Plugin):
self.finish(lyrics)
+ class SettingsWidgetLyrics(Plugin.SettingsWidget):
+ lyricdir = None
+ lyricname = None
+ store = None
+
+ def __init__(self, plugin):
+ Plugin.SettingsWidget.__init__(self, plugin)
+ self.settings().beginGroup(self.plugin.name)
+
+
+ # store lyrics groupbox
+ self.store = QtGui.QGroupBox('Store lyrics.')
+ self.store.setToolTip('Should %s store its own copy of lyrics?'%misc.APPNAME)
+ self.store.setCheckable(True)
+ self.store.setChecked(self.settings().value('store').toBool())
+ self.store.setLayout(QtGui.QGridLayout())
+
+ # paths to lyrics
+ self.lyricdir = QtGui.QLineEdit(self.settings().value('lyricdir').toString())
+ self.lyricdir.setToolTip('Where should %s store lyrics.\n'
+ '$musicdir will be expanded to path to MPD music library (as set by user)\n'
+ '$songdir will be expanded to path to the song (relative to $musicdir\n'
+ 'other tags same as in lyricname'
+ %misc.APPNAME)
+ self.lyricname = QtGui.QLineEdit(self.settings().value('lyricname').toString())
+ self.lyricname.setToolTip('Filename for %s lyricsfiles.\n'
+ 'All tags supported by MPD will be expanded to their\n'
+ 'values for current song, e.g. $title, $track, $artist,\n'
+ '$album, $genre etc.'%misc.APPNAME)
+ self.store.layout().addWidget(QtGui.QLabel('Lyrics directory'), 0, 0)
+ self.store.layout().addWidget(self.lyricdir, 0, 1)
+ self.store.layout().addWidget(QtGui.QLabel('Lyrics filename'), 1, 0)
+ self.store.layout().addWidget(self.lyricname, 1, 1)
+
+ self.setLayout(QtGui.QVBoxLayout())
+ self.layout().addWidget(self.store)
+
+ self.settings().endGroup()
+
+ def save_settings(self):
+ self.settings().beginGroup(self.plugin.name)
+ self.settings().setValue('lyricdir', QVariant(self.lyricdir.text()))
+ self.settings().setValue('lyricname', QVariant(self.lyricname.text()))
+ self.settings().setValue('store', QVariant(self.store.isChecked()))
+ self.settings().endGroup()
+ self.plugin.refresh()
+
+ #### public ####
+ def _load(self):
+ for site in self.__available_sites:
+ if site in self.settings().value('%s/sites'%self.name).toStringList():
+ self.__fetchers[site] = self.__available_sites[site](self)
+ self.o = LyricsWidget(self)
+ for fetcher in self.__fetchers:
+ self.connect(self.__fetchers[fetcher], QtCore.SIGNAL('finished'), self.__new_lyrics_fetched)
+ self.connect(self.mpclient, QtCore.SIGNAL('song_changed'), self.refresh)
+ def _unload(self):
+ self.o = None
+ self.sites = {}
+ self.disconnect(self.mpclient, QtCore.SIGNAL('song_changed'), self.refresh)
+ def info(self):
+ return "Show (and fetch) the lyrics of the currently playing song."
+
+ def _get_dock_widget(self):
+ return self._create_dock(self.o)
+
+ def refresh(self):
+ """Attempt to automatically get lyrics first from a file, then from the internet."""
+ self.logger.info('Autorefreshing lyrics.')
+ self.__results = 0
+ self.o.lyrics_loaded = False
+ song = self.mpclient.current_song()
+ if not song:
+ self.__lyrics_dir = ''
+ self.__lyrics_path = ''
+ return self.o.set_lyrics(None, None)
+
+ (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')
+ lyrics = file.read()
+ file.close()
+ if lyrics:
+ return self.o.set_lyrics(song, lyrics)
+ except IOError, e:
+ self.logger.info('Error reading lyrics file: %s.'%e)
+
+ for fetcher in self.__fetchers.values():
+ fetcher.fetch(song)
+
+ def save_lyrics_file(self, lyrics, path = None):
+ """Save lyrics to a file specified in path.
+ If path is None, then a default value is used."""
+ self.logger.info('Saving lyrics...')
+ try:
+ if path:
+ file = open(path, 'w')
+ else:
+ file = open(self.__lyrics_path, 'w')
+ file.write(lyrics)
+ file.close()
+ self.logger.info('Lyrics successfully saved.')
+ except IOError, e:
+ self.logger.error('Error writing lyrics: %s', e)
+
+ def del_lyrics_file(self, song = None):
+ """Delete a lyrics file for song. If song is not specified
+ current song is used."""
+ if not song:
+ 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())
+
+ try:
+ os.remove(path)
+ except IOError, e:
+ self.logger.error('Error removing lyrics file %s: %s'%(path, e))
+
+ def get_settings_widget(self):
+ return self.SettingsWidgetLyrics(self)
+