Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 37 additions & 5 deletions beetsplug/lastgenre/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -493,6 +493,43 @@

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:
Expand Down Expand Up @@ -618,13 +655,8 @@
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:

Check failure on line 659 in beetsplug/lastgenre/__init__.py

View workflow job for this annotation

GitHub Actions / Check types with mypy

Expected an indented block after 'if' statement on line 657

Check failure on line 659 in beetsplug/lastgenre/__init__.py

View workflow job for this annotation

GitHub Actions / Check linting

ruff (invalid-syntax)

beetsplug/lastgenre/__init__.py:659:9: invalid-syntax: Expected an indented block after `if` statement
stage_label, new_genres, stage_artist = self._fetch_artist_stage(
obj
)
Expand Down
Loading