diff --git a/picard/album.py b/picard/album.py index d7151f8e7..81da90d25 100644 --- a/picard/album.py +++ b/picard/album.py @@ -72,6 +72,7 @@ class Album(DataObject, Item): self.errors = [] self.status = None self._album_artists = [] + self.update_metadata_images_enabled = True def __repr__(self): return '' % (self.id, self.metadata[u"album"]) @@ -255,6 +256,7 @@ class Album(DataObject, Item): self._tracks_loaded = True if not self._requests: + self.update_metadata_images_enabled = False # Prepare parser for user's script if config.setting["enable_tagger_scripts"]: for s_pos, s_name, s_enabled, s_text in config.setting["list_of_scripts"]: @@ -276,6 +278,7 @@ class Album(DataObject, Item): self._new_metadata.strip_whitespace() for track in self.tracks: + track.metadata_images_changed.connect(self.update_metadata_images) for file in list(track.linked_files): file.move(self.unmatched_files) self.metadata = self._new_metadata @@ -285,6 +288,7 @@ class Album(DataObject, Item): self.loaded = True self.status = None self.match_files(self.unmatched_files.files) + self.update_metadata_images_enabled = True self.update() self.tagger.window.set_statusbar_message( N_('Album %(id)s loaded: %(artist)s - %(album)s'), @@ -379,14 +383,19 @@ class Album(DataObject, Item): def update(self, update_tracks=True): if self.item: self.item.update(update_tracks) + self.update_metadata_images() def _add_file(self, track, file): self._files += 1 self.update(update_tracks=False) + file.metadata_images_changed.connect(self.update_metadata_images) + self.update_metadata_images() def _remove_file(self, track, file): self._files -= 1 self.update(update_tracks=False) + file.metadata_images_changed.disconnect(self.update_metadata_images) + self.update_metadata_images() def match_files(self, files, use_recordingid=True): """Match files to tracks on this album, based on metadata similarity or recordingid.""" @@ -554,6 +563,8 @@ class Album(DataObject, Item): self.load(priority=True, refresh=True) def update_metadata_images(self): + if not self.update_metadata_images_enabled: + return new_images = [] orig_images = [] diff --git a/picard/file.py b/picard/file.py index cf20ed8cf..d2097259b 100644 --- a/picard/file.py +++ b/picard/file.py @@ -54,6 +54,8 @@ from picard.const import QUERY_LIMIT class File(QtCore.QObject, Item): + metadata_images_changed = QtCore.pyqtSignal() + UNDEFINED = -1 PENDING = 0 NORMAL = 1 @@ -156,6 +158,7 @@ class File(QtCore.QObject, Item): if acoustid: self.metadata["acoustid_id"] = acoustid + self.metadata_images_changed.emit() def has_error(self): return self.state == File.ERROR diff --git a/picard/track.py b/picard/track.py index 3130f3f5f..c1e33d1d4 100644 --- a/picard/track.py +++ b/picard/track.py @@ -19,6 +19,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. from functools import partial +from PyQt4 import QtCore from picard import config, log from picard.metadata import Metadata, run_track_metadata_processors from picard.dataobj import DataObject @@ -44,6 +45,8 @@ class TrackArtist(DataObject): class Track(DataObject, Item): + metadata_images_changed = QtCore.pyqtSignal() + def __init__(self, id, album=None): DataObject.__init__(self, id) self.album = album diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 80226a4ce..f7e7580b4 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -316,18 +316,23 @@ class CoverArtBox(QtGui.QGroupBox): album.metadata.set_front_image(coverartimage) for track in album.tracks: track.metadata.set_front_image(coverartimage) + track.metadata_images_changed.emit() for file in album.iterfiles(): file.metadata.set_front_image(coverartimage) + file.metadata_images_changed.emit() file.update() elif isinstance(self.item, Track): track = self.item track.metadata.set_front_image(coverartimage) + track.metadata_images_changed.emit() for file in track.iterfiles(): file.metadata.set_front_image(coverartimage) + file.metadata_images_changed.emit() file.update() elif isinstance(self.item, File): file = self.item file.metadata.set_front_image(coverartimage) + file.metadata_images_changed.emit() file.update() self.cover_art.set_metadata(self.item.metadata) self.show() diff --git a/picard/ui/mainwindow.py b/picard/ui/mainwindow.py index 1b4a72ec9..2ae7bf465 100644 --- a/picard/ui/mainwindow.py +++ b/picard/ui/mainwindow.py @@ -956,7 +956,6 @@ class MainWindow(QtGui.QMainWindow): self.set_statusbar_message(msg, mparms, echo=None, history=None) elif isinstance(obj, Album): - obj.update_metadata_images() metadata = obj.metadata orig_metadata = obj.orig_metadata elif obj.can_edit_tags():