From 66275fabc76b2257b356d72a0f76d86a801191cb Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Mon, 6 Mar 2017 08:59:53 +0100 Subject: [PATCH 01/14] Add context menu to CoverArtBox and "keep images" option Add a context menu to the Cover Art Box and introduce an option in that menu to "keep original cover art" which restores metadata.images from the objects' orig_metadata.images --- picard/album.py | 8 ++++++++ picard/file.py | 4 ++++ picard/track.py | 8 ++++++++ picard/ui/coverartbox.py | 20 ++++++++++++++++++++ 4 files changed, 40 insertions(+) diff --git a/picard/album.py b/picard/album.py index 4b7875a7c..15e672d2d 100644 --- a/picard/album.py +++ b/picard/album.py @@ -586,6 +586,14 @@ class Album(DataObject, Item): self.update(False) + def keep_original_images(self): + print('keep') + for track in self.tracks: + track.keep_original_images() + for file in list(self.unmatched_files.files): + file.keep_original_images() + self.update_metadata_images() + class NatAlbum(Album): diff --git a/picard/file.py b/picard/file.py index 8f2dec9dc..65751ee55 100644 --- a/picard/file.py +++ b/picard/file.py @@ -175,6 +175,10 @@ class File(QtCore.QObject, Item): self.metadata["acoustid_id"] = acoustid self.metadata_images_changed.emit() + def keep_original_images(self): + self.metadata.images = self.orig_metadata.images + self.update() + def has_error(self): return self.state == File.ERROR diff --git a/picard/track.py b/picard/track.py index 0684a6263..d2eea0b75 100644 --- a/picard/track.py +++ b/picard/track.py @@ -228,6 +228,14 @@ class Track(DataObject, Item): def update_orig_metadata_images(self): update_metadata_images(self) + def keep_original_images(self): + for file in self.linked_files: + file.keep_original_images() + if self.linked_files: + self.update_orig_metadata_images() + self.metadata.images = self.orig_metadata.images[:] + self.update() + class NonAlbumTrack(Track): diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index af05bbc67..771612e62 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -241,6 +241,10 @@ class CoverArtThumbnail(ActiveLabel): def fetch_remote_image(self, url): return self.parent().fetch_remote_image(url) + def contextMenuEvent(self, event): + print('CoverArtThumbnail.contextMenuEvent', type(self.parent())) + return self.parent().contextMenuEvent(event) + class CoverArtBox(QtGui.QGroupBox): @@ -410,3 +414,19 @@ class CoverArtBox(QtGui.QGroupBox): file.update() self.cover_art.set_metadata(self.item.metadata) self.show() + + def contextMenuEvent(self, event): + menu = QtGui.QMenu(self) + name = _(u'Show more details') + show_more_details_action = QtGui.QAction(name, self.parent) + show_more_details_action.triggered.connect(self.show_cover_art_info) + menu.addAction(show_more_details_action) + + if self.orig_cover_art.isVisible(): + name = _(u'Use Original Cover Art') + use_orig_value_action = QtGui.QAction(name, self.parent) + use_orig_value_action.triggered.connect(self.item.keep_original_images) + menu.addAction(use_orig_value_action) + + menu.exec_(event.globalPos()) + event.accept() From 99b4f014ae0d7d6978b627b88c1ed3ca3f71cfe2 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Mon, 6 Mar 2017 09:11:54 +0100 Subject: [PATCH 02/14] Remove unnecessary code --- picard/album.py | 1 - picard/ui/coverartbox.py | 4 ---- 2 files changed, 5 deletions(-) diff --git a/picard/album.py b/picard/album.py index 15e672d2d..b2719fc47 100644 --- a/picard/album.py +++ b/picard/album.py @@ -587,7 +587,6 @@ class Album(DataObject, Item): self.update(False) def keep_original_images(self): - print('keep') for track in self.tracks: track.keep_original_images() for file in list(self.unmatched_files.files): diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 771612e62..38f025574 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -241,10 +241,6 @@ class CoverArtThumbnail(ActiveLabel): def fetch_remote_image(self, url): return self.parent().fetch_remote_image(url) - def contextMenuEvent(self, event): - print('CoverArtThumbnail.contextMenuEvent', type(self.parent())) - return self.parent().contextMenuEvent(event) - class CoverArtBox(QtGui.QGroupBox): From fe004b9768a6182eb1b0f4700668d0474f771e61 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Tue, 7 Mar 2017 10:50:40 +0100 Subject: [PATCH 03/14] Show the "Show details" menu entry only when needed Also reindent the "use original cover art" block which was overindented --- picard/ui/coverartbox.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 38f025574..08a9678e7 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -413,16 +413,17 @@ class CoverArtBox(QtGui.QGroupBox): def contextMenuEvent(self, event): menu = QtGui.QMenu(self) - name = _(u'Show more details') - show_more_details_action = QtGui.QAction(name, self.parent) - show_more_details_action.triggered.connect(self.show_cover_art_info) - menu.addAction(show_more_details_action) + if self.show_details_button.isVisible(): + name = _(u'Show more details') + show_more_details_action = QtGui.QAction(name, self.parent) + show_more_details_action.triggered.connect(self.show_cover_art_info) + menu.addAction(show_more_details_action) if self.orig_cover_art.isVisible(): - name = _(u'Use Original Cover Art') - use_orig_value_action = QtGui.QAction(name, self.parent) - use_orig_value_action.triggered.connect(self.item.keep_original_images) - menu.addAction(use_orig_value_action) + name = _(u'Use Original Cover Art') + use_orig_value_action = QtGui.QAction(name, self.parent) + use_orig_value_action.triggered.connect(self.item.keep_original_images) + menu.addAction(use_orig_value_action) menu.exec_(event.globalPos()) event.accept() From cc0a31d384030aebf07ec547ebb632624df66c72 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Tue, 7 Mar 2017 12:27:58 +0100 Subject: [PATCH 04/14] Add new setting to allow users to replace/append dropped images The context menu for the cover art box now allows to set the behaviour on image drop to replace/append front images. --- picard/ui/coverartbox.py | 37 ++++++++++++++++++++++++++++------ picard/ui/options/interface.py | 1 + 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 08a9678e7..cd0bc5d1f 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -21,7 +21,7 @@ import os import sys from functools import partial from PyQt4 import QtCore, QtGui, QtNetwork -from picard import log +from picard import config, log from picard.album import Album from picard.coverart.image import CoverArtImage, CoverArtImageError from picard.track import Track @@ -378,14 +378,21 @@ class CoverArtBox(QtGui.QGroupBox): except CoverArtImageError as e: log.warning("Can't load image: %s" % unicode(e)) return + + if config.setting["behaviour_on_image_drop"] == 'replace': + drop_image = lambda obj: obj.metadata.set_front_image(coverartimage) + else: + drop_image = lambda obj: obj.metadata.append_image(coverartimage) + if isinstance(self.item, Album): album = self.item album.enable_update_metadata_images(False) + drop_image(album) for track in album.tracks: - track.metadata.set_front_image(coverartimage) + drop_image(track) track.metadata_images_changed.emit() for file in album.iterfiles(): - file.metadata.set_front_image(coverartimage) + drop_image(file) file.metadata_images_changed.emit() file.update() album.enable_update_metadata_images(True) @@ -394,10 +401,10 @@ class CoverArtBox(QtGui.QGroupBox): elif isinstance(self.item, Track): track = self.item track.album.enable_update_metadata_images(False) - track.metadata.set_front_image(coverartimage) + drop_image(track) track.metadata_images_changed.emit() for file in track.iterfiles(): - file.metadata.set_front_image(coverartimage) + drop_image(file) file.metadata_images_changed.emit() file.update() track.album.enable_update_metadata_images(True) @@ -405,12 +412,15 @@ class CoverArtBox(QtGui.QGroupBox): track.album.update(False) elif isinstance(self.item, File): file = self.item - file.metadata.set_front_image(coverartimage) + drop_image(file) file.metadata_images_changed.emit() file.update() self.cover_art.set_metadata(self.item.metadata) self.show() + def setBehaviourOnImageDrop(self, behaviour): + config.setting["behaviour_on_image_drop"] = behaviour + def contextMenuEvent(self, event): menu = QtGui.QMenu(self) if self.show_details_button.isVisible(): @@ -425,5 +435,20 @@ class CoverArtBox(QtGui.QGroupBox): use_orig_value_action.triggered.connect(self.item.keep_original_images) menu.addAction(use_orig_value_action) + if not menu.isEmpty(): + menu.addSeparator() + + behaviourOnDrop = QtGui.QActionGroup(self.parent, exclusive=True) + action = behaviourOnDrop.addAction(QtGui.QAction(_(u'Replace front cover art on drop'), self.parent, checkable=True)) + action.triggered.connect(partial(self.setBehaviourOnImageDrop, behaviour='replace')) + if config.setting["behaviour_on_image_drop"] == 'replace': + action.setChecked(True) + menu.addAction(action) + action = behaviourOnDrop.addAction(QtGui.QAction(_(u'Append front cover art on drop'), self.parent, checkable=True)) + action.triggered.connect(partial(self.setBehaviourOnImageDrop, behaviour='append')) + if config.setting["behaviour_on_image_drop"] == 'append': + action.setChecked(True) + menu.addAction(action) + menu.exec_(event.globalPos()) event.accept() diff --git a/picard/ui/options/interface.py b/picard/ui/options/interface.py index f890a1024..a00d8f6e6 100644 --- a/picard/ui/options/interface.py +++ b/picard/ui/options/interface.py @@ -98,6 +98,7 @@ class InterfaceOptionsPage(OptionsPage): config.TextOption("setting", "ui_language", u""), config.BoolOption("setting", "starting_directory", False), config.TextOption("setting", "starting_directory_path", ""), + config.TextOption("setting", "behaviour_on_image_drop", "replace"), config.ListOption("setting", "toolbar_layout", [ 'add_directory_action', 'add_files_action', From e71f38300600ee8e3493c9cd856614d43cfc09dd Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Tue, 7 Mar 2017 12:52:38 +0100 Subject: [PATCH 05/14] Set the image drop default behaviour to "append" This way we don't change the current behaviour --- picard/ui/options/interface.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/picard/ui/options/interface.py b/picard/ui/options/interface.py index a00d8f6e6..c23abf404 100644 --- a/picard/ui/options/interface.py +++ b/picard/ui/options/interface.py @@ -98,7 +98,7 @@ class InterfaceOptionsPage(OptionsPage): config.TextOption("setting", "ui_language", u""), config.BoolOption("setting", "starting_directory", False), config.TextOption("setting", "starting_directory_path", ""), - config.TextOption("setting", "behaviour_on_image_drop", "replace"), + config.TextOption("setting", "behaviour_on_image_drop", "append"), config.ListOption("setting", "toolbar_layout", [ 'add_directory_action', 'add_files_action', From 0b62148b61b4bb3114018ae1e6ffd23f1c048d78 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Tue, 7 Mar 2017 13:03:36 +0100 Subject: [PATCH 06/14] Fix E731: Use a def instead of lambda --- picard/ui/coverartbox.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index cd0bc5d1f..cca889e1c 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -380,9 +380,11 @@ class CoverArtBox(QtGui.QGroupBox): return if config.setting["behaviour_on_image_drop"] == 'replace': - drop_image = lambda obj: obj.metadata.set_front_image(coverartimage) + def drop_image(obj): + obj.metadata.set_front_image(coverartimage) else: - drop_image = lambda obj: obj.metadata.append_image(coverartimage) + def drop_image(obj): + obj.metadata.append_image(coverartimage) if isinstance(self.item, Album): album = self.item From fe794ddd9b182a82dfcf75d8c679226c869e59aa Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Tue, 7 Mar 2017 13:47:38 +0100 Subject: [PATCH 07/14] Copy the list of images when keeping them We want a copy of the list or the orig_metadata.images would be overwritten by changes to the metadata.images --- picard/file.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/picard/file.py b/picard/file.py index 65751ee55..1c5badaa8 100644 --- a/picard/file.py +++ b/picard/file.py @@ -176,7 +176,7 @@ class File(QtCore.QObject, Item): self.metadata_images_changed.emit() def keep_original_images(self): - self.metadata.images = self.orig_metadata.images + self.metadata.images = self.orig_metadata.images[:] self.update() def has_error(self): From cac46dabb1ccc4d5e2e78c3a2c924aa5a18d2cb1 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Fri, 24 Mar 2017 11:56:39 +0100 Subject: [PATCH 08/14] Remove images in keep_original_images if the track doesn't have a file If the track doesn't have a file and the user selected to keep original images, remove the downloaded images from metadata.images so when a file is added to the track, the original image is kept. Also, this is more consistent with respect to album images for albums where some tracks don't have a file and "Keep original images" is selected. --- picard/track.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/picard/track.py b/picard/track.py index d2eea0b75..393d21a40 100644 --- a/picard/track.py +++ b/picard/track.py @@ -234,6 +234,8 @@ class Track(DataObject, Item): if self.linked_files: self.update_orig_metadata_images() self.metadata.images = self.orig_metadata.images[:] + else: + self.metadata.images = [] self.update() From b0c9c261d62adb68eaf1cba848f5cf20a45ee7cd Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Fri, 24 Mar 2017 13:27:22 +0100 Subject: [PATCH 09/14] Rename drop_image to set_image and fix menu entry names Renamed "Use Original Cover Art" to "Keep original cover art" and added ... to the end of "Show more details" --- picard/ui/coverartbox.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index cca889e1c..e67606694 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -380,21 +380,21 @@ class CoverArtBox(QtGui.QGroupBox): return if config.setting["behaviour_on_image_drop"] == 'replace': - def drop_image(obj): + def set_image(obj): obj.metadata.set_front_image(coverartimage) else: - def drop_image(obj): + def set_image(obj): obj.metadata.append_image(coverartimage) if isinstance(self.item, Album): album = self.item album.enable_update_metadata_images(False) - drop_image(album) + set_image(album) for track in album.tracks: - drop_image(track) + set_image(track) track.metadata_images_changed.emit() for file in album.iterfiles(): - drop_image(file) + set_image(file) file.metadata_images_changed.emit() file.update() album.enable_update_metadata_images(True) @@ -403,10 +403,10 @@ class CoverArtBox(QtGui.QGroupBox): elif isinstance(self.item, Track): track = self.item track.album.enable_update_metadata_images(False) - drop_image(track) + set_image(track) track.metadata_images_changed.emit() for file in track.iterfiles(): - drop_image(file) + set_image(file) file.metadata_images_changed.emit() file.update() track.album.enable_update_metadata_images(True) @@ -414,7 +414,7 @@ class CoverArtBox(QtGui.QGroupBox): track.album.update(False) elif isinstance(self.item, File): file = self.item - drop_image(file) + set_image(file) file.metadata_images_changed.emit() file.update() self.cover_art.set_metadata(self.item.metadata) @@ -426,13 +426,13 @@ class CoverArtBox(QtGui.QGroupBox): def contextMenuEvent(self, event): menu = QtGui.QMenu(self) if self.show_details_button.isVisible(): - name = _(u'Show more details') + name = _(u'Show more details...') show_more_details_action = QtGui.QAction(name, self.parent) show_more_details_action.triggered.connect(self.show_cover_art_info) menu.addAction(show_more_details_action) if self.orig_cover_art.isVisible(): - name = _(u'Use Original Cover Art') + name = _(u'Keep original cover art') use_orig_value_action = QtGui.QAction(name, self.parent) use_orig_value_action.triggered.connect(self.item.keep_original_images) menu.addAction(use_orig_value_action) From b0a1c0e071c4b62611cae0fdbc0371ec51a740ae Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Fri, 24 Mar 2017 13:33:15 +0100 Subject: [PATCH 10/14] Renamed behaviour_on_image_drop to load_image_behavior Also renamed related methods/variables to follow the same pattern --- picard/ui/coverartbox.py | 20 ++++++++++---------- picard/ui/options/interface.py | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index e67606694..49ca90b92 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -379,7 +379,7 @@ class CoverArtBox(QtGui.QGroupBox): log.warning("Can't load image: %s" % unicode(e)) return - if config.setting["behaviour_on_image_drop"] == 'replace': + if config.setting["load_image_behavior"] == 'replace': def set_image(obj): obj.metadata.set_front_image(coverartimage) else: @@ -420,8 +420,8 @@ class CoverArtBox(QtGui.QGroupBox): self.cover_art.set_metadata(self.item.metadata) self.show() - def setBehaviourOnImageDrop(self, behaviour): - config.setting["behaviour_on_image_drop"] = behaviour + def set_load_image_behavior(self, behavior): + config.setting["load_image_behavior"] = behavior def contextMenuEvent(self, event): menu = QtGui.QMenu(self) @@ -440,15 +440,15 @@ class CoverArtBox(QtGui.QGroupBox): if not menu.isEmpty(): menu.addSeparator() - behaviourOnDrop = QtGui.QActionGroup(self.parent, exclusive=True) - action = behaviourOnDrop.addAction(QtGui.QAction(_(u'Replace front cover art on drop'), self.parent, checkable=True)) - action.triggered.connect(partial(self.setBehaviourOnImageDrop, behaviour='replace')) - if config.setting["behaviour_on_image_drop"] == 'replace': + load_image_behavior_group = QtGui.QActionGroup(self.parent, exclusive=True) + action = load_image_behavior_group.addAction(QtGui.QAction(_(u'Replace front cover art on drop'), self.parent, checkable=True)) + action.triggered.connect(partial(self.setLoadImageBehavior, behavior='replace')) + if config.setting["load_image_behavior"] == 'replace': action.setChecked(True) menu.addAction(action) - action = behaviourOnDrop.addAction(QtGui.QAction(_(u'Append front cover art on drop'), self.parent, checkable=True)) - action.triggered.connect(partial(self.setBehaviourOnImageDrop, behaviour='append')) - if config.setting["behaviour_on_image_drop"] == 'append': + action = load_image_behavior_group.addAction(QtGui.QAction(_(u'Append front cover art on drop'), self.parent, checkable=True)) + action.triggered.connect(partial(self.setLoadImageBehavior, behavior='append')) + if config.setting["load_image_behavior"] == 'append': action.setChecked(True) menu.addAction(action) diff --git a/picard/ui/options/interface.py b/picard/ui/options/interface.py index c23abf404..13ae2c530 100644 --- a/picard/ui/options/interface.py +++ b/picard/ui/options/interface.py @@ -98,7 +98,7 @@ class InterfaceOptionsPage(OptionsPage): config.TextOption("setting", "ui_language", u""), config.BoolOption("setting", "starting_directory", False), config.TextOption("setting", "starting_directory_path", ""), - config.TextOption("setting", "behaviour_on_image_drop", "append"), + config.TextOption("setting", "load_image_behavior", "append"), config.ListOption("setting", "toolbar_layout", [ 'add_directory_action', 'add_files_action', From 3de28b37a740cc0ef26f3499fa57eb18b6771882 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Fri, 24 Mar 2017 13:51:24 +0100 Subject: [PATCH 11/14] Don't define set_image functions inside load_remote_image --- picard/ui/coverartbox.py | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 49ca90b92..d2252a1f4 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -242,6 +242,14 @@ class CoverArtThumbnail(ActiveLabel): return self.parent().fetch_remote_image(url) +def set_image_replace(obj, coverartimage): + obj.metadata.set_front_image(coverartimage) + + +def set_image_append(obj, coverartimage): + obj.metadata.append_image(coverartimage) + + class CoverArtBox(QtGui.QGroupBox): def __init__(self, parent): @@ -380,21 +388,19 @@ class CoverArtBox(QtGui.QGroupBox): return if config.setting["load_image_behavior"] == 'replace': - def set_image(obj): - obj.metadata.set_front_image(coverartimage) + set_image = set_image_replace else: - def set_image(obj): - obj.metadata.append_image(coverartimage) + set_image = set_image_append if isinstance(self.item, Album): album = self.item album.enable_update_metadata_images(False) - set_image(album) + set_image(album, coverartimage) for track in album.tracks: - set_image(track) + set_image(track, coverartimage) track.metadata_images_changed.emit() for file in album.iterfiles(): - set_image(file) + set_image(file, coverartimage) file.metadata_images_changed.emit() file.update() album.enable_update_metadata_images(True) @@ -403,10 +409,10 @@ class CoverArtBox(QtGui.QGroupBox): elif isinstance(self.item, Track): track = self.item track.album.enable_update_metadata_images(False) - set_image(track) + set_image(track, coverartimage) track.metadata_images_changed.emit() for file in track.iterfiles(): - set_image(file) + set_image(file, coverartimage) file.metadata_images_changed.emit() file.update() track.album.enable_update_metadata_images(True) @@ -414,7 +420,7 @@ class CoverArtBox(QtGui.QGroupBox): track.album.update(False) elif isinstance(self.item, File): file = self.item - set_image(file) + set_image(file, coverartimage) file.metadata_images_changed.emit() file.update() self.cover_art.set_metadata(self.item.metadata) From 3dbd1cc62a8809244813db5d37e1fae1e8c956b1 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Fri, 24 Mar 2017 13:54:50 +0100 Subject: [PATCH 12/14] Rename the name of the slot in the connect statement too --- picard/ui/coverartbox.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index d2252a1f4..1071735bc 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -448,12 +448,12 @@ class CoverArtBox(QtGui.QGroupBox): load_image_behavior_group = QtGui.QActionGroup(self.parent, exclusive=True) action = load_image_behavior_group.addAction(QtGui.QAction(_(u'Replace front cover art on drop'), self.parent, checkable=True)) - action.triggered.connect(partial(self.setLoadImageBehavior, behavior='replace')) + action.triggered.connect(partial(self.set_load_image_behavior, behavior='replace')) if config.setting["load_image_behavior"] == 'replace': action.setChecked(True) menu.addAction(action) action = load_image_behavior_group.addAction(QtGui.QAction(_(u'Append front cover art on drop'), self.parent, checkable=True)) - action.triggered.connect(partial(self.setLoadImageBehavior, behavior='append')) + action.triggered.connect(partial(self.set_load_image_behavior, behavior='append')) if config.setting["load_image_behavior"] == 'append': action.setChecked(True) menu.addAction(action) From 3c59e8ff3465dd11bcef4c0100e5cf2de4232132 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Fri, 24 Mar 2017 14:04:02 +0100 Subject: [PATCH 13/14] Optimize the image updates in the album when keeping original CA --- picard/album.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/picard/album.py b/picard/album.py index b2719fc47..a4106df81 100644 --- a/picard/album.py +++ b/picard/album.py @@ -587,10 +587,12 @@ class Album(DataObject, Item): self.update(False) def keep_original_images(self): + self.enable_update_metadata_images(False) for track in self.tracks: track.keep_original_images() for file in list(self.unmatched_files.files): file.keep_original_images() + self.enable_update_metadata_images(True) self.update_metadata_images() From 54dd5616bb92881e8857b81e78a1cee1658a0b3c Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Fri, 24 Mar 2017 14:04:53 +0100 Subject: [PATCH 14/14] Emit the images changed signal when keeping original images This fixes the album cover art to update properly when the user selects to keep the original image of only one file in the album --- picard/file.py | 1 + 1 file changed, 1 insertion(+) diff --git a/picard/file.py b/picard/file.py index 1c5badaa8..49a69476d 100644 --- a/picard/file.py +++ b/picard/file.py @@ -178,6 +178,7 @@ class File(QtCore.QObject, Item): def keep_original_images(self): self.metadata.images = self.orig_metadata.images[:] self.update() + self.metadata_images_changed.emit() def has_error(self): return self.state == File.ERROR