fix: emudeck scraper outputs cores field, base_scraper uses generate_platform_yaml

This commit is contained in:
Abdessamad Derraz
2026-03-27 12:27:51 +01:00
parent 106130ca52
commit 8f1c7e47de
3 changed files with 222 additions and 142 deletions

View File

@@ -189,20 +189,25 @@ def scraper_cli(scraper_class: type, description: str = "Scrape BIOS requirement
return
if args.output:
# Generate platform YAML
import yaml
config = {"systems": {}}
for req in reqs:
sys_id = req.system
config["systems"].setdefault(sys_id, {"files": []})
entry = {"name": req.name, "destination": req.destination or req.name, "required": req.required}
if req.sha1:
entry["sha1"] = req.sha1
if req.md5:
entry["md5"] = req.md5
if req.zipped_file:
entry["zipped_file"] = req.zipped_file
config["systems"][sys_id]["files"].append(entry)
# Use scraper's generate_platform_yaml() if available (includes
# platform metadata, cores list, standalone_cores, etc.)
if hasattr(scraper, "generate_platform_yaml"):
config = scraper.generate_platform_yaml()
else:
# Generic fallback: just systems from requirements
config = {"systems": {}}
for req in reqs:
sys_id = req.system
config["systems"].setdefault(sys_id, {"files": []})
entry = {"name": req.name, "destination": req.destination or req.name, "required": req.required}
if req.sha1:
entry["sha1"] = req.sha1
if req.md5:
entry["md5"] = req.md5
if req.zipped_file:
entry["zipped_file"] = req.zipped_file
config["systems"][sys_id]["files"].append(entry)
with open(args.output, "w") as f:
yaml.dump(config, f, default_flow_style=False, sort_keys=False)
print(f"Written {len(reqs)} entries to {args.output}")

View File

@@ -393,6 +393,8 @@ class Scraper(BaseScraper):
except (ConnectionError, ValueError, OSError):
pass
cores = self._fetch_installed_emulators()
return {
"platform": "EmuDeck",
"version": version or "",
@@ -401,9 +403,54 @@ class Scraper(BaseScraper):
"base_destination": "bios",
"hash_type": "md5",
"verification_mode": "md5",
"cores": cores,
"systems": systems,
}
def _fetch_installed_emulators(self) -> list[str]:
"""Fetch the list of emulators installed by EmuDeck from EmuScripts.
Returns core names normalized to match emulator profile keys.
"""
import json
api_url = (
"https://api.github.com/repos/dragoonDorise/EmuDeck/"
"contents/functions/EmuScripts"
)
name_overrides = {
"pcsx2qt": "pcsx2", "rpcs3legacy": "rpcs3",
"cemuproton": "cemu", "rmg": "mupen64plus_next",
}
skip = {"retroarch_maincfg", "retroarch"}
try:
req = urllib.request.Request(
api_url, headers={"User-Agent": "retrobios-scraper/1.0"},
)
data = json.loads(urllib.request.urlopen(req, timeout=30).read())
except (urllib.error.URLError, OSError):
return []
cores: list[str] = []
seen: set[str] = set()
for entry in data:
name = entry.get("name", "")
if not name.endswith(".sh"):
continue
name = re.sub(r"\.sh$", "", name)
name = re.sub(r"^emuDeck", "", name, flags=re.IGNORECASE)
if not name:
continue
key = name.lower()
if key in skip:
continue
core = name_overrides.get(key, key)
if core not in seen:
seen.add(core)
cores.append(core)
return sorted(cores)
def main():
from scripts.scraper.base_scraper import scraper_cli