diff --git a/beetsplug/lastgenre/__init__.py b/beetsplug/lastgenre/__init__.py index dacd72f93..557b063d5 100644 --- a/beetsplug/lastgenre/__init__.py +++ b/beetsplug/lastgenre/__init__.py @@ -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"