Optimize imagelist.add_metadata_images

Only update image list if new images are not already in the existing images. Also return bool value as indicated in the function documentation.
This commit is contained in:
Philipp Wolfer
2021-11-07 11:47:01 +01:00
parent 0b3b2658af
commit dbc236c48b
2 changed files with 20 additions and 5 deletions

View File

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

View File

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