mirror of
https://github.com/fergalmoran/picard.git
synced 2026-02-20 14:44:05 +00:00
Merge pull request #1760 from phw/PICARD-2135
PICARD-2135: Fixed saving and deleting license and website to ID3
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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'
|
||||
|
||||
Reference in New Issue
Block a user