lastgenre: Album to item genre fallback

In case individual track sources are enabled but no genre could be
fetched from last.fm, fall back to the album's genre (only if that is
not the fallback genre already).
This commit is contained in:
J0J0 Todos 2025-09-16 08:34:00 +02:00
parent aaa9be123b
commit 0f408416ac

View file

@ -582,16 +582,25 @@ class LastGenrePlugin(plugins.BeetsPlugin):
if "track" in self.sources: if "track" in self.sources:
item_genre, label = self._get_genre(item) item_genre, label = self._get_genre(item)
if not item_genre: # Fallback to album genre if required
if (
not item_genre
or item_genre == self.config["fallback"].get()
and album.genre
and album.genre != self.config["fallback"].get()
):
item_genre = album.genre
label = "inherit from album"
if item_genre:
self._apply_item_genre(item, label, item_genre)
if write:
item.try_write()
else:
self._log.info( self._log.info(
'No genre found for track "{0.title}"', 'No genre found for track "{0.title}"',
item, item,
) )
else:
self._apply_item_genre(item, label, item_genre)
if write:
item.try_write()
else: else:
# Just query single tracks or singletons # Just query single tracks or singletons
for item in lib.items(args): for item in lib.items(args):
@ -614,6 +623,17 @@ class LastGenrePlugin(plugins.BeetsPlugin):
if "track" in self.sources: if "track" in self.sources:
for item in album.items(): for item in album.items():
item_genre, label = self._get_genre(item) item_genre, label = self._get_genre(item)
# Fallback to album genre if required
if (
not item_genre
or item_genre == self.config["fallback"].get()
and album.genre
and album.genre != self.config["fallback"].get()
):
item_genre = album.genre
label = "inherit from album"
self._apply_item_genre(item, label, item_genre) self._apply_item_genre(item, label, item_genre)
else: else: