mirror of
https://github.com/beetbox/beets.git
synced 2025-12-06 08:39:17 +01:00
lastgenre: Apply blacklist in final resolve loop
since due to canonicalization blacklisted genres might have been added again (even though they were kicked already right after last.fm fetching.
This commit is contained in:
parent
a5fd548f6e
commit
d67ffa487d
1 changed files with 10 additions and 5 deletions
|
|
@ -266,7 +266,7 @@ class LastGenrePlugin(plugins.BeetsPlugin):
|
||||||
depth_tag_pairs.sort(reverse=True)
|
depth_tag_pairs.sort(reverse=True)
|
||||||
return [p[1] for p in depth_tag_pairs]
|
return [p[1] for p in depth_tag_pairs]
|
||||||
|
|
||||||
def _resolve_genres(self, tags: list[str]) -> list[str]:
|
def _resolve_genres(self, tags: list[str], artist: str = None) -> list[str]:
|
||||||
"""Canonicalize, sort and filter a list of genres.
|
"""Canonicalize, sort and filter a list of genres.
|
||||||
|
|
||||||
- Returns an empty list if the input tags list is empty.
|
- Returns an empty list if the input tags list is empty.
|
||||||
|
|
@ -322,7 +322,11 @@ class LastGenrePlugin(plugins.BeetsPlugin):
|
||||||
|
|
||||||
# c14n only adds allowed genres but we may have had forbidden genres in
|
# c14n only adds allowed genres but we may have had forbidden genres in
|
||||||
# the original tags list
|
# the original tags list
|
||||||
valid_tags = [t for t in tags if self._is_valid(t)]
|
valid_tags = [
|
||||||
|
t
|
||||||
|
for t in tags
|
||||||
|
if self._is_valid(t) and not self._is_forbidden(t, artist=artist)
|
||||||
|
]
|
||||||
return valid_tags[:count]
|
return valid_tags[:count]
|
||||||
|
|
||||||
def fetch_genre(self, lastfm_obj):
|
def fetch_genre(self, lastfm_obj):
|
||||||
|
|
@ -453,13 +457,13 @@ class LastGenrePlugin(plugins.BeetsPlugin):
|
||||||
return [g for g in item_genre if g]
|
return [g for g in item_genre if g]
|
||||||
|
|
||||||
def _combine_resolve_and_log(
|
def _combine_resolve_and_log(
|
||||||
self, old: list[str], new: list[str]
|
self, old: list[str], new: list[str], artist: str = None
|
||||||
) -> list[str]:
|
) -> list[str]:
|
||||||
"""Combine old and new genres and process via _resolve_genres."""
|
"""Combine old and new genres and process via _resolve_genres."""
|
||||||
self._log.debug("raw last.fm tags: {}", new)
|
self._log.debug("raw last.fm tags: {}", new)
|
||||||
self._log.debug("existing genres taken into account: {}", old)
|
self._log.debug("existing genres taken into account: {}", old)
|
||||||
combined = old + new
|
combined = old + new
|
||||||
return self._resolve_genres(combined)
|
return self._resolve_genres(combined, artist=artist)
|
||||||
|
|
||||||
def _get_genre(
|
def _get_genre(
|
||||||
self, obj: Union[Album, Item]
|
self, obj: Union[Album, Item]
|
||||||
|
|
@ -485,8 +489,9 @@ class LastGenrePlugin(plugins.BeetsPlugin):
|
||||||
|
|
||||||
def _try_resolve_stage(stage_label: str, keep_genres, new_genres):
|
def _try_resolve_stage(stage_label: str, keep_genres, new_genres):
|
||||||
"""Try to resolve genres for a given stage and log the result."""
|
"""Try to resolve genres for a given stage and log the result."""
|
||||||
|
artist = getattr(obj, 'albumartist', None) or getattr(obj, 'artist', None)
|
||||||
resolved_genres = self._combine_resolve_and_log(
|
resolved_genres = self._combine_resolve_and_log(
|
||||||
keep_genres, new_genres
|
keep_genres, new_genres, artist=artist
|
||||||
)
|
)
|
||||||
if resolved_genres:
|
if resolved_genres:
|
||||||
suffix = "whitelist" if self.whitelist else "any"
|
suffix = "whitelist" if self.whitelist else "any"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue