diff --git a/picard/util/imagelist.py b/picard/util/imagelist.py index 15a00a435..c01abc415 100644 --- a/picard/util/imagelist.py +++ b/picard/util/imagelist.py @@ -219,9 +219,12 @@ def _add_images(metadata, added_images): return current_images = set(metadata.images) - if added_images != current_images: + if added_images.isdisjoint(current_images): metadata.images = ImageList(current_images.union(added_images)) metadata.has_common_images = False + return True + + return False def add_metadata_images(obj, added_sources): @@ -233,11 +236,14 @@ def add_metadata_images(obj, added_sources): """ state = _get_state(obj) (added_new_images, added_orig_images) = _get_metadata_images(state, added_sources) + changed = False if state.update_new_metadata: - _add_images(obj.metadata, added_new_images) + changed |= _add_images(obj.metadata, added_new_images) if state.update_orig_metadata: - _add_images(obj.orig_metadata, added_orig_images) + changed |= _add_images(obj.orig_metadata, added_orig_images) + + return changed def _remove_images(metadata, sources, removed_images): diff --git a/test/test_imagelist.py b/test/test_imagelist.py index cd375519e..0b2f74e01 100644 --- a/test/test_imagelist.py +++ b/test/test_imagelist.py @@ -2,7 +2,7 @@ # # Picard, the next-generation MusicBrainz tagger # -# Copyright (C) 2018-2019 Philipp Wolfer +# Copyright (C) 2018-2019, 2021 Philipp Wolfer # Copyright (C) 2018-2019 Wieland Hoffmann # Copyright (C) 2018-2020 Laurent Monin # @@ -239,10 +239,19 @@ class AddMetadataImagesTest(PicardTestCase): cluster.files = [self.test_files[0]] update_metadata_images(cluster) cluster.files += self.test_files[1:] - add_metadata_images(cluster, self.test_files[1:]) + added = add_metadata_images(cluster, self.test_files[1:]) + self.assertTrue(added) self.assertEqual(set(self.test_images), set(cluster.metadata.images)) self.assertFalse(cluster.metadata.has_common_images) + def test_add_no_changes(self): + cluster = Cluster('Test') + cluster.files = self.test_files + update_metadata_images(cluster) + added = add_metadata_images(cluster, [self.test_files[1]]) + self.assertFalse(added) + self.assertEqual(set(self.test_images), set(cluster.metadata.images)) + class ImageListTest(PicardTestCase):