summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nephilim/common.py21
-rw-r--r--nephilim/plugins/AlbumCover.py40
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: