mirror of
https://github.com/fergalmoran/picard.git
synced 2026-03-01 02:54:01 +00:00
Fall back to track artist tags for genre on comps.
Commit 334eba9d28 added support for
falling back to the album artist's folksonomy tags for releases/release
groups without tags. This change adds further support to that to allow
compilation releases to use the track artists' tags since album artist
won't work.
This commit is contained in:
@@ -281,6 +281,17 @@ def recording_to_metadata(node, track):
|
||||
m['~recordingcomment'] = nodes[0].text
|
||||
elif name == 'artist_credit':
|
||||
artist_credit_to_metadata(nodes[0], m)
|
||||
if 'name_credit' in nodes[0].children:
|
||||
for name_credit in nodes[0].name_credit:
|
||||
if 'artist' in name_credit.children:
|
||||
for artist in name_credit.artist:
|
||||
trackartist = track.append_track_artist(artist.id)
|
||||
if 'tag_list' in artist.children:
|
||||
add_folksonomy_tags(artist.tag_list[0],
|
||||
trackartist)
|
||||
if 'user_tag_list' in artist.children:
|
||||
add_user_folksonomy_tags(artist.user_tag_list[0],
|
||||
trackartist)
|
||||
elif name == 'relation_list':
|
||||
_relations_to_metadata(nodes, m)
|
||||
elif name == 'tag_list':
|
||||
|
||||
@@ -37,6 +37,11 @@ _TRANSLATE_TAGS = {
|
||||
}
|
||||
|
||||
|
||||
class TrackArtist(DataObject):
|
||||
def __init__(self, id):
|
||||
DataObject.__init__(self, id)
|
||||
|
||||
|
||||
class Track(DataObject, Item):
|
||||
|
||||
def __init__(self, id, album=None):
|
||||
@@ -45,6 +50,7 @@ class Track(DataObject, Item):
|
||||
self.linked_files = []
|
||||
self.num_linked_files = 0
|
||||
self.metadata = Metadata()
|
||||
self._track_artists = []
|
||||
|
||||
def __repr__(self):
|
||||
return '<Track %s %r>' % (self.id, self.metadata["title"])
|
||||
@@ -118,10 +124,10 @@ class Track(DataObject, Item):
|
||||
|
||||
def is_pregap(self):
|
||||
return self.metadata['~pregap'] == '1'
|
||||
|
||||
|
||||
def is_data(self):
|
||||
return self.metadata['~datatrack'] == '1'
|
||||
|
||||
|
||||
def is_silence(self):
|
||||
return self.metadata['~silence'] == '1'
|
||||
|
||||
@@ -136,6 +142,13 @@ class Track(DataObject, Item):
|
||||
return True
|
||||
return False
|
||||
|
||||
def append_track_artist(self, id):
|
||||
"""Append artist id to the list of track artists
|
||||
and return an TrackArtist instance"""
|
||||
track_artist = TrackArtist(id)
|
||||
self._track_artists.append(track_artist)
|
||||
return track_artist
|
||||
|
||||
def _customize_metadata(self):
|
||||
tm = self.metadata
|
||||
|
||||
@@ -163,8 +176,13 @@ class Track(DataObject, Item):
|
||||
if self.album.release_group:
|
||||
self.merge_folksonomy_tags(tags, self.album.release_group.folksonomy_tags)
|
||||
if not tags and config.setting['artists_tags']:
|
||||
for artist in self.album.get_album_artists():
|
||||
self.merge_folksonomy_tags(tags, artist.folksonomy_tags)
|
||||
# For compilations use each track's artists to look up tags
|
||||
if self.metadata['musicbrainz_albumartistid'] == VARIOUS_ARTISTS_ID:
|
||||
for artist in self._track_artists:
|
||||
self.merge_folksonomy_tags(tags, artist.folksonomy_tags)
|
||||
else:
|
||||
for artist in self.album.get_album_artists():
|
||||
self.merge_folksonomy_tags(tags, artist.folksonomy_tags)
|
||||
# Ignore tags with zero or lower score
|
||||
tags = dict((name, count) for name, count in tags.items() if count > 0)
|
||||
if not tags:
|
||||
|
||||
Reference in New Issue
Block a user