diff --git a/picard/album.py b/picard/album.py index 4d4f13b39..cb99dedf7 100644 --- a/picard/album.py +++ b/picard/album.py @@ -92,7 +92,6 @@ from picard.util import ( ) from picard.util.imagelist import ( add_metadata_images, - remove_metadata_images, update_metadata_images, ) from picard.util.textencoding import asciipunct @@ -653,7 +652,7 @@ class Album(DataObject, MetadataItem): self._files_count -= 1 if new_album: self.update(update_tracks=False) - remove_metadata_images(self, [file]) + self.remove_metadata_images([file]) @staticmethod def _match_files(files, tracks, unmatched_files, threshold=0): diff --git a/picard/cluster.py b/picard/cluster.py index 78b60b71c..c34359612 100644 --- a/picard/cluster.py +++ b/picard/cluster.py @@ -63,7 +63,6 @@ from picard.util import ( ) from picard.util.imagelist import ( add_metadata_images, - remove_metadata_images, update_metadata_images, ) @@ -137,7 +136,7 @@ class Cluster(FileList): if added_files: add_metadata_images(self.related_album, added_files) if removed_files: - remove_metadata_images(self.related_album, removed_files) + self.related_album.remove_metadata_images(removed_files) self.related_album.update() def add_files(self, files, new_album=True): @@ -170,7 +169,7 @@ class Cluster(FileList): self.item.remove_file(file) if self.can_show_coverart: file.metadata_images_changed.disconnect(self.update_metadata_images) - remove_metadata_images(self, [file]) + self.remove_metadata_images([file]) if new_album: self._update_related_album(removed_files=[file]) self.tagger.window.set_processing(False) diff --git a/picard/item.py b/picard/item.py index ef935a2a7..32f412cf3 100644 --- a/picard/item.py +++ b/picard/item.py @@ -183,6 +183,30 @@ class MetadataItem(Item): self.enable_update_metadata_images(True) self.update_metadata_images() + def remove_metadata_images(self, removed_sources): + """Remove the images in the metadata of `removed_sources` from the metadata. + + Args: + removed_sources: List of child objects (`Track` or `File`) which's metadata images should be removed from + """ + from picard.util.imagelist import ( + _get_metadata_images, + _get_state, + _remove_images, + ) + + state = _get_state(self) + (removed_new_images, removed_orig_images) = _get_metadata_images(state, removed_sources) + + if state.update_new_metadata: + sources = [s.metadata for s in state.sources] + _remove_images(self.metadata, sources, removed_new_images) + if state.update_orig_metadata: + from picard.track import Track + sources = [s.orig_metadata for s in state.sources if not isinstance(s, Track)] + _remove_images(self.orig_metadata, sources, removed_orig_images) + + class FileListItem(MetadataItem): def __init__(self, files=None): diff --git a/picard/track.py b/picard/track.py index dcc390e00..ea1991a44 100644 --- a/picard/track.py +++ b/picard/track.py @@ -77,7 +77,6 @@ from picard.util import pattern_as_regex from picard.util.imagelist import ( ImageList, add_metadata_images, - remove_metadata_images, ) from picard.util.textencoding import asciipunct @@ -193,7 +192,7 @@ class Track(DataObject, FileListItem): file.metadata_images_changed.disconnect(self.update_metadata_images) file.copy_metadata(file.orig_metadata, preserve_deleted=False) self.album.remove_file(self, file, new_album=new_album) - remove_metadata_images(self, [file]) + self.remove_metadata_images([file]) if not self.files and self._orig_images: self.orig_metadata.images = self._orig_images self.metadata.images = self._orig_images.copy() diff --git a/picard/util/imagelist.py b/picard/util/imagelist.py index e5b6fc481..a9f07f34f 100644 --- a/picard/util/imagelist.py +++ b/picard/util/imagelist.py @@ -283,23 +283,3 @@ def _remove_images(metadata, sources, removed_images): metadata.images = ImageList(current_images.difference(removed_images)) metadata.has_common_images = common_images - - -def remove_metadata_images(obj, removed_sources): - """Remove the images in the metadata of `removed_sources` from the metadata of `obj`. - - Args: - obj: A `Cluster`, `Album` or `Track` object with `metadata` property - removed_sources: List of child objects (`Track` or `File`) which's metadata images should be removed from `obj` - """ - from picard.track import Track - - state = _get_state(obj) - (removed_new_images, removed_orig_images) = _get_metadata_images(state, removed_sources) - - if state.update_new_metadata: - sources = [s.metadata for s in state.sources] - _remove_images(obj.metadata, sources, removed_new_images) - if state.update_orig_metadata: - sources = [s.orig_metadata for s in state.sources if not isinstance(s, Track)] - _remove_images(obj.orig_metadata, sources, removed_orig_images) diff --git a/test/test_imagelist.py b/test/test_imagelist.py index a5bdd5b24..7de49d563 100644 --- a/test/test_imagelist.py +++ b/test/test_imagelist.py @@ -34,7 +34,6 @@ from picard.track import Track from picard.util.imagelist import ( ImageList, add_metadata_images, - remove_metadata_images, update_metadata_images, ) @@ -148,7 +147,7 @@ class RemoveMetadataImagesTest(PicardTestCase): cluster.files = list(self.test_files) update_metadata_images(cluster) cluster.files.remove(self.test_files[0]) - remove_metadata_images(cluster, [self.test_files[0]]) + cluster.remove_metadata_images([self.test_files[0]]) self.assertEqual(set(self.test_images[1:]), set(cluster.metadata.images)) self.assertTrue(cluster.metadata.has_common_images) @@ -157,7 +156,7 @@ class RemoveMetadataImagesTest(PicardTestCase): cluster.files = list(self.test_files[1:]) update_metadata_images(cluster) cluster.files.remove(self.test_files[1]) - remove_metadata_images(cluster, [self.test_files[1]]) + cluster.remove_metadata_images([self.test_files[1]]) self.assertEqual(set(self.test_images[1:]), set(cluster.metadata.images)) self.assertTrue(cluster.metadata.has_common_images) @@ -165,7 +164,7 @@ class RemoveMetadataImagesTest(PicardTestCase): cluster = Cluster('Test') cluster.files.append(File('test1.flac')) update_metadata_images(cluster) - remove_metadata_images(cluster, [cluster.files[0]]) + cluster.remove_metadata_images([cluster.files[0]]) self.assertEqual(set(), set(cluster.metadata.images)) self.assertTrue(cluster.metadata.has_common_images) @@ -174,7 +173,7 @@ class RemoveMetadataImagesTest(PicardTestCase): track.files = list(self.test_files) update_metadata_images(track) track.files.remove(self.test_files[0]) - remove_metadata_images(track, [self.test_files[0]]) + track.remove_metadata_images([self.test_files[0]]) self.assertEqual(set(self.test_images[1:]), set(track.orig_metadata.images)) self.assertTrue(track.orig_metadata.has_common_images) @@ -183,7 +182,7 @@ class RemoveMetadataImagesTest(PicardTestCase): track.files = list(self.test_files[1:]) update_metadata_images(track) track.files.remove(self.test_files[1]) - remove_metadata_images(track, [self.test_files[1]]) + track.remove_metadata_images([self.test_files[1]]) self.assertEqual(set(self.test_images[1:]), set(track.orig_metadata.images)) self.assertTrue(track.orig_metadata.has_common_images) @@ -191,7 +190,7 @@ class RemoveMetadataImagesTest(PicardTestCase): track = Track('00000000-0000-0000-0000-000000000000') track.files.append(File('test1.flac')) update_metadata_images(track) - remove_metadata_images(track, [track.files[0]]) + track.remove_metadata_images([track.files[0]]) self.assertEqual(set(), set(track.orig_metadata.images)) self.assertTrue(track.orig_metadata.has_common_images) @@ -200,7 +199,7 @@ class RemoveMetadataImagesTest(PicardTestCase): album.unmatched_files.files = list(self.test_files) update_metadata_images(album) album.unmatched_files.files.remove(self.test_files[0]) - remove_metadata_images(album, [self.test_files[0]]) + album.remove_metadata_images([self.test_files[0]]) self.assertEqual(set(self.test_images[1:]), set(album.metadata.images)) self.assertEqual(set(self.test_images[1:]), set(album.orig_metadata.images)) self.assertTrue(album.metadata.has_common_images) @@ -211,7 +210,7 @@ class RemoveMetadataImagesTest(PicardTestCase): album.unmatched_files.files = list(self.test_files[1:]) update_metadata_images(album) album.unmatched_files.files.remove(self.test_files[1]) - remove_metadata_images(album, [self.test_files[1]]) + album.remove_metadata_images([self.test_files[1]]) self.assertEqual(set(self.test_images[1:]), set(album.metadata.images)) self.assertEqual(set(self.test_images[1:]), set(album.orig_metadata.images)) self.assertTrue(album.metadata.has_common_images) @@ -221,7 +220,7 @@ class RemoveMetadataImagesTest(PicardTestCase): album = Album('00000000-0000-0000-0000-000000000000') album.unmatched_files.files.append(File('test1.flac')) update_metadata_images(album) - remove_metadata_images(album, [album.unmatched_files.files[0]]) + album.remove_metadata_images([album.unmatched_files.files[0]]) self.assertEqual(set(), set(album.metadata.images)) self.assertEqual(set(), set(album.orig_metadata.images)) self.assertTrue(album.metadata.has_common_images)