From aed926ac9e596fdbdeeae975be536c6c740e8a75 Mon Sep 17 00:00:00 2001 From: Georges-Antoine Assi Date: Fri, 22 May 2026 21:44:33 -0400 Subject: [PATCH] Add playmatch as explicit metadata source --- backend/endpoints/heartbeat.py | 2 ++ backend/handler/metadata/playmatch_handler.py | 7 ------- backend/handler/scan_handler.py | 10 +++------- frontend/src/stores/heartbeat.ts | 12 +++++++++--- 4 files changed, 14 insertions(+), 17 deletions(-) diff --git a/backend/endpoints/heartbeat.py b/backend/endpoints/heartbeat.py index 236037eb5..9cc8a60aa 100644 --- a/backend/endpoints/heartbeat.py +++ b/backend/endpoints/heartbeat.py @@ -159,6 +159,8 @@ async def metadata_heartbeat(source: str) -> bool: return await meta_launchbox_handler.heartbeat() case MetadataSource.HASHEOUS: return await meta_hasheous_handler.heartbeat() + case MetadataSource.PLAYMATCH: + return await meta_playmatch_handler.heartbeat() case MetadataSource.TGDB: return await meta_tgdb_handler.heartbeat() case MetadataSource.SGDB: diff --git a/backend/handler/metadata/playmatch_handler.py b/backend/handler/metadata/playmatch_handler.py index 3db23c0b1..ebfda7904 100644 --- a/backend/handler/metadata/playmatch_handler.py +++ b/backend/handler/metadata/playmatch_handler.py @@ -49,13 +49,6 @@ PLAYMATCH_LOOKUP_ROM_ATTRS: frozenset[str] = frozenset( {"igdb_id", "moby_id", "ss_id", "launchbox_id", "sgdb_id"} ) -# MetadataSource values (StrEnum) for which Playmatch can return ids. Typed as -# strings so this module stays free of scan_handler imports. EmuReady and -# OpenVGDB are in Playmatch's enum but have no RomM counterpart yet. -PLAYMATCH_SUPPORTED_SOURCES: frozenset[str] = frozenset( - {"igdb", "moby", "ss", "launchbox", "sgdb"} -) - class GameMatchType(str, Enum): SHA256 = "SHA256" diff --git a/backend/handler/scan_handler.py b/backend/handler/scan_handler.py index 2f39b334c..65c598d01 100644 --- a/backend/handler/scan_handler.py +++ b/backend/handler/scan_handler.py @@ -34,10 +34,7 @@ from handler.metadata.launchbox_handler.platforms import LAUNCHBOX_PLATFORM_LIST from handler.metadata.launchbox_handler.types import LaunchboxRom from handler.metadata.libretro_handler import LIBRETRO_PLATFORM_LIST, LibretroRom from handler.metadata.moby_handler import MOBYGAMES_PLATFORM_LIST, MobyGamesRom -from handler.metadata.playmatch_handler import ( - PLAYMATCH_SUPPORTED_SOURCES, - PlaymatchRomMatch, -) +from handler.metadata.playmatch_handler import PlaymatchRomMatch from handler.metadata.ra_handler import RA_PLATFORM_LIST, RAGameRom from handler.metadata.sgdb_handler import SGDBRom from handler.metadata.ss_handler import SCREENSAVER_PLATFORM_LIST, SSRom @@ -78,6 +75,7 @@ class MetadataSource(enum.StrEnum): HLTB = "hltb" # HowLongToBeat GAMELIST = "gamelist" # ES-DE gamelist.xml LIBRETRO = "libretro" # Libretro thumbnails + PLAYMATCH = "playmatch" # Playmatch def get_main_platform_igdb_id(platform: Platform): @@ -375,9 +373,7 @@ async def scan_rom( async def fetch_playmatch_hash_match() -> PlaymatchRomMatch: if ( meta_playmatch_handler.is_enabled() - and any( - source in metadata_sources for source in PLAYMATCH_SUPPORTED_SOURCES - ) + and MetadataSource.PLAYMATCH in metadata_sources and ( newly_added or scan_type == ScanType.COMPLETE diff --git a/frontend/src/stores/heartbeat.ts b/frontend/src/stores/heartbeat.ts index 464c0c34c..e970e8fc5 100644 --- a/frontend/src/stores/heartbeat.ts +++ b/frontend/src/stores/heartbeat.ts @@ -91,9 +91,7 @@ export default defineStore("heartbeat", { getAllMetadataOptions(): MetadataOption[] { return [ { - name: this.value.METADATA_SOURCES?.PLAYMATCH_API_ENABLED - ? "IGDB + Playmatch" - : "IGDB", + name: "IGDB", value: "igdb", logo_path: "/assets/scrappers/igdb.png", disabled: !this.value.METADATA_SOURCES?.IGDB_API_ENABLED @@ -108,6 +106,14 @@ export default defineStore("heartbeat", { ? i18n.global.t("scan.disabled-by-admin") : "", }, + { + name: "Playmatch", + value: "playmatch", + logo_path: "/assets/scrappers/playmatch.png", + disabled: !this.value.METADATA_SOURCES?.PLAYMATCH_API_ENABLED + ? i18n.global.t("scan.disabled-by-admin") + : "", + }, { name: "Screenscraper", value: "ss",