mirror of
https://github.com/fergalmoran/picard.git
synced 2026-01-08 09:33:59 +00:00
PICARD-2028: Update cover art box only on changes
Use signalling to update the cover art box when cover art actually changed. Avoid cover art box update on selection changes.
This commit is contained in:
@@ -113,6 +113,7 @@ class AlbumArtist(DataObject):
|
||||
|
||||
class Album(DataObject, Item):
|
||||
|
||||
metadata_images_changed = QtCore.pyqtSignal()
|
||||
release_group_loaded = QtCore.pyqtSignal()
|
||||
|
||||
def __init__(self, album_id, discid=None):
|
||||
@@ -131,6 +132,7 @@ class Album(DataObject, Item):
|
||||
self._discids.add(discid)
|
||||
self._after_load_callbacks = []
|
||||
self.unmatched_files = Cluster(_("Unmatched Files"), special=True, related_album=self, hide_if_empty=True)
|
||||
self.unmatched_files.metadata_images_changed.connect(self.update_metadata_images)
|
||||
self.status = None
|
||||
self._album_artists = []
|
||||
self.update_metadata_images_enabled = True
|
||||
@@ -376,6 +378,7 @@ class Album(DataObject, Item):
|
||||
self.enable_update_metadata_images(False)
|
||||
for track in self._new_tracks:
|
||||
track.orig_metadata.copy(track.metadata)
|
||||
track.metadata_images_changed.connect(self.update_metadata_images)
|
||||
|
||||
# Prepare parser for user's script
|
||||
for s_name, s_text in enabled_tagger_scripts_texts():
|
||||
@@ -396,7 +399,6 @@ 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
|
||||
@@ -513,12 +515,10 @@ class Album(DataObject, Item):
|
||||
self._files += 1
|
||||
self.update(update_tracks=False)
|
||||
add_metadata_images(self, [file])
|
||||
file.metadata_images_changed.connect(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)
|
||||
remove_metadata_images(self, [file])
|
||||
|
||||
def _match_files(self, files, threshold=0):
|
||||
@@ -719,8 +719,8 @@ class Album(DataObject, Item):
|
||||
return
|
||||
|
||||
update_metadata_images(self)
|
||||
|
||||
self.update(False)
|
||||
self.metadata_images_changed.emit()
|
||||
|
||||
def keep_original_images(self):
|
||||
self.enable_update_metadata_images(False)
|
||||
|
||||
@@ -72,6 +72,8 @@ from picard.ui.item import Item
|
||||
|
||||
class FileList(QtCore.QObject, Item):
|
||||
|
||||
metadata_images_changed = QtCore.pyqtSignal()
|
||||
|
||||
def __init__(self, files=None):
|
||||
QtCore.QObject.__init__(self)
|
||||
self.metadata = Metadata()
|
||||
@@ -81,7 +83,8 @@ class FileList(QtCore.QObject, Item):
|
||||
for file in self.files:
|
||||
if self.can_show_coverart:
|
||||
file.metadata_images_changed.connect(self.update_metadata_images)
|
||||
update_metadata_images(self)
|
||||
if self.files:
|
||||
update_metadata_images(self)
|
||||
|
||||
def iterfiles(self, save=False):
|
||||
for file in self.files:
|
||||
@@ -100,6 +103,7 @@ class FileList(QtCore.QObject, Item):
|
||||
def update_metadata_images(self):
|
||||
if self.update_metadata_images_enabled and self.can_show_coverart:
|
||||
update_metadata_images(self)
|
||||
self.metadata_images_changed.emit()
|
||||
|
||||
def keep_original_images(self):
|
||||
self.enable_update_metadata_images(False)
|
||||
|
||||
@@ -350,6 +350,7 @@ class Track(DataObject, Item):
|
||||
|
||||
def update_orig_metadata_images(self):
|
||||
update_metadata_images(self)
|
||||
self.metadata_images_changed.emit()
|
||||
|
||||
def keep_original_images(self):
|
||||
for file in self.linked_files:
|
||||
|
||||
@@ -347,17 +347,29 @@ class CoverArtBox(QtWidgets.QGroupBox):
|
||||
self.cover_art_label.setText(_('New Cover Art'))
|
||||
self.orig_cover_art_label.setText(_('Original Cover Art'))
|
||||
|
||||
def show(self):
|
||||
self.update_display(True)
|
||||
super().show()
|
||||
def set_item(self, item):
|
||||
if not item.can_show_coverart:
|
||||
return
|
||||
|
||||
if self.item and hasattr(self.item, 'metadata_images_changed'):
|
||||
self.item.metadata_images_changed.disconnect(self.update_metadata)
|
||||
self.item = item
|
||||
if hasattr(self.item, 'metadata_images_changed'):
|
||||
self.item.metadata_images_changed.connect(self.update_metadata)
|
||||
self.update_metadata()
|
||||
|
||||
def update_metadata(self):
|
||||
if not self.item:
|
||||
return
|
||||
|
||||
metadata = self.item.metadata
|
||||
orig_metadata = self.item.orig_metadata
|
||||
|
||||
def set_metadata(self, metadata, orig_metadata, item):
|
||||
if not metadata or not metadata.images:
|
||||
self.cover_art.set_metadata(orig_metadata)
|
||||
else:
|
||||
self.cover_art.set_metadata(metadata)
|
||||
self.orig_cover_art.set_metadata(orig_metadata)
|
||||
self.item = item
|
||||
self.update_display()
|
||||
|
||||
def fetch_remote_image(self, url, fallback_data=None):
|
||||
@@ -461,7 +473,6 @@ class CoverArtBox(QtWidgets.QGroupBox):
|
||||
set_image = set_image_append
|
||||
debug_info = "Appending dropped %r to %r"
|
||||
|
||||
update = True
|
||||
if isinstance(self.item, Album):
|
||||
album = self.item
|
||||
album.enable_update_metadata_images(False)
|
||||
@@ -507,14 +518,9 @@ class CoverArtBox(QtWidgets.QGroupBox):
|
||||
file.update()
|
||||
else:
|
||||
debug_info = "Dropping %r to %r is not handled"
|
||||
update = False
|
||||
|
||||
log.debug(debug_info, coverartimage, self.item)
|
||||
|
||||
if update:
|
||||
self.cover_art.set_metadata(self.item.metadata)
|
||||
self.show()
|
||||
|
||||
def choose_local_file(self):
|
||||
file_chooser = QtWidgets.QFileDialog(self)
|
||||
file_chooser.setNameFilters([
|
||||
|
||||
@@ -1168,8 +1168,6 @@ class MainWindow(QtWidgets.QMainWindow, PreserveGeometry):
|
||||
|
||||
self.update_actions()
|
||||
|
||||
metadata = None
|
||||
orig_metadata = None
|
||||
obj = None
|
||||
|
||||
# Clear any existing status bar messages
|
||||
@@ -1181,8 +1179,6 @@ class MainWindow(QtWidgets.QMainWindow, PreserveGeometry):
|
||||
if len(objects) == 1:
|
||||
obj = list(objects)[0]
|
||||
if isinstance(obj, File):
|
||||
metadata = obj.metadata
|
||||
orig_metadata = obj.orig_metadata
|
||||
if obj.state == obj.ERROR:
|
||||
msg = N_("%(filename)s (error: %(error)s)")
|
||||
mparms = {
|
||||
@@ -1196,10 +1192,8 @@ class MainWindow(QtWidgets.QMainWindow, PreserveGeometry):
|
||||
}
|
||||
self.set_statusbar_message(msg, mparms, echo=None, history=None)
|
||||
elif isinstance(obj, Track):
|
||||
metadata = obj.metadata
|
||||
if obj.num_linked_files == 1:
|
||||
file = obj.linked_files[0]
|
||||
orig_metadata = file.orig_metadata
|
||||
if file.has_error():
|
||||
msg = N_("%(filename)s (%(similarity)d%%) (error: %(error)s)")
|
||||
mparms = {
|
||||
@@ -1215,22 +1209,15 @@ class MainWindow(QtWidgets.QMainWindow, PreserveGeometry):
|
||||
}
|
||||
self.set_statusbar_message(msg, mparms, echo=None,
|
||||
history=None)
|
||||
elif isinstance(obj, Album):
|
||||
metadata = obj.metadata
|
||||
orig_metadata = obj.orig_metadata
|
||||
elif obj.can_show_coverart:
|
||||
metadata = obj.metadata
|
||||
else:
|
||||
elif new_selection:
|
||||
# Create a temporary file list which allows changing cover art for all selected files
|
||||
files = self.tagger.get_files_from_objects(objects)
|
||||
obj = FileList(files)
|
||||
metadata = obj.metadata
|
||||
orig_metadata = obj.orig_metadata
|
||||
|
||||
if new_selection:
|
||||
self.metadata_box.selection_dirty = True
|
||||
self.cover_art_box.set_item(obj)
|
||||
self.metadata_box.update(drop_album_caches=drop_album_caches)
|
||||
self.cover_art_box.set_metadata(metadata, orig_metadata, obj)
|
||||
self.selection_updated.emit(objects)
|
||||
|
||||
def refresh_metadatabox(self):
|
||||
|
||||
Reference in New Issue
Block a user