Update album metadata images when Files/Tracks emit signal

Add a signal to Files/Tracks that gets emitted when the images
change (or might have changed), and update the album's metadata images
on such signals instead of each time the album is selected in the
user interface.
This commit is contained in:
Antonio Larrosa
2017-03-08 11:03:03 +01:00
parent 0dd1e8d6aa
commit e2e2ca39a6
5 changed files with 22 additions and 1 deletions

View File

@@ -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 '<Album %s %r>' % (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 = []

View File

@@ -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

View File

@@ -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

View File

@@ -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()

View File

@@ -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():