From 58675e5674ffa9f40c7cf65c4d9fdd731b907f0d Mon Sep 17 00:00:00 2001 From: J0J0 Todos Date: Sun, 19 Apr 2026 19:01:26 +0200 Subject: [PATCH] temp commit for cherry-pick --- beetsplug/lastgenre/__init__.py | 42 +++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/beetsplug/lastgenre/__init__.py b/beetsplug/lastgenre/__init__.py index eb612272ab..f24802d772 100644 --- a/beetsplug/lastgenre/__init__.py +++ b/beetsplug/lastgenre/__init__.py @@ -493,6 +493,43 @@ def _try_resolve_existing_genres( return genres, "keep any, no-force" + def _try_resolve_album_stage( + self, obj: LibModel, keep_genres: list[str] + ) -> tuple[list[str], str] | None: + """Try to resolve album genres for an Item or Album object. + + Fall back to multi-valued albumartists if no genre is found for the + main albumartist. + """ + new_genres = self.client.fetch("album", obj) + if not new_genres and obj.albumartist != config["va_name"].as_str(): + self._log.extra_debug( + 'No album genre found for "{}", ' + "trying multi-valued albumartists field...", + obj.albumartist, + ) + multi_album_genres = [] + for albumartist in obj.albumartists: + self._log.extra_debug( + 'Fetching album genre for "{}"', albumartist + ) + multi_album_genres += self.client.fetch( + "album", obj, albumartist, obj.album + ) + if multi_album_genres: + if resolved := self._try_resolve_stage( + "multi-valued albumartist album", + keep_genres, + multi_album_genres, + artist=None, + ): + return resolved + else: + if resolved := self._try_resolve_stage( + "album", keep_genres, new_genres, artist=obj.albumartist + ): + return resolved + def _try_resolve_original_fallback( self, obj: LibModel, genres: list[str], keep_genres: list[str] ) -> tuple[list[str], str] | None: @@ -618,11 +655,6 @@ def _get_genre(self, obj: LibModel) -> tuple[list[str], str]: return resolved if "album" in self.sources: - if new_genres := self.client.fetch("album", obj): - if resolved := self._try_resolve_stage( - "album", keep_genres, new_genres, artist=obj.albumartist - ): - return resolved if "artist" in self.sources: stage_label, new_genres, stage_artist = self._fetch_artist_stage(