diff options
author | Anton Khirnov <wyskas@gmail.com> | 2009-03-12 15:46:53 +0100 |
---|---|---|
committer | Anton Khirnov <wyskas@gmail.com> | 2009-03-12 15:46:53 +0100 |
commit | 56b718527ac633892d6dbf26c9ce7c9f2aa04c9f (patch) | |
tree | 939b48f634a7d6bbe70d2207df78abc550d4b816 /nephilim/plugins | |
parent | 328ecbe2513757f721115445b8f3302a0ff6d064 (diff) |
AlbumCover: cosmetics.
Diffstat (limited to 'nephilim/plugins')
-rw-r--r-- | nephilim/plugins/AlbumCover.py | 140 | ||||
-rw-r--r-- | nephilim/plugins/Notify.py | 18 |
2 files changed, 84 insertions, 74 deletions
diff --git a/nephilim/plugins/AlbumCover.py b/nephilim/plugins/AlbumCover.py index 99dfc8c..80536f0 100644 --- a/nephilim/plugins/AlbumCover.py +++ b/nephilim/plugins/AlbumCover.py @@ -13,93 +13,99 @@ AC_FETCH_LOCAL_DIR = 1 AC_FETCH_AMAZON = 2 class wgAlbumCover(QtGui.QLabel): - cover = None #cover pixmap - cover_loaded = False - p = None #plugin - cover_dirname = None - cover_filepath = None - menu = None #popup menu - - def __init__(self, p): + "cover - QPixmap or None" + cover = None + "is there a (non-default) cover loaded?" + cover_loaded = False + "plugin object" + plugin = None + + _cover_dirname = None # Directory and full filepath where cover + _cover_filepath = None # for current song should be stored. + _menu = None # popup menu + + def __init__(self, plugin): QtGui.QLabel.__init__(self) - self.p = p + self.plugin = plugin self.setAlignment(QtCore.Qt.AlignCenter) # popup menu - self.menu = QtGui.QMenu("album") - select_file_action = self.menu.addAction('&Select cover file...') - fetch_amazon_action = self.menu.addAction('Fetch from &Amazon.') - view_action = self.menu.addAction('&View in a separate window.') - save_action = self.menu.addAction('Save &as...') - - self.connect(select_file_action, QtCore.SIGNAL('triggered()'), self.fetch_local_manual) - self.connect(fetch_amazon_action, QtCore.SIGNAL('triggered()'), self.fetch_amazon_manual) - self.connect(view_action, QtCore.SIGNAL('triggered()'), self.view_cover) - self.connect(save_action, QtCore.SIGNAL('triggered()'), self.save_cover) - - self.connect(self.p.mpclient(), QtCore.SIGNAL('song_changed'), self.refresh) - self.connect(self.p.mpclient(), QtCore.SIGNAL('disconnected'), self.refresh) - self.connect(self.p.mpclient(), QtCore.SIGNAL('state_changed'),self.refresh) + self._menu = QtGui.QMenu("album") + select_file_action = self._menu.addAction('&Select cover file...') + fetch_amazon_action = self._menu.addAction('Fetch from &Amazon.') + view_action = self._menu.addAction('&View in a separate window.') + save_action = self._menu.addAction('Save &as...') + + self.connect(select_file_action, QtCore.SIGNAL('triggered()'), self._fetch_local_manual) + self.connect(fetch_amazon_action, QtCore.SIGNAL('triggered()'), self._fetch_amazon_manual) + self.connect(view_action, QtCore.SIGNAL('triggered()'), self._view_cover) + self.connect(save_action, QtCore.SIGNAL('triggered()'), self._save_cover) + + # MPD events + self.connect(self.plugin.mpclient(), QtCore.SIGNAL('song_changed'), self.refresh) + self.connect(self.plugin.mpclient(), QtCore.SIGNAL('disconnected'), self.refresh) + self.connect(self.plugin.mpclient(), QtCore.SIGNAL('state_changed'),self.refresh) def mousePressEvent(self, event): if event.button() == QtCore.Qt.RightButton: - self.menu.popup(event.globalPos()) + self._menu.popup(event.globalPos()) def set_cover(self, cover, write): + """Set cover for current song, attempt to write it to a file + if write is True and it's globally allowed.""" logging.info('Setting cover') if not cover or cover.isNull(): + self.cover = None self.cover_loaded = False self.setPixmap(QtGui.QPixmap('gfx/no-cd-cover.png')) + self.plugin.emit(QtCore.SIGNAL('cover_changed', None)) return self.cover = cover self.cover_loaded = True self.setPixmap(cover.scaled(self.size(), QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)) + self.plugin.emit(QtCore.SIGNAL('cover_changed'), self.cover) logging.info('Cover set.') - if (write and self.p.settings().value(self.p.name() + '/store').toBool() - and self.cover_filepath): - if cover.save(self.cover_filepath, 'png'): + if (write and self.plugin.settings().value(self.plugin.name() + '/store').toBool() + and self._cover_filepath): + if cover.save(self._cover_filepath, 'png'): logging.info('Cover saved.') else: logging.error('Error saving cover.') - def get_cover(self): - if self.cover_loaded: - return self.cover - return None - def refresh(self): + """Autofetch cover for currently playing song.""" logging.info("refreshing cover") - song = self.p.mpclient().current_song() + song = self.plugin.mpclient().current_song() if not song: self.clear() self.cover_loaded = False return if QtCore.QDir.isAbsolutePath(song.filepath()): - self.cover_dirname = os.path.dirname(song.filepath()) - self.cover_filepath = '' + self._cover_dirname = os.path.dirname(song.filepath()) + self._cover_filepath = '' elif '://' in song.filepath(): # we are streaming - self.cover_dirname = '' - self.cover_filepath = '' + self._cover_dirname = '' + self._cover_filepath = '' else: - dirname = self.p.settings().value(self.p.name() + '/coverdir').toString() - self.cover_dirname = expand_tags(dirname, (self.p.parent(), song)) - filebase = self.p.settings().value(self.p.name() + '/covername').toString() - self.cover_filepath = '%s/%s'%(self.cover_dirname, - expand_tags(filebase, (self.p.parent(), song)).replace('/', '_')) - self.fetch_cover(song) - - def fetch_cover(self, song): + dirname = self.plugin.settings().value(self.plugin.name() + '/coverdir').toString() + self._cover_dirname = expand_tags(dirname, (self.plugin.parent(), song)) + filebase = self.plugin.settings().value(self.plugin.name() + '/covername').toString() + self._cover_filepath = '%s/%s'%(self._cover_dirname, + expand_tags(filebase, (self.plugin.parent(), song)).replace('/', '_')) + self._fetch_cover(song) + + def _fetch_cover(self, song): write = False - if not QtCore.QFile.exists(self.cover_filepath): + if not QtCore.QFile.exists(self._cover_filepath): for i in (0, 1): - src = self.p.settings().value(self.p.name() + '/method%i'%i).toInt()[0] - if src == AC_FETCH_LOCAL_DIR and self.cover_dirname: - cover = self.fetch_local(song) + src = self.plugin.settings().value(self.plugin.name() + '/method%i'%i).toInt()[0] + if src == AC_FETCH_LOCAL_DIR and self._cover_dirname: + cover = self._fetch_local(song) elif src == AC_FETCH_AMAZON: - cover = self.fetch_amazon(song) + cover = self._fetch_amazon(song) else: cover = QtGui.QPixmap() @@ -107,25 +113,25 @@ class wgAlbumCover(QtGui.QLabel): write = True break else: - cover = QtGui.QPixmap(self.cover_filepath) + cover = QtGui.QPixmap(self._cover_filepath) self.set_cover(cover, write) - def fetch_local_manual(self): - song = self.p.mpclient().current_song() + def _fetch_local_manual(self): + song = self.plugin.mpclient().current_song() if not song: return file = QtGui.QFileDialog.getOpenFileName(self, 'Select album cover for %s - %s'%(song.artist(), song.album()), - self.cover_dirname, '') + self._cover_dirname, '') cover = QtGui.QPixmap(file) if cover.isNull(): return self.set_cover(cover, True) self.cover_loaded = True - def fetch_local(self, song): + def _fetch_local(self, song): logging.info('Trying to guess local cover name.') # guess cover name covers = ['cover', 'album', 'front'] @@ -139,9 +145,9 @@ class wgAlbumCover(QtGui.QLabel): for ext in exts: filter.append('*.%s%s'%(cover,ext)) - dir = QtCore.QDir(self.cover_dirname) + dir = QtCore.QDir(self._cover_dirname) if not dir: - logging.warning('Error opening directory' + self.cover_dirname) + logging.warning('Error opening directory' + self._cover_dirname) return None dir.setNameFilters(filter) @@ -160,14 +166,14 @@ class wgAlbumCover(QtGui.QLabel): logging.info('No matching cover found') return None - def fetch_amazon_manual(self): - song = self.p.mpclient().current_song() + def _fetch_amazon_manual(self): + song = self.plugin.mpclient().current_song() if not song: return - cover = self.fetch_amazon(song) + cover = self._fetch_amazon(song) self.set_cover(cover, True) - def fetch_amazon(self, song): + def _fetch_amazon(self, song): if not song.artist() or not song.album(): return None # get the url from amazon WS @@ -182,7 +188,7 @@ class wgAlbumCover(QtGui.QLabel): cover.loadFromData(img.read()) return cover - def view_cover(self): + def _view_cover(self): if not self.cover_loaded: return win = QtGui.QLabel(self, QtCore.Qt.Window) @@ -190,7 +196,7 @@ class wgAlbumCover(QtGui.QLabel): win.setPixmap(self.cover) win.show() - def save_cover(self): + def _save_cover(self): if not self.cover_loaded: return @@ -209,14 +215,16 @@ class AlbumCover(Plugin): self.o = wgAlbumCover(self) def _unload(self): self.o = None - def getInfo(self): + def info(self): return "Display the album cover of the currently playing album." def refresh(self, params = None): self.o.refresh() - def get_cover(self): - return self.o.get_cover() + def cover(self): + if not self.o: + return None + return self.o.cover if self.o.cover_loaded else None def _get_dock_widget(self): return self._create_dock(self.o) diff --git a/nephilim/plugins/Notify.py b/nephilim/plugins/Notify.py index ba998cc..f87e47a 100644 --- a/nephilim/plugins/Notify.py +++ b/nephilim/plugins/Notify.py @@ -45,7 +45,16 @@ class winNotify(QtGui.QWidget): font.setPixelSize(20) self.setFont(font) - self.connect + ac = self.parent.plugins.plugin('AlbumCover') + if ac: + self.connect(ac, QtCore.SIGNAL('cover_changed'), self.on_cover_changed) + + def on_cover_changed(self, cover): + if not cover: + self.cover_label.clear() + return + + self.cover_label.setPixmap(cover.scaledToHeight(self.fontInfo().pixelSize()*4)) def mousePressEvent(self, event): self.hide() @@ -55,13 +64,6 @@ class winNotify(QtGui.QWidget): return self._current_priority = priority - self.cover_label.clear() - ac = self.parent.plugins.plugin('AlbumCover') - if ac: - cover = ac.get_cover() - if cover: - self.cover_label.setPixmap(cover.scaledToHeight(self.fontInfo().pixelSize()*4)) - self.text_label.setText(text) self.resize(self.layout().sizeHint()) self.centerH() |