summaryrefslogtreecommitdiff
path: root/nephilim/plugins/AlbumCover.py
diff options
context:
space:
mode:
authorAnton Khirnov <wyskas@gmail.com>2009-03-12 15:46:53 +0100
committerAnton Khirnov <wyskas@gmail.com>2009-03-12 15:46:53 +0100
commit56b718527ac633892d6dbf26c9ce7c9f2aa04c9f (patch)
tree939b48f634a7d6bbe70d2207df78abc550d4b816 /nephilim/plugins/AlbumCover.py
parent328ecbe2513757f721115445b8f3302a0ff6d064 (diff)
AlbumCover: cosmetics.
Diffstat (limited to 'nephilim/plugins/AlbumCover.py')
-rw-r--r--nephilim/plugins/AlbumCover.py140
1 files changed, 74 insertions, 66 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)