Merge pull request #96 from pscn/master

Addition to pull request #92 (lastgenre) regarding track level genres and Various Artists compilations
This commit is contained in:
Adrian Sampson 2013-02-06 10:45:46 -08:00
commit 19cdd4e907
2 changed files with 29 additions and 10 deletions

View file

@ -357,7 +357,7 @@ class ConfigView(object):
if value not in choices:
raise ConfigValueError(
'{0} must be one of {1}, not {2}'.format(
self.name, repr(value), repr(list(choices))
self.name, repr(list(choices)), repr(value)
)
)

View file

@ -281,6 +281,22 @@ class LastGenrePlugin(plugins.BeetsPlugin):
result = fetch_artist_genre(obj)
elif obj.albumartist != 'Various Artists':
result = fetch_album_artist_genre(obj)
else:
# For 'Various Artists' pick the most used common tag as
# album_tag
artist_genres = {}
for item in obj.items():
tmp_genre = None
if 'track' in self.sources:
tmp_genre = fetch_track_genre(item)
if not tmp_genre:
tmp_genre = fetch_artist_genre(item)
if tmp_genre:
artist_genres[tmp_genre] = \
artist_genres.get(tmp_genre, 0) + 1
if len(artist_genres) > 0:
result = filter(lambda k:artist_genres[k] ==
max(artist_genres.values()), artist_genres)[0]
if result:
return result, 'artist'
@ -316,11 +332,13 @@ class LastGenrePlugin(plugins.BeetsPlugin):
))
for item in album.items():
item.genre, src = self._get_genre(item)
lib.store(item)
log.info(u'genre for track {0} - {1} ({2}): {3}'.format(
item.artist, item.title, src, item.genre
))
if 'track' in self.sources:
# Fetch track genre only if source is 'track'
item.genre, src = self._get_genre(item)
lib.store(item)
log.info(u'genre for track {0} - {1} ({2}): {3}'.format(
item.artist, item.title, src, item.genre
))
if write:
item.write()
@ -339,10 +357,11 @@ class LastGenrePlugin(plugins.BeetsPlugin):
log.debug(u'added last.fm album genre ({0}): {1}'.format(
src, album.genre))
for item in album.items():
item.genre, src = self._get_genre(item)
log.debug(u'added last.fm item genre ({0}): {1}'.format(
src, item.genre))
session.lib.store(item)
if 'track' in self.sources:
item.genre, src = self._get_genre(item)
log.debug(u'added last.fm item genre ({0}): {1}'.format(
src, item.genre))
session.lib.store(item)
else:
item = task.item