Load release events and artist relations.

This commit is contained in:
Lukáš Lalinský
2007-02-16 00:22:42 +01:00
parent eedf89c21b
commit 0db33c8f6d
2 changed files with 44 additions and 1 deletions

View File

@@ -116,7 +116,7 @@ class Album(DataObject, Item):
self._new_metadata = Metadata()
self._new_tracks = []
self._requests = 1
self.tagger.xmlws.get_release_by_id(self.id, self._release_request_finished, inc=('tracks','artist'))
self.tagger.xmlws.get_release_by_id(self.id, self._release_request_finished, inc=('tracks', 'artist', 'artist-rels', 'release-events'))
def update(self, update_tracks=True):
self.tagger.emit(QtCore.SIGNAL("album_updated"), self, update_tracks)

View File

@@ -20,6 +20,37 @@
from picard.util import format_time
_artist_rel_types = {
"Composer": "composer",
"Conductor": "conductor",
"PerformingOrchestra": "ensemble",
"Arranger": "arranger",
"Orchestrator": "arranger",
"Instrumentator": "arranger",
"Lyricist": "lyricist",
"Remixer": "remixer",
"Producer": "producer",
"Engineer": "engineer",
"Audio": "engineer",
#"Mastering": "engineer",
"Sound": "engineer",
"LiveSound": "engineer",
#"Mix": "engineer",
#"Recording": "engineer",
}
def _relations_to_metadata(relation_lists, m):
for relation_list in relation_lists:
if relation_list.target_type == 'Artist':
for relation in relation_list.relation:
try:
m.add(_artist_rel_types[relation.type], relation.artist[0].name[0].text)
except (KeyError, IndexError):
pass
# TODO: Release, Track, URL relations
def artist_to_metadata(node, m, release=False):
m['musicbrainz_artistid'] = node.attribs['id']
if release:
@@ -48,12 +79,15 @@ def track_to_metadata(node, m):
m['~#length'] = int(nodes[0].text)
elif name == 'artist':
artist_to_metadata(nodes[0], m)
elif name == 'relation_list':
_relations_to_metadata(nodes, m)
if '~#length' not in m:
m['~#length'] = 0
m['~length'] = format_time(m['~#length'])
def release_to_metadata(node, m):
"""Make metadata dict from a XML 'release' node."""
m['musicbrainz_albumid'] = node.attribs['id']
for name, nodes in node.children.iteritems():
if not nodes:
@@ -64,3 +98,12 @@ def release_to_metadata(node, m):
m['asin'] = nodes[0].text
elif name == 'artist':
artist_to_metadata(nodes[0], m, True)
elif name == 'relation_list':
_relations_to_metadata(nodes, m)
elif name == 'release_event_list':
# TODO: make prefered country configurable
m['date'] = nodes[0].event[0].date
try:
m['country'] = nodes[0].event[0].country
except (KeyError, IndexError):
pass