mirror of
https://github.com/fergalmoran/picard.git
synced 2026-02-27 01:54:06 +00:00
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:
@@ -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 = []
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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():
|
||||
|
||||
Reference in New Issue
Block a user