mirror of
https://github.com/rommapp/romm.git
synced 2026-02-18 00:27:41 +01:00
Merge pull request #2267 from rommapp/search-normalize-name
Normalize result names for better merging in search
This commit is contained in:
@@ -6,13 +6,15 @@ class SearchRomSchema(BaseModel):
|
||||
igdb_id: int | None = None
|
||||
moby_id: int | None = None
|
||||
ss_id: int | None = None
|
||||
slug: str
|
||||
sgdb_id: int | None = None
|
||||
platform_id: int
|
||||
name: str
|
||||
summary: str
|
||||
slug: str = ""
|
||||
summary: str = ""
|
||||
igdb_url_cover: str = ""
|
||||
moby_url_cover: str = ""
|
||||
ss_url_cover: str = ""
|
||||
platform_id: int
|
||||
sgdb_url_cover: str = ""
|
||||
|
||||
|
||||
class SearchCoverSchema(BaseModel):
|
||||
|
||||
@@ -14,7 +14,7 @@ from handler.metadata import (
|
||||
)
|
||||
from handler.metadata.igdb_handler import IGDB_API_ENABLED, IGDBRom
|
||||
from handler.metadata.moby_handler import MOBY_API_ENABLED, MobyGamesRom
|
||||
from handler.metadata.sgdb_handler import STEAMGRIDDB_API_ENABLED
|
||||
from handler.metadata.sgdb_handler import STEAMGRIDDB_API_ENABLED, SGDBRom
|
||||
from handler.metadata.ss_handler import SS_API_ENABLED, SSRom
|
||||
from handler.scan_handler import get_main_platform_igdb_id
|
||||
from logger.formatter import BLUE, CYAN
|
||||
@@ -97,7 +97,11 @@ async def search_rom(
|
||||
moby_matched_roms = [moby_rom] if moby_rom else []
|
||||
ss_matched_roms = [ss_rom] if ss_rom else []
|
||||
elif search_by.lower() == "name":
|
||||
igdb_matched_roms, moby_matched_roms, ss_matched_roms = await asyncio.gather(
|
||||
(
|
||||
igdb_matched_roms,
|
||||
moby_matched_roms,
|
||||
ss_matched_roms,
|
||||
) = await asyncio.gather(
|
||||
meta_igdb_handler.get_matched_roms_by_name(
|
||||
search_term, get_main_platform_igdb_id(rom.platform)
|
||||
),
|
||||
@@ -110,47 +114,60 @@ async def search_rom(
|
||||
merged_dict: dict[str, dict] = {}
|
||||
|
||||
for igdb_rom in igdb_matched_roms:
|
||||
igdb_name = igdb_rom.get("name", "")
|
||||
if igdb_name:
|
||||
if igdb_rom["igdb_id"]:
|
||||
igdb_name = meta_igdb_handler.normalize_search_term(
|
||||
igdb_rom.get("name", ""),
|
||||
remove_articles=False,
|
||||
)
|
||||
merged_dict[igdb_name] = {
|
||||
**igdb_rom,
|
||||
"platform_id": rom.platform_id,
|
||||
"igdb_url_cover": igdb_rom.pop("url_cover", ""),
|
||||
**merged_dict.get(igdb_name, {}),
|
||||
}
|
||||
|
||||
for moby_rom in moby_matched_roms:
|
||||
moby_name = moby_rom.get("name", "")
|
||||
if moby_name:
|
||||
merged_dict[moby_name] = { # type: ignore
|
||||
if moby_rom["moby_id"]:
|
||||
moby_name = meta_moby_handler.normalize_search_term(
|
||||
moby_rom.get("name", ""),
|
||||
remove_articles=False,
|
||||
)
|
||||
merged_dict[moby_name] = {
|
||||
**moby_rom,
|
||||
"platform_id": rom.platform_id,
|
||||
"moby_url_cover": moby_rom.pop("url_cover", ""),
|
||||
**merged_dict.get(moby_name, {}),
|
||||
}
|
||||
|
||||
for ss_rom in ss_matched_roms:
|
||||
ss_name = ss_rom.get("name", "")
|
||||
if ss_name:
|
||||
if ss_rom["ss_id"]:
|
||||
ss_name = meta_ss_handler.normalize_search_term(
|
||||
ss_rom.get("name", ""),
|
||||
remove_articles=False,
|
||||
)
|
||||
merged_dict[ss_name] = {
|
||||
**ss_rom,
|
||||
"platform_id": rom.platform_id,
|
||||
"ss_url_cover": ss_rom.pop("url_cover", ""),
|
||||
**merged_dict.get(ss_name, {}),
|
||||
}
|
||||
|
||||
matched_roms = [
|
||||
{
|
||||
**{
|
||||
"slug": "",
|
||||
"name": "",
|
||||
"summary": "",
|
||||
"igdb_url_cover": "",
|
||||
"moby_url_cover": "",
|
||||
"ss_url_cover": "",
|
||||
"platform_id": rom.platform_id,
|
||||
},
|
||||
**item,
|
||||
}
|
||||
for item in list(merged_dict.values())
|
||||
]
|
||||
async def get_sgdb_rom(name: str) -> tuple[str, SGDBRom]:
|
||||
return name, await meta_sgdb_handler.get_details_by_names([name])
|
||||
|
||||
sgdb_roms = await asyncio.gather(
|
||||
*[get_sgdb_rom(name) for name in list(merged_dict.keys())]
|
||||
)
|
||||
|
||||
for name, sgdb_rom in sgdb_roms:
|
||||
if sgdb_rom["sgdb_id"]:
|
||||
merged_dict[name] = {
|
||||
**merged_dict[name],
|
||||
"sgdb_id": sgdb_rom.get("sgdb_id", ""),
|
||||
"sgdb_url_cover": sgdb_rom.get("url_cover", ""),
|
||||
}
|
||||
|
||||
matched_roms = list(merged_dict.values())
|
||||
|
||||
log.info("Results:")
|
||||
for m_rom in matched_roms:
|
||||
|
||||
@@ -7,12 +7,14 @@ export type SearchRomSchema = {
|
||||
igdb_id?: (number | null);
|
||||
moby_id?: (number | null);
|
||||
ss_id?: (number | null);
|
||||
sgdb_id?: (number | null);
|
||||
slug: string;
|
||||
name: string;
|
||||
summary: string;
|
||||
igdb_url_cover?: string;
|
||||
moby_url_cover?: string;
|
||||
ss_url_cover?: string;
|
||||
sgdb_url_cover?: string;
|
||||
platform_id: number;
|
||||
};
|
||||
|
||||
|
||||
@@ -215,6 +215,7 @@ onBeforeUnmount(() => {
|
||||
: rom.igdb_url_cover ||
|
||||
rom.moby_url_cover ||
|
||||
rom.ss_url_cover ||
|
||||
rom.sgdb_url_cover ||
|
||||
fallbackCoverImage)
|
||||
"
|
||||
:aspect-ratio="computedAspectRatio"
|
||||
@@ -228,7 +229,8 @@ onBeforeUnmount(() => {
|
||||
(!romsStore.isSimpleRom(rom) &&
|
||||
!rom.igdb_url_cover &&
|
||||
!rom.moby_url_cover &&
|
||||
!rom.ss_url_cover)
|
||||
!rom.ss_url_cover &&
|
||||
!rom.sgdb_url_cover)
|
||||
"
|
||||
class="translucent-dark text-white"
|
||||
:class="
|
||||
|
||||
@@ -18,7 +18,7 @@ import { getMissingCoverImage } from "@/utils/covers";
|
||||
|
||||
type MatchedSource = {
|
||||
url_cover: string | undefined;
|
||||
name: "IGDB" | "Mobygames" | "Screenscraper";
|
||||
name: "IGDB" | "Mobygames" | "Screenscraper" | "SteamGridDB";
|
||||
logo_path: string;
|
||||
};
|
||||
|
||||
@@ -146,27 +146,34 @@ function showSources(matchedRom: SearchRomSchema) {
|
||||
showSelectSource.value = true;
|
||||
selectedMatchRom.value = matchedRom;
|
||||
sources.value = [];
|
||||
if (matchedRom.igdb_url_cover || matchedRom.igdb_id) {
|
||||
if (matchedRom.igdb_url_cover) {
|
||||
sources.value.push({
|
||||
url_cover: matchedRom.igdb_url_cover,
|
||||
name: "IGDB",
|
||||
logo_path: "/assets/scrappers/igdb.png",
|
||||
});
|
||||
}
|
||||
if (matchedRom.moby_url_cover || matchedRom.moby_id) {
|
||||
if (matchedRom.moby_url_cover) {
|
||||
sources.value.push({
|
||||
url_cover: matchedRom.moby_url_cover,
|
||||
name: "Mobygames",
|
||||
logo_path: "/assets/scrappers/moby.png",
|
||||
});
|
||||
}
|
||||
if (matchedRom.ss_url_cover || matchedRom.ss_id) {
|
||||
if (matchedRom.ss_url_cover) {
|
||||
sources.value.push({
|
||||
url_cover: matchedRom.ss_url_cover,
|
||||
name: "Screenscraper",
|
||||
logo_path: "/assets/scrappers/ss.png",
|
||||
});
|
||||
}
|
||||
if (matchedRom.sgdb_url_cover) {
|
||||
sources.value.push({
|
||||
url_cover: matchedRom.sgdb_url_cover,
|
||||
name: "SteamGridDB",
|
||||
logo_path: "/assets/scrappers/sgdb.png",
|
||||
});
|
||||
}
|
||||
if (sources.value.length == 1) {
|
||||
selectedCover.value = sources.value[0];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user