From 71ac92bfb69ff4d4b5cf61e8d659c0ec04af03c8 Mon Sep 17 00:00:00 2001 From: Michael Manganiello Date: Sat, 16 Nov 2024 20:54:56 -0300 Subject: [PATCH] fix: Consider IGDB alternatives when checking for exact match IGDB provides alternative names for games, which we are currently not considering when checking for an exact match. This change starts considering alternative names, in addition to the game's name and slug, when checking for an exact match. --- backend/handler/metadata/igdb_handler.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/backend/handler/metadata/igdb_handler.py b/backend/handler/metadata/igdb_handler.py index 5ded7e7ea..96bcfd364 100644 --- a/backend/handler/metadata/igdb_handler.py +++ b/backend/handler/metadata/igdb_handler.py @@ -278,13 +278,23 @@ class IGDBBaseHandler(MetadataHandler): ) def is_exact_match(rom: dict, search_term: str) -> bool: - return ( - rom["name"].lower() == search_term.lower() - or rom["slug"].lower() == search_term.lower() - or ( - self._normalize_exact_match(rom["name"]) - == self._normalize_exact_match(search_term) + search_term_lower = search_term.lower() + if rom["slug"].lower() == search_term_lower: + return True + + search_term_normalized = self._normalize_exact_match(search_term) + # Check both the ROM name and alternative names for an exact match. + rom_names = [rom["name"]] + [ + alternative_name["name"] + for alternative_name in rom.get("alternative_names", []) + ] + + return any( + ( + rom_name.lower() == search_term_lower + or self._normalize_exact_match(rom_name) == search_term_normalized ) + for rom_name in rom_names ) roms = await self._request(