mirror of
https://github.com/fergalmoran/picard.git
synced 2026-01-06 16:44:06 +00:00
Support the Jaikoz 'artists' tag, with help from @night199uk and @zas
This commit is contained in:
@@ -27,7 +27,6 @@ from picard.metadata import Metadata
|
||||
from picard.similarity import similarity2, similarity
|
||||
from picard.ui.item import Item
|
||||
from picard.util import format_time
|
||||
from picard.mbxml import artist_credit_from_node
|
||||
|
||||
|
||||
class Cluster(QtCore.QObject, Item):
|
||||
|
||||
@@ -127,6 +127,7 @@ class ASFFile(File):
|
||||
'asin': 'ASIN',
|
||||
'djmixer': 'WM/DJMixer',
|
||||
'mixer': 'WM/Mixer',
|
||||
'artists': 'WM/ARTISTS',
|
||||
}
|
||||
__RTRANS = dict([(b, a) for a, b in __TRANS.items()])
|
||||
|
||||
|
||||
@@ -156,6 +156,7 @@ class ID3File(File):
|
||||
'BARCODE': 'barcode',
|
||||
'ASIN': 'asin',
|
||||
'MusicMagic Fingerprint': 'musicip_fingerprint',
|
||||
'Artists': 'artists',
|
||||
}
|
||||
__rtranslate_freetext = dict([(v, k) for k, v in __translate_freetext.iteritems()])
|
||||
|
||||
|
||||
@@ -99,6 +99,7 @@ class MP4File(File):
|
||||
"----:com.apple.iTunes:MOOD": "mood",
|
||||
"----:com.apple.iTunes:SCRIPT": "script",
|
||||
"----:com.apple.iTunes:LANGUAGE": "language",
|
||||
"----:com.apple.iTunes:ARTISTS": "artists",
|
||||
}
|
||||
__r_freeform_tags = dict([(v, k) for k, v in __freeform_tags.iteritems()])
|
||||
|
||||
|
||||
@@ -135,26 +135,30 @@ def _translate_artist_node(node):
|
||||
def artist_credit_from_node(node):
|
||||
artist = ""
|
||||
artistsort = ""
|
||||
artists = []
|
||||
standardize_artists = config.setting["standardize_artists"]
|
||||
for credit in node.name_credit:
|
||||
a = credit.artist[0]
|
||||
transl, translsort = _translate_artist_node(a)
|
||||
if transl:
|
||||
artist += transl
|
||||
translated, translated_sort = _translate_artist_node(a)
|
||||
if translated:
|
||||
name = translated
|
||||
elif 'name' in credit.children and not standardize_artists:
|
||||
name = credit.name[0].text
|
||||
else:
|
||||
if 'name' in credit.children and not config.setting["standardize_artists"]:
|
||||
artist += credit.name[0].text
|
||||
else:
|
||||
artist += a.name[0].text
|
||||
artistsort += translsort if translsort else a.sort_name[0].text
|
||||
name = a.name[0].text
|
||||
artist += name
|
||||
artistsort += translated_sort if translated_sort else a.sort_name[0].text
|
||||
artists.append(name)
|
||||
if 'joinphrase' in credit.attribs:
|
||||
artist += credit.joinphrase
|
||||
artistsort += credit.joinphrase
|
||||
return (artist, artistsort)
|
||||
return (artist, artistsort, artists)
|
||||
|
||||
|
||||
def artist_credit_to_metadata(node, m, release=False):
|
||||
ids = [n.artist[0].id for n in node.name_credit]
|
||||
artist, artistsort = artist_credit_from_node(node)
|
||||
artist, artistsort, artists = artist_credit_from_node(node)
|
||||
m["artists"] = artists
|
||||
if release:
|
||||
m["musicbrainz_albumartistid"] = ids
|
||||
m["albumartist"] = artist
|
||||
|
||||
@@ -86,6 +86,7 @@ TAG_NAMES = {
|
||||
'script': N_('Script'),
|
||||
'~length': N_('Length'),
|
||||
'~rating': N_('Rating'),
|
||||
'artists': N_('Artists'),
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -2,7 +2,11 @@ import unittest
|
||||
import picard
|
||||
from picard import config
|
||||
from picard.metadata import Metadata
|
||||
from picard.mbxml import track_to_metadata, release_to_metadata
|
||||
from picard.mbxml import (
|
||||
track_to_metadata,
|
||||
release_to_metadata,
|
||||
artist_credit_from_node
|
||||
)
|
||||
|
||||
|
||||
settings = {
|
||||
@@ -135,3 +139,26 @@ class ReleaseTest(unittest.TestCase):
|
||||
self.assertEqual('B123456789', m['asin'])
|
||||
self.assertEqual('ABC', m['label'])
|
||||
self.assertEqual('ABC 123', m['catalognumber'])
|
||||
|
||||
|
||||
class ArtistTest(unittest.TestCase):
|
||||
|
||||
def test_1(self):
|
||||
config.setting = settings
|
||||
node = XmlNode(children={
|
||||
'name_credit': [XmlNode(attribs={'joinphrase': ' & '}, children={
|
||||
'artist': [XmlNode(attribs={'id': '456'}, children={
|
||||
'name': [XmlNode(text='Foo Bar')],
|
||||
'sort_name': [XmlNode(text='Bar, Foo')]
|
||||
})]
|
||||
}), XmlNode(children={
|
||||
'artist': [XmlNode(attribs={'id': '789'}, children={
|
||||
'name': [XmlNode(text='Baz')],
|
||||
'sort_name': [XmlNode(text='Baz')]
|
||||
})]
|
||||
})]
|
||||
})
|
||||
artist, artist_sort, artists = artist_credit_from_node(node)
|
||||
self.assertEqual(['Foo Bar', 'Baz'], artists)
|
||||
self.assertEqual('Foo Bar & Baz', artist)
|
||||
self.assertEqual('Bar, Foo & Baz', artist_sort)
|
||||
|
||||
Reference in New Issue
Block a user