mirror of
https://github.com/beetbox/beets.git
synced 2025-12-06 08:39:17 +01:00
lastgenre: Better existing genres and fallback code
- Respect existing possibly different genre separators in _get_existing_genres. - Use that genre list in a new "original fallback" step in _get_genre.
This commit is contained in:
parent
f24beca085
commit
d539b16453
1 changed files with 37 additions and 6 deletions
|
|
@ -316,12 +316,34 @@ class LastGenrePlugin(plugins.BeetsPlugin):
|
|||
are removed."""
|
||||
separator = self.config["separator"].get()
|
||||
if isinstance(obj, library.Item):
|
||||
item_genre = obj.get("genre", with_album=False).split(separator)
|
||||
genre_string = obj.get("genre", with_album=False)
|
||||
else:
|
||||
item_genre = obj.get("genre").split(separator)
|
||||
genre_string = obj.get("genre")
|
||||
|
||||
# Filter out empty strings
|
||||
return [g for g in item_genre if g]
|
||||
# Check if any separators are present before attempting to split
|
||||
if separator in genre_string:
|
||||
item_genre = genre_string.split(separator)
|
||||
else:
|
||||
# Check for alternative separators
|
||||
split_separator = None
|
||||
# Intentionally keep whitespace (trim later)
|
||||
for alt_sep in [";", "/", ","]:
|
||||
if alt_sep in genre_string:
|
||||
split_separator = alt_sep
|
||||
break
|
||||
|
||||
if split_separator:
|
||||
item_genre = genre_string.split(split_separator)
|
||||
else:
|
||||
# No separators found, return an empty or single genre list
|
||||
item_genre = [genre_string] if genre_string else []
|
||||
|
||||
# Filter out empty strings and strip whitespace
|
||||
final_keep = [g.strip() for g in item_genre if g.strip()]
|
||||
self._log.debug(
|
||||
f"Existing genres gathered: {final_keep}"
|
||||
)
|
||||
return final_keep
|
||||
|
||||
def _combine_resolve_and_log(
|
||||
self, old: list[str], new: list[str]
|
||||
|
|
@ -435,11 +457,20 @@ class LastGenrePlugin(plugins.BeetsPlugin):
|
|||
):
|
||||
return result
|
||||
|
||||
# Nothing found, leave original if configured and valid.
|
||||
# Nothing found, leave original (split up) genres if configured and valid.
|
||||
if keep_genres and self.config["keep_existing"]:
|
||||
resolved_keep = self._resolve_genres(keep_genres)
|
||||
self._log.debug("Resolved keep genres: {}", resolved_keep)
|
||||
return self._format_and_stringify(
|
||||
resolved_keep
|
||||
), "original fallback (split and resolved)"
|
||||
|
||||
# Nothing found, leave original (single) genre if configured and valid.
|
||||
if obj.genre and self.config["keep_existing"]:
|
||||
if not self.whitelist or self._is_valid(obj.genre.lower()):
|
||||
return obj.genre, "original fallback"
|
||||
return obj.genre, "original fallback (as-is)"
|
||||
|
||||
self._log.debug("Pretend: No genre found. obj.genre is: {}", obj.genre)
|
||||
# Return fallback string.
|
||||
if fallback := self.config["fallback"].get():
|
||||
return fallback, "fallback"
|
||||
|
|
|
|||
Loading…
Reference in a new issue