lastgenre: Resolve combined genres in each stage

To ensure proper fallback to the next stage, in each stage we do a full
combine/resolve/log.

Also we directly return if have satisfied results. As a bonus this
improves readability.

Some duplicate code on the label magic though...
This commit is contained in:
J0J0 Todos 2025-08-20 07:35:47 +02:00 committed by J0J0 Todos
parent f85ba7ab3b
commit d8e90d8e54

View file

@ -380,12 +380,32 @@ class LastGenrePlugin(plugins.BeetsPlugin):
if isinstance(obj, library.Item) and "track" in self.sources:
if new_genres := self.fetch_track_genre(obj):
label = "track"
resolved_genres = self._combine_resolve_and_log(
keep_genres, new_genres
)
if resolved_genres:
suffix = "whitelist" if self.whitelist else "any"
label += f", {suffix}"
if keep_genres:
label = f"keep + {label}"
return self._format_and_stringify(resolved_genres), label
new_genres = []
if not new_genres and "album" in self.sources:
if "album" in self.sources:
if new_genres := self.fetch_album_genre(obj):
label = "album"
resolved_genres = self._combine_resolve_and_log(
keep_genres, new_genres
)
if resolved_genres:
suffix = "whitelist" if self.whitelist else "any"
label += f", {suffix}"
if keep_genres:
label = f"keep + {label}"
return self._format_and_stringify(resolved_genres), label
new_genres = []
if not new_genres and "artist" in self.sources:
if "artist" in self.sources:
new_genres = []
if isinstance(obj, library.Item):
new_genres = self.fetch_artist_genre(obj)
@ -414,17 +434,17 @@ class LastGenrePlugin(plugins.BeetsPlugin):
rank,
)
# Return with a combined or freshly fetched genre list.
if new_genres:
resolved_genres = self._combine_resolve_and_log(
keep_genres, new_genres
)
if resolved_genres:
suffix = "whitelist" if self.whitelist else "any"
label += f", {suffix}"
if keep_genres:
label = f"keep + {label}"
return self._format_and_stringify(resolved_genres), label
if new_genres:
resolved_genres = self._combine_resolve_and_log(
keep_genres, new_genres
)
if resolved_genres:
suffix = "whitelist" if self.whitelist else "any"
label += f", {suffix}"
if keep_genres:
label = f"keep + {label}"
return self._format_and_stringify(resolved_genres), label
new_genres = []
# Nothing found, leave original if configured and valid.
if obj.genre and self.config["keep_existing"]: