diff options
-rw-r--r-- | nephilim/common.py | 21 | ||||
-rw-r--r-- | nephilim/plugins/AlbumCover.py | 40 |
2 files changed, 48 insertions, 13 deletions
diff --git a/nephilim/common.py b/nephilim/common.py index 906310f..238faa1 100644 --- a/nephilim/common.py +++ b/nephilim/common.py @@ -111,14 +111,7 @@ class MetadataFetcher(QtCore.QObject): def fetch2(self, song, url): """A private convenience function to initiate fetch process.""" # abort any existing connections - if self.srep: - self.srep.finished.disconnect() - self.srep.abort() - self.srep = None - if self.mrep: - self.mrep.finished.disconnect() - self.mrep.abort() - self.mrep = None + self.abort() self.song = song self.logger.info('Searching %s: %s.'%(self. name, url)) @@ -136,3 +129,15 @@ class MetadataFetcher(QtCore.QObject): def fetch(self, song): """Reimplement this in subclasses.""" pass + + def abort(self): + """Abort all downloads currently in progress.""" + if self.srep: + self.srep.finished.disconnect() + self.srep.abort() + self.srep = None + if self.mrep: + self.mrep.finished.disconnect() + self.mrep.abort() + self.mrep = None + diff --git a/nephilim/plugins/AlbumCover.py b/nephilim/plugins/AlbumCover.py index 5250e1e..a38a474 100644 --- a/nephilim/plugins/AlbumCover.py +++ b/nephilim/plugins/AlbumCover.py @@ -43,11 +43,12 @@ class AlbumCoverWidget(QtGui.QLabel): self.setAlignment(QtCore.Qt.AlignCenter) # popup menu - self._menu = QtGui.QMenu("album") - refresh = self._menu.addAction('&Refresh cover.', self.plugin.refresh) - view_action = self._menu.addAction('&View in a separate window.', self.__view_cover) - save_action = self._menu.addAction('Save cover &as...', self.__save_cover) - clear_action = self._menu.addAction('&Clear cover.', self.__clear_cover) + self._menu = QtGui.QMenu('album') + self._menu.addAction('&Select cover file...', self.plugin.select_cover) + self._menu.addAction('&Refresh cover.', self.plugin.refresh) + self._menu.addAction('&View in a separate window.', self.__view_cover) + self._menu.addAction('Save cover &as...', self.__save_cover) + self._menu.addAction('&Clear cover.', self.__clear_cover) def contextMenuEvent(self, event): event.accept() @@ -135,6 +136,11 @@ class AlbumCover(Plugin): elif self.__results >= len(self.__fetchers) and not self.o.cover_loaded: self.o.set_cover(song, None) + def __abort_fetch(self): + """Aborts all fetches currently in progress.""" + for fetcher in self.__fetchers: + fetcher.abort() + class SettingsWidgetAlbumCover(Plugin.SettingsWidget): coverdir = None covername = None @@ -300,6 +306,9 @@ class AlbumCover(Plugin): self.logger.info('No matching cover found') self.finished.emit(song, None) + def abort(self): + pass + #### public #### def _load(self): self.o = AlbumCoverWidget(self) @@ -369,6 +378,27 @@ class AlbumCover(Plugin): if not QtCore.QFile.remove(path): self.logger.error('Error removing file %s.'%path) + def select_cover(self): + """Prompt user to manually select cover file for current song.""" + song = self.mpclient.current_song() + if not song: + return + self.__abort_fetch() + + file = QtGui.QFileDialog.getOpenFileName(None, + 'Select album cover for %s - %s'%(song.artist(), song.album()), + self.__cover_dir, '') + if not file: + return + + cover = QtGui.QPixmap(file) + if cover.isNull(): + self.logger.error('Error opening cover file.') + return + + if self.settings.value(self.name + '/store').toBool(): + self.save_cover_file(cover) + self.o.set_cover(song, cover) def cover(self): if not self.o: |