mirror of
https://github.com/beetbox/beets.git
synced 2025-12-06 16:42:42 +01:00
lastgenre: Dedup combine/resolve/label/format code
This commit is contained in:
parent
d8e90d8e54
commit
05a1a95ee9
1 changed files with 29 additions and 36 deletions
|
|
@ -357,9 +357,22 @@ class LastGenrePlugin(plugins.BeetsPlugin):
|
||||||
applied, while "artist, any" means only new last.fm genres are included
|
applied, while "artist, any" means only new last.fm genres are included
|
||||||
and the whitelist feature was disabled.
|
and the whitelist feature was disabled.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
def _try_resolve_stage(stage_label: str, keep_genres, new_genres):
|
||||||
|
"""Try to resolve genres for a given stage and log the result."""
|
||||||
|
resolved_genres = self._combine_resolve_and_log(
|
||||||
|
keep_genres, new_genres
|
||||||
|
)
|
||||||
|
if resolved_genres:
|
||||||
|
suffix = "whitelist" if self.whitelist else "any"
|
||||||
|
label = stage_label + f", {suffix}"
|
||||||
|
if keep_genres:
|
||||||
|
label = f"keep + {label}"
|
||||||
|
return self._format_and_stringify(resolved_genres), label
|
||||||
|
return None
|
||||||
|
|
||||||
keep_genres = []
|
keep_genres = []
|
||||||
new_genres = []
|
new_genres = []
|
||||||
label = ""
|
|
||||||
genres = self._get_existing_genres(obj)
|
genres = self._get_existing_genres(obj)
|
||||||
|
|
||||||
if genres and not self.config["force"]:
|
if genres and not self.config["force"]:
|
||||||
|
|
@ -379,40 +392,26 @@ class LastGenrePlugin(plugins.BeetsPlugin):
|
||||||
# album artist, or most popular track genre.
|
# album artist, or most popular track genre.
|
||||||
if isinstance(obj, library.Item) and "track" in self.sources:
|
if isinstance(obj, library.Item) and "track" in self.sources:
|
||||||
if new_genres := self.fetch_track_genre(obj):
|
if new_genres := self.fetch_track_genre(obj):
|
||||||
label = "track"
|
if result := _try_resolve_stage(
|
||||||
resolved_genres = self._combine_resolve_and_log(
|
"track", keep_genres, new_genres
|
||||||
keep_genres, new_genres
|
):
|
||||||
)
|
return result
|
||||||
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 "album" in self.sources:
|
if "album" in self.sources:
|
||||||
if new_genres := self.fetch_album_genre(obj):
|
if new_genres := self.fetch_album_genre(obj):
|
||||||
label = "album"
|
if result := _try_resolve_stage(
|
||||||
resolved_genres = self._combine_resolve_and_log(
|
"album", keep_genres, new_genres
|
||||||
keep_genres, new_genres
|
):
|
||||||
)
|
return result
|
||||||
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 "artist" in self.sources:
|
if "artist" in self.sources:
|
||||||
new_genres = []
|
new_genres = []
|
||||||
if isinstance(obj, library.Item):
|
if isinstance(obj, library.Item):
|
||||||
new_genres = self.fetch_artist_genre(obj)
|
new_genres = self.fetch_artist_genre(obj)
|
||||||
label = "artist"
|
stage_label = "artist"
|
||||||
elif obj.albumartist != config["va_name"].as_str():
|
elif obj.albumartist != config["va_name"].as_str():
|
||||||
new_genres = self.fetch_album_artist_genre(obj)
|
new_genres = self.fetch_album_artist_genre(obj)
|
||||||
label = "album artist"
|
stage_label = "album artist"
|
||||||
else:
|
else:
|
||||||
# For "Various Artists", pick the most popular track genre.
|
# For "Various Artists", pick the most popular track genre.
|
||||||
item_genres = []
|
item_genres = []
|
||||||
|
|
@ -427,7 +426,7 @@ class LastGenrePlugin(plugins.BeetsPlugin):
|
||||||
if item_genres:
|
if item_genres:
|
||||||
most_popular, rank = plurality(item_genres)
|
most_popular, rank = plurality(item_genres)
|
||||||
new_genres = [most_popular]
|
new_genres = [most_popular]
|
||||||
label = "most popular track"
|
stage_label = "most popular track"
|
||||||
self._log.debug(
|
self._log.debug(
|
||||||
'Most popular track genre "{}" ({}) for VA album.',
|
'Most popular track genre "{}" ({}) for VA album.',
|
||||||
most_popular,
|
most_popular,
|
||||||
|
|
@ -435,16 +434,10 @@ class LastGenrePlugin(plugins.BeetsPlugin):
|
||||||
)
|
)
|
||||||
|
|
||||||
if new_genres:
|
if new_genres:
|
||||||
resolved_genres = self._combine_resolve_and_log(
|
if result := _try_resolve_stage(
|
||||||
keep_genres, new_genres
|
stage_label, keep_genres, new_genres
|
||||||
)
|
):
|
||||||
if resolved_genres:
|
return result
|
||||||
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.
|
# Nothing found, leave original if configured and valid.
|
||||||
if obj.genre and self.config["keep_existing"]:
|
if obj.genre and self.config["keep_existing"]:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue