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:
Mark Trolley
2016-02-12 13:54:53 -05:00
parent 68fe9170b8
commit 780bb2b5e5
2 changed files with 33 additions and 4 deletions

View File

@@ -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':

View File

@@ -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: