From d8e90d8e5493aa44062be7db155f36622bc6ed5a Mon Sep 17 00:00:00 2001 From: J0J0 Todos Date: Wed, 20 Aug 2025 07:35:47 +0200 Subject: [PATCH] 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... --- beetsplug/lastgenre/__init__.py | 46 +++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/beetsplug/lastgenre/__init__.py b/beetsplug/lastgenre/__init__.py index e3b5012ca..44c443a18 100644 --- a/beetsplug/lastgenre/__init__.py +++ b/beetsplug/lastgenre/__init__.py @@ -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"]: