Merge pull request #1760 from phw/PICARD-2135

PICARD-2135: Fixed saving and deleting license and website to ID3
This commit is contained in:
Philipp Wolfer
2021-03-09 15:06:18 +01:00
committed by GitHub
2 changed files with 69 additions and 1 deletions

View File

@@ -485,10 +485,13 @@ class ID3File(File):
if frameid == 'WCOP':
# Only add WCOP if there is only one license URL, otherwise use TXXX:LICENSE
if len(values) > 1 or not valid_urls:
tags.delall('WCOP')
tags.add(self.build_TXXX(encoding, self.__rtranslate_freetext[name], values))
else:
tags.delall('TXXX:' + self.__rtranslate_freetext[name])
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':
@@ -574,13 +577,16 @@ class ID3File(File):
for key, frame in list(tags.items()):
if frame.FrameID == 'UFID' and frame.owner == 'http://musicbrainz.org':
del tags[key]
elif name == 'license':
tags.delall(real_name)
tags.delall('TXXX:' + self.__rtranslate_freetext[name])
elif real_name == 'POPM':
user_email = config.setting['rating_user_email']
for key, frame in list(tags.items()):
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:

View File

@@ -454,6 +454,68 @@ class CommonId3Tests:
self.assertIn('http://example.com/1', loaded_licenses)
self.assertIn('http://example.com/2', loaded_licenses)
@skipUnlessTestfile
def test_license_upgrade_wcop(self):
tags = mutagen.id3.ID3Tags()
tags.add(mutagen.id3.WCOP(url='http://example.com/1'))
save_raw(self.filename, tags)
metadata = load_metadata(self.filename)
self.assertEqual('http://example.com/1', metadata['license'])
metadata.add('license', 'http://example.com/2')
save_metadata(self.filename, metadata)
raw_metadata = load_raw(self.filename)
self.assertNotIn('WCOP', raw_metadata)
loaded_licenses = [url for url in raw_metadata['TXXX:LICENSE']]
self.assertEqual(['http://example.com/1', 'http://example.com/2'], loaded_licenses)
@skipUnlessTestfile
def test_license_downgrade_wcop(self):
tags = mutagen.id3.ID3Tags()
licenses = ['http://example.com/1', 'http://example.com/2']
tags.add(mutagen.id3.TXXX(desc='LICENSE', text=licenses))
save_raw(self.filename, tags)
raw_metadata = load_raw(self.filename)
metadata = load_metadata(self.filename)
self.assertEqual(licenses, metadata.getall('license'))
metadata['license'] = 'http://example.com/1'
save_metadata(self.filename, metadata)
raw_metadata = load_raw(self.filename)
self.assertEqual('http://example.com/1', raw_metadata['WCOP'])
self.assertNotIn('TXXX:LICENSE', raw_metadata)
@skipUnlessTestfile
def test_license_delete(self):
tags = mutagen.id3.ID3Tags()
tags.add(mutagen.id3.WCOP(url='http://example.com/1'))
tags.add(mutagen.id3.TXXX(desc='LICENSE', text='http://example.com/2'))
save_raw(self.filename, tags)
metadata = load_metadata(self.filename)
del metadata['license']
loaded_metadata = save_and_load_metadata(self.filename, metadata)
self.assertNotIn('license', loaded_metadata)
@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'