From 28ecec51d865a8f8dfa122d388fd35b70f809b45 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Mon, 2 Mar 2009 17:20:07 +0100 Subject: AlbumCover: return support for storing covers. --- nephilim/plugins/AlbumCover.py | 64 +++++++++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 19 deletions(-) (limited to 'nephilim/plugins/AlbumCover.py') diff --git a/nephilim/plugins/AlbumCover.py b/nephilim/plugins/AlbumCover.py index 2fe644a..cf1cdbe 100644 --- a/nephilim/plugins/AlbumCover.py +++ b/nephilim/plugins/AlbumCover.py @@ -35,15 +35,23 @@ class wgAlbumCover(QtGui.QLabel): if event.button() == QtCore.Qt.RightButton: self.menu.popup(event.globalPos()) - - def set_cover(self, cover): + def set_cover(self, cover, write): + logging.info('Setting cover') if not cover or cover.isNull(): self.cover_loaded = False self.setPixmap(QtGui.QPixmap('gfx/no-cd-cover.png')) return self.cover = cover + self.cover_loaded = True self.setPixmap(cover.scaled(self.size(), QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)) + logging.info('Cover set.') + + if write and self.p.settings.value(self.p.getName() + '/store').toBool(): + 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: @@ -66,6 +74,7 @@ class wgAlbumCover(QtGui.QLabel): self.fetch_cover(song) def fetch_cover(self, song): + write = False if not QtCore.QFile.exists(self.cover_filepath): for i in (0, 1): src = self.p.settings.value(self.p.getName() + '/method%i'%i).toInt()[0] @@ -77,11 +86,12 @@ class wgAlbumCover(QtGui.QLabel): cover = QtGui.QPixmap() if cover and not cover.isNull(): + write = True break else: cover = QtGui.QPixmap(self.cover_filepath) - self.set_cover(cover) + self.set_cover(cover, write) def fetch_local_manual(self): song = self.p.mpclient.getCurrentSong() @@ -94,7 +104,7 @@ class wgAlbumCover(QtGui.QLabel): cover = QtGui.QPixmap(file) if cover.isNull(): return - self.set_cover(cover) + self.set_cover(cover, True) self.cover_loaded = True def fetch_local(self, song): @@ -135,7 +145,7 @@ class wgAlbumCover(QtGui.QLabel): if not song: return cover = self.fetch_amazon(song) - self.set_cover(cover) + self.set_cover(cover, True) def fetch_amazon(self, song): if not song.getArtist() or not song.getAlbum(): @@ -155,7 +165,7 @@ class wgAlbumCover(QtGui.QLabel): class AlbumCover(Plugin): o = None DEFAULTS = {'coverdir' : '$musicdir/$songdir', 'covername' : '.cover_nephilim_$artist_$album', - 'method0' : 1, 'method1' : 1} + 'method0' : 1, 'method1' : 1, 'store' : True} def __init__(self, winMain): Plugin.__init__(self, winMain, 'AlbumCover') self.addListener('onSongChange' , self.refresh) @@ -183,34 +193,49 @@ class AlbumCover(Plugin): methods = [] coverdir = None covername = None + store = None def __init__(self, plugin): Plugin.SettingsWidget.__init__(self, plugin) self.settings.beginGroup(self.plugin.getName()) + # fetching methods comboboxes self.methods = [QtGui.QComboBox(), QtGui.QComboBox()] for i,method in enumerate(self.methods): - method.addItem("No method.") - method.addItem("Local dir") - method.addItem("Amazon") + method.addItem('No method.') + method.addItem('Local dir') + method.addItem('Amazon') method.setCurrentIndex(self.settings.value('method' + str(i)).toInt()[0]) + # store covers groupbox + self.store = QtGui.QGroupBox('Store covers.') + self.store.setToolTip('Should %s store its own copy of covers?'%APPNAME) + self.store.setCheckable(True) + self.store.setChecked(self.settings.value('store').toBool()) + self.store.setLayout(QtGui.QGridLayout()) + + # paths to covers self.coverdir = QtGui.QLineEdit(self.settings.value('coverdir').toString()) + self.coverdir.setToolTip('Where should %s store covers.\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 covername' + %APPNAME) self.covername = QtGui.QLineEdit(self.settings.value('covername').toString()) + self.covername.setToolTip('Filename for %s cover files.\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.'%APPNAME) + self.store.layout().addWidget(QtGui.QLabel('Cover directory'), 0, 0) + self.store.layout().addWidget(self.coverdir, 0, 1) + self.store.layout().addWidget(QtGui.QLabel('Cover filename'), 1, 0) + self.store.layout().addWidget(self.covername, 1, 1) self.setLayout(QtGui.QVBoxLayout()) self._add_widget(self.methods[0], 'Method 0', 'Method to try first.') self._add_widget(self.methods[1], 'Method 1', 'Method to try if the first one fails.') - self._add_widget(self.coverdir, 'Cover directory', - 'Where should %s store covers.\n' - '$musicdir will be expanded to path to MPD music library\n' - '$songdir will be expanded to path to the song (relative to $musicdir\n' - 'other tags same as in covername' - %APPNAME) - self._add_widget(self.covername, 'Cover filename', 'Filename for %s cover files.\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.'%APPNAME) + self.layout().addWidget(self.store) + self.settings.endGroup() def save_settings(self): @@ -219,6 +244,7 @@ class AlbumCover(Plugin): self.settings.setValue('method1', QVariant(self.methods[1].currentIndex())) self.settings.setValue('coverdir', QVariant(self.coverdir.text())) self.settings.setValue('covername', QVariant(self.covername.text())) + self.settings.setValue('store', QVariant(self.store.isChecked())) self.settings.endGroup() self.plugin.o.refresh() -- cgit v1.2.3