diff options
author | Anton Khirnov <wyskas@gmail.com> | 2009-08-19 09:43:20 +0200 |
---|---|---|
committer | Anton Khirnov <wyskas@gmail.com> | 2009-08-19 09:43:20 +0200 |
commit | ae94ee8e4baefa34ab47e73280c7198ca55a39c5 (patch) | |
tree | fea577bfba07b3f5989c23eb7df27519d67cd190 /nephilim/plugins/Lyrics.py | |
parent | bec4257daa05a7c71678330e7f9747ecdfe5b2ca (diff) |
Lyrics: cosmetics - group private/public functions.
Diffstat (limited to 'nephilim/plugins/Lyrics.py')
-rw-r--r-- | nephilim/plugins/Lyrics.py | 264 |
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) + |