diff --git a/backend/handler/metadata/gamelist_handler.py b/backend/handler/metadata/gamelist_handler.py index 626b56a79..232a63ebb 100644 --- a/backend/handler/metadata/gamelist_handler.py +++ b/backend/handler/metadata/gamelist_handler.py @@ -104,6 +104,20 @@ def _make_file_uri(platform_dir: str, raw_text: str) -> str: return f"file://{joined_path.as_posix()}" +def _split_comma_separated_values(value: str | None) -> list[str]: + """Split comma separated values into clean list""" + + if not value: + return [] + + split_values = value.split(",") + + return pydash.compact([ + item.strip() + for item in split_values + ]) + + def extract_media_from_gamelist_rom( game: Element, platform: Platform ) -> GamelistMetadataMedia: @@ -196,9 +210,14 @@ def extract_metadata_from_gamelist_rom( return GamelistMetadata( rating=rating, first_release_date=first_release_date, - companies=pydash.compact([developer, publisher]), - franchises=pydash.compact([family]), - genres=pydash.compact([genre]), + companies=list(dict.fromkeys( + pydash.compact([ + *_split_comma_separated_values(developer), + *_split_comma_separated_values(publisher), + ]) + )), + franchises=_split_comma_separated_values(family), + genres=_split_comma_separated_values(genre), player_count=players, md5_hash=md5, box3d_path=None, @@ -348,12 +367,14 @@ class GamelistHandler(MetadataHandler): desc_elem.text if desc_elem is not None and desc_elem.text else "" ) regions = ( - pydash.compact([region_elem.text]) + _split_comma_separated_values(region_elem.text) if region_elem is not None else [] ) languages = ( - pydash.compact([lang_elem.text]) if lang_elem is not None else [] + _split_comma_separated_values(lang_elem.text) + if lang_elem is not None + else [] ) # Build ROM data