From 09d771906fe5c4e7f243cd75c5a8a63e6d55f77b Mon Sep 17 00:00:00 2001 From: Philipp Wolfer Date: Tue, 9 Mar 2021 09:16:29 +0100 Subject: [PATCH] PICARD-2135: Fixed overwriting and deleting WOAR frame --- picard/formats/id3.py | 3 ++- test/formats/test_id3.py | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/picard/formats/id3.py b/picard/formats/id3.py index b47a8ae31..10b0493ee 100644 --- a/picard/formats/id3.py +++ b/picard/formats/id3.py @@ -489,6 +489,7 @@ class ID3File(File): else: tags.add(id3.WCOP(url=values[0])) elif frameid == 'WOAR' and valid_urls: + tags.delall('WOAR') for url in values: tags.add(id3.WOAR(url=url)) elif frameid.startswith('T') or frameid == 'MVNM': @@ -580,7 +581,7 @@ class ID3File(File): if frame.FrameID == 'POPM' and frame.email == user_email: del tags[key] elif real_name in self.__translate: - del tags[real_name] + tags.delall(real_name) elif name.lower() in self.__rtranslate_freetext_ci: delall_ci(tags, 'TXXX:' + self.__rtranslate_freetext_ci[name.lower()]) elif real_name in self.__translate_freetext: diff --git a/test/formats/test_id3.py b/test/formats/test_id3.py index 6b5291ea1..17a08d13b 100644 --- a/test/formats/test_id3.py +++ b/test/formats/test_id3.py @@ -454,6 +454,28 @@ class CommonId3Tests: self.assertIn('http://example.com/1', loaded_licenses) self.assertIn('http://example.com/2', loaded_licenses) + @skipUnlessTestfile + def test_woar_not_duplicated(self): + metadata = Metadata({ + 'website': 'http://example.com/1' + }) + loaded_metadata = save_and_load_metadata(self.filename, metadata) + self.assertEqual(metadata['website'], loaded_metadata['website']) + metadata['website'] = 'http://example.com/2' + loaded_metadata = save_and_load_metadata(self.filename, metadata) + self.assertEqual(metadata['website'], loaded_metadata['website']) + + @skipUnlessTestfile + def test_woar_delete(self): + metadata = Metadata({ + 'website': 'http://example.com/1' + }) + loaded_metadata = save_and_load_metadata(self.filename, metadata) + self.assertEqual(metadata['website'], loaded_metadata['website']) + del metadata['website'] + loaded_metadata = save_and_load_metadata(self.filename, metadata) + self.assertNotIn('website', loaded_metadata) + class MP3Test(CommonId3Tests.Id3TestCase): testfile = 'test.mp3'