Skip to content

Commit fb0dc84

Browse files
authored
Merge pull request #2800 from victor-rds/feat-search-metadata-priority
feat: Manual Match metada priority
2 parents 8a0b70c + 7cec83e commit fb0dc84

1 file changed

Lines changed: 55 additions & 76 deletions

File tree

backend/endpoints/search.py

Lines changed: 55 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,11 @@
2121
from handler.metadata.moby_handler import MobyGamesRom
2222
from handler.metadata.sgdb_handler import SGDBRom
2323
from handler.metadata.ss_handler import SSRom
24-
from handler.scan_handler import get_main_platform_igdb_id
24+
from handler.scan_handler import (
25+
MetadataSource,
26+
get_main_platform_igdb_id,
27+
get_priority_ordered_metadata_sources,
28+
)
2529
from logger.formatter import BLUE, CYAN
2630
from logger.formatter import highlight as hl
2731
from logger.logger import log
@@ -79,7 +83,6 @@ async def search_rom(
7983
log.info(
8084
f"{emoji.EMOJI_MAGNIFYING_GLASS_TILTED_RIGHT} Searching metadata providers..."
8185
)
82-
matched_roms: list = []
8386

8487
log.info(f"Searching by {hl(search_by.lower(), color=CYAN)}:")
8588
log.info(
@@ -138,80 +141,56 @@ async def search_rom(
138141

139142
merged_dict: dict[str, dict] = {}
140143

141-
for igdb_rom in igdb_matched_roms:
142-
if igdb_rom["igdb_id"]:
143-
igdb_name = meta_igdb_handler.normalize_search_term(
144-
igdb_rom.get("name", ""),
145-
remove_articles=False,
146-
)
147-
merged_dict[igdb_name] = {
148-
**igdb_rom,
149-
"is_identified": True,
150-
"is_unidentified": False,
151-
"platform_id": rom.platform_id,
152-
"igdb_url_cover": igdb_rom.pop("url_cover", ""),
153-
**merged_dict.get(igdb_name, {}),
154-
}
155-
156-
for moby_rom in moby_matched_roms:
157-
if moby_rom["moby_id"]:
158-
moby_name = meta_moby_handler.normalize_search_term(
159-
moby_rom.get("name", ""),
160-
remove_articles=False,
161-
)
162-
merged_dict[moby_name] = {
163-
**moby_rom,
164-
"is_identified": True,
165-
"is_unidentified": False,
166-
"platform_id": rom.platform_id,
167-
"moby_url_cover": moby_rom.pop("url_cover", ""),
168-
**merged_dict.get(moby_name, {}),
169-
}
170-
171-
for ss_rom in ss_matched_roms:
172-
if ss_rom["ss_id"]:
173-
ss_name = meta_ss_handler.normalize_search_term(
174-
ss_rom.get("name", ""),
175-
remove_articles=False,
176-
)
177-
merged_dict[ss_name] = {
178-
**ss_rom,
179-
"is_identified": True,
180-
"is_unidentified": False,
181-
"platform_id": rom.platform_id,
182-
"ss_url_cover": ss_rom.pop("url_cover", ""),
183-
**merged_dict.get(ss_name, {}),
184-
}
185-
186-
for flashpoint_rom in flashpoint_matched_roms:
187-
if flashpoint_rom["flashpoint_id"]:
188-
flashpoint_name = meta_flashpoint_handler.normalize_search_term(
189-
flashpoint_rom.get("name", ""),
190-
remove_articles=False,
191-
)
192-
merged_dict[flashpoint_name] = {
193-
**flashpoint_rom,
194-
"is_identified": True,
195-
"is_unidentified": False,
196-
"platform_id": rom.platform_id,
197-
"flashpoint_url_cover": flashpoint_rom.pop("url_cover", ""),
198-
**merged_dict.get(flashpoint_name, {}),
199-
}
144+
source_configs = {
145+
MetadataSource.IGDB: (
146+
igdb_matched_roms,
147+
meta_igdb_handler,
148+
"igdb_id",
149+
"igdb_url_cover",
150+
),
151+
MetadataSource.MOBY: (
152+
moby_matched_roms,
153+
meta_moby_handler,
154+
"moby_id",
155+
"moby_url_cover",
156+
),
157+
MetadataSource.FLASHPOINT: (
158+
flashpoint_matched_roms,
159+
meta_flashpoint_handler,
160+
"flashpoint_id",
161+
"flashpoint_url_cover",
162+
),
163+
MetadataSource.LAUNCHBOX: (
164+
launchbox_matched_roms,
165+
meta_launchbox_handler,
166+
"launchbox_id",
167+
"launchbox_url_cover",
168+
),
169+
MetadataSource.SS: (ss_matched_roms, meta_ss_handler, "ss_id", "ss_url_cover"),
170+
}
171+
172+
ordered_sources = get_priority_ordered_metadata_sources(
173+
metadata_sources=list(source_configs.keys()), priority_type="metadata"
174+
)
200175

201-
for launchbox_rom in launchbox_matched_roms:
202-
if launchbox_rom["launchbox_id"]:
203-
launchbox_name = meta_launchbox_handler.normalize_search_term(
204-
launchbox_rom.get("name", ""),
205-
remove_articles=False,
206-
)
207-
merged_dict[launchbox_name] = {
208-
**launchbox_rom,
209-
"is_identified": True,
210-
"is_unidentified": False,
211-
"platform_id": rom.platform_id,
212-
"launchbox_url_cover": launchbox_rom.pop("url_cover", ""),
213-
**merged_dict.get(launchbox_name, {}),
214-
}
176+
for meta_source in ordered_sources:
177+
source_matched_roms, meta_handler, id_key, cover_key = source_configs[
178+
meta_source
179+
]
180+
for source_rom in source_matched_roms: # trunk-ignore(mypy/attr-defined)
181+
if source_rom[id_key]:
182+
normalized_name = meta_handler.normalize_search_term(
183+
source_rom.get("name", ""),
184+
remove_articles=False,
185+
)
186+
merged_dict[normalized_name] = {
187+
**source_rom,
188+
"is_identified": True,
189+
"is_unidentified": False,
190+
"platform_id": rom.platform_id,
191+
cover_key: source_rom.get("url_cover", ""),
192+
**merged_dict.get(normalized_name, {}),
193+
}
215194

216195
async def get_sgdb_rom(name: str) -> tuple[str, SGDBRom]:
217196
return name, await meta_sgdb_handler.get_details_by_names([name])
@@ -228,7 +207,7 @@ async def get_sgdb_rom(name: str) -> tuple[str, SGDBRom]:
228207
"sgdb_url_cover": sgdb_rom.get("url_cover", ""),
229208
}
230209

231-
matched_roms = list(merged_dict.values())
210+
matched_roms: list = list(merged_dict.values())
232211

233212
log.info("Results:")
234213
for m_rom in matched_roms:

0 commit comments

Comments
 (0)