diff --git a/platforms/batocera.yml b/platforms/batocera.yml index b4e75b31..243b7094 100644 --- a/platforms/batocera.yml +++ b/platforms/batocera.yml @@ -183,6 +183,7 @@ systems: required: true md5: 0bac0c6a50104045d902df4503a4c30b native_id: atari800 + name: Atari 800 atari-5200: files: - name: 5200.rom @@ -190,6 +191,7 @@ systems: required: true md5: 281f20ea4320404ec820fb7ec0693b38 native_id: atari5200 + name: Atari 5200 atari-st: files: - name: tos.img @@ -337,6 +339,7 @@ systems: required: true md5: e5ea0f216fb446f1c4a4f476bc5f03d4 native_id: atarist + name: Atari ST atari-lynx: files: - name: lynxboot.img @@ -344,6 +347,7 @@ systems: required: true md5: fcd403db69f54290b51035d82f835e7b native_id: lynx + name: Lynx magnavox-odyssey2: files: - name: o2rom.bin @@ -355,6 +359,7 @@ systems: required: true md5: f1071cdb0b6b10dde94d3bc8a6146387 native_id: odyssey2 + name: Odyssey 2 videopacplus: files: - name: g7400.bin @@ -366,6 +371,7 @@ systems: required: true md5: 279008e4a0db2dc5f1c048853b033828 native_id: videopacplus + name: Videopac+ G7400 mattel-intellivision: files: - name: exec.bin @@ -377,6 +383,7 @@ systems: required: true md5: 0cd5946c6473e42e8e4c2137785e427f native_id: intellivision + name: Mattel Intellivision nec-pc-engine: files: - name: syscard3.pce @@ -388,6 +395,7 @@ systems: required: true md5: 38179df8f4ac870017db21ebcbf53114 native_id: pcengine + name: Supergrafx nec-pc-fx: files: - name: pcfx.rom @@ -395,6 +403,7 @@ systems: required: true md5: 08e36edbea28a017f79f8d4f7ff9b6d7 native_id: pcfx + name: PC-FX snk-neogeo: files: - name: neogeo.zip @@ -402,6 +411,7 @@ systems: required: true md5: dffb72f116d36d025068b23970a4f6df native_id: neogeo + name: NeoGeo snk-neogeo-cd: files: - name: neocd_f.rom @@ -445,6 +455,7 @@ systems: required: true md5: 08ca8b2dba6662e8024f9e789711c6fc native_id: neogeocd + name: NeoGeo CD sharp-x68000: files: - name: iplrom.dat @@ -456,6 +467,7 @@ systems: required: true md5: cb0a5cfcf7247a7eab74bb2716260269 native_id: x68000 + name: Sharp x68000 3do: files: - name: panafz1.bin @@ -471,6 +483,7 @@ systems: required: true md5: 8639fd5e549bd6238cfee79e3e749114 native_id: 3do + name: 3DO sega-dreamcast: files: - name: dc_boot.bin @@ -478,6 +491,7 @@ systems: required: true md5: e10c53c2f8b90bab96ead2d368858623 native_id: dreamcast + name: Dreamcast sega-dreamcast-arcade: files: - name: naomi.zip @@ -597,6 +611,7 @@ systems: md5: 960ece0dc22a7c5ff81c812a2993e7cc zipped_file: x76f100_eeprom.bin native_id: naomi + name: Naomi 2 sega-mega-cd: files: - name: bios_CD_E.bin @@ -612,6 +627,7 @@ systems: required: true md5: 278a9397d192149e84e820ac621a8edd native_id: segacd + name: Sega CD megadrive-msu: files: - name: bios_CD_E.bin @@ -627,6 +643,7 @@ systems: required: true md5: 278a9397d192149e84e820ac621a8edd native_id: megadrive-msu + name: MSU-MD sega-saturn: files: - name: sega_101.bin @@ -650,6 +667,7 @@ systems: required: true md5: af5828fdff51384f99b3c4926be27762 native_id: saturn + name: Sega Saturn sony-playstation: files: - name: psxonpsp660.bin @@ -681,6 +699,7 @@ systems: required: true md5: 1e68c231d0896b7eadcad1d7d8e76129 native_id: psx + name: PSX sony-playstation-2: files: - name: ps2-0230a-20080220.bin @@ -688,6 +707,7 @@ systems: required: true md5: 21038400dc633070a78ad53090c53017 native_id: ps2 + name: PS2 sony-playstation-3: files: - name: PS3UPDAT.PUP @@ -695,6 +715,7 @@ systems: required: true md5: 05fe32f5dc8c78acbcd84d36ee7fdc5b native_id: ps3 + name: PS3 nintendo-fds: files: - name: disksys.rom @@ -702,6 +723,7 @@ systems: required: true md5: ca30b50f880eb660a320674ed365ef7a native_id: fds + name: Nintendo Family Computer Disk System nintendo-ds: files: - name: firmware.bin @@ -730,6 +752,7 @@ systems: destination: dsi_nand.bin required: true native_id: nds + name: Nintendo DS nintendo-gba: files: - name: gba_bios.bin @@ -749,6 +772,7 @@ systems: required: true md5: d574d4f9c12f305074798f54c091a8b4 native_id: gba + name: Nintendo Gameboy Advance nintendo-satellaview: files: - name: BS-X.bin @@ -756,6 +780,7 @@ systems: required: true md5: 96cf17bf589fcbfa6f8de2dc84f19fa2 native_id: satellaview + name: Satellaview sufami: files: - name: STBIOS.bin @@ -763,6 +788,7 @@ systems: required: true md5: d3a44ba7d42a74d3ac58cb9c14c6a5ca native_id: sufami + name: Sufami nintendo-sgb: files: - name: sgb_boot.bin @@ -782,6 +808,7 @@ systems: required: true md5: 8ecd73eb4edf7ed7e81aef1be80031d5 native_id: sgb + name: Super Game Boy microsoft-msx: files: - name: MSX.ROM @@ -861,6 +888,7 @@ systems: required: true md5: 42af93619160ef2116416f74a6cb12f2 native_id: msx + name: MSX-Turbo xbox: files: - name: mcpx_1.0.bin @@ -872,6 +900,7 @@ systems: required: true md5: 39cee882148a87f93cb440b99dde3ceb native_id: xbox + name: Xbox amiga500: files: - name: kick33180.A500 @@ -915,6 +944,7 @@ systems: required: true md5: e40a5dfb3d017ba8779faba30cbd1c8e native_id: amiga500 + name: Amiga 500 commodore-amiga: files: - name: kick34005.A500 @@ -982,6 +1012,7 @@ systems: required: true md5: bb72565701b1b6faece07d68ea5da639 native_id: amigacdtv + name: Amiga CD32 pc60: files: - name: pc6001.zip @@ -1050,6 +1081,7 @@ systems: md5: 9d61f3cbd47c4a281c5241c4f1d80919 zipped_file: cgrom68.64 native_id: pc60 + name: NEC PC-6000 nec-pc-88: files: - name: N88.ROM @@ -1085,6 +1117,7 @@ systems: required: true md5: fc4b76a402ba501e6ba6de4b3e8b4273 native_id: pc88 + name: NEC PC-8800 nec-pc-98: files: - name: BIOS.ROM @@ -1108,6 +1141,7 @@ systems: required: true md5: 7da1e5b7c482d4108d22a5b09631d967 native_id: pc98 + name: NEC PC-9800 loopy: files: - name: casloopy.zip @@ -1125,6 +1159,7 @@ systems: md5: c0f1c899c9ca098663d046d60779711d zipped_file: hn62434fa.lsi352 native_id: loopy + name: Casio Loopy fairchild-channel-f: files: - name: sl31253.bin @@ -1140,6 +1175,7 @@ systems: required: true md5: 95d339631d867c8f1d15a5f2ec26069d native_id: channelf + name: Fairchild ChannelF sharp-x1: files: - name: IPLROM.X1 @@ -1151,6 +1187,7 @@ systems: required: true md5: 56c28adcf1f3a2f87cf3d57c378013f5 native_id: x1 + name: Sharp X1 fmtowns: files: - name: FMT_DIC.ROM @@ -1238,6 +1275,7 @@ systems: md5: 1a15f6c1b58ec7e5f850118610a787a7 zipped_file: mytownsux.rom native_id: fmtowns + name: Fujistu FM-Towns gp32: files: - name: gp32.zip @@ -1274,6 +1312,7 @@ systems: md5: d4af2bc352bdaf4972ea40902feda114 zipped_file: gp32mfv2.bin native_id: gp32 + name: GamePark GP32 laser310: files: - name: laser310.zip @@ -1290,6 +1329,7 @@ systems: md5: f7e5d9a3eb2b57bf5f4e2a4565318a8f zipped_file: vtechv21.u12 native_id: laser310 + name: VTech Laser 310 scv: files: - name: upd7801g.s01 @@ -1297,6 +1337,7 @@ systems: required: true md5: 635a978fd40db9a18ee44eff449fc126 native_id: scv + name: Super Cassette Vision apple-iigs: files: - name: ROM1 @@ -1332,6 +1373,7 @@ systems: md5: 68ff96a624237d233e8d4c701f660dd1 zipped_file: apple2gs.chr native_id: gsplus + name: Apple IIgs zc210: files: - name: zcdata.dat @@ -1387,6 +1429,7 @@ systems: required: true md5: e0ba7a8634b12cfee4b6760a6f89051a native_id: zc210 + name: Zelda Classic apple-macintosh-ii: files: - name: MacII.ROM @@ -1594,6 +1637,7 @@ systems: destination: mac755.chd required: true native_id: macintosh + name: Apple Macintosh sc3000: files: - name: sc3000.zip @@ -1605,18 +1649,21 @@ systems: md5: a6a47eae38600e41cc67e887e36e70b7 zipped_file: sc3000.rom native_id: sc3000 + name: Sega SC-3000 segaai: files: - name: segaai.zip destination: segaai.zip required: true native_id: segaai + name: Sega AI Computer beena: files: - name: beena.zip destination: beena.zip required: true native_id: beena + name: Advanced Pico Beena coco: files: - name: coco.zip @@ -1678,12 +1725,14 @@ systems: md5: 8cab28f4b7311b8df63c07bb3b59bfd5 zipped_file: disk11.rom native_id: coco + name: Tandy Color Computer cgenie: files: - name: cgenie.zip destination: cgenie.zip required: true native_id: cgenie + name: Colour Genie dragon64: files: - name: dragon64.zip @@ -1711,6 +1760,7 @@ systems: required: true zipped_file: d32.rom native_id: dragon64 + name: Dragon 64 mc10: files: - name: mc10.zip @@ -1730,6 +1780,7 @@ systems: md5: 78af465c2f31cf4e05dec1efda77da01 zipped_file: alice.rom native_id: mc10 + name: Tandy MC-10 trs80: files: - name: trs80.zip @@ -1761,6 +1812,7 @@ systems: destination: trs80m4p.zip required: true native_id: trs80 + name: TRS-80 tutor: files: - name: tutor.zip @@ -1777,6 +1829,7 @@ systems: md5: 5770834c10946ac2c3617504ba530884 zipped_file: tutor2.bin native_id: tutor + name: Tomy Tutor ti99: files: - name: ti99_4a.zip @@ -1821,6 +1874,7 @@ systems: md5: 206daf498ac5d0141de1d47d38afd899 zipped_file: cd2326a.u2b native_id: ti99 + name: Texas Instruments TI-99 astrocade: files: - name: astrocde.zip @@ -1832,6 +1886,7 @@ systems: md5: 7d25a26e5c4841b364cfe6b1735eaf03 zipped_file: astro.bin native_id: astrocade + name: Bally Astrocade gmaster: files: - name: gmaster.zip @@ -1843,6 +1898,7 @@ systems: md5: 6bff08b5e5f96de405cd56d5f04a08f8 zipped_file: d78c11agf_e19.u1 native_id: gmaster + name: Hartung Game Master adam: files: - name: adam.zip @@ -1951,6 +2007,7 @@ systems: md5: 3cdf2fe48ac4224b56f26c03f6c68982 zipped_file: printer.u2 native_id: adam + name: Coleco Adam coleco-colecovision: files: - name: colecovision.rom @@ -1958,6 +2015,7 @@ systems: required: true md5: 2c66f5911e5b42b8ebe113403548eee7 native_id: colecovision + name: ColecoVision bbc: files: - name: bbcb.zip @@ -2150,6 +2208,7 @@ systems: required: true md5: f083f49d6fe66344c650d7e74249cb96 native_id: bbc + name: BBC Micro pcw: files: - name: pcw8256.zip @@ -2174,6 +2233,7 @@ systems: md5: b664af93987d575b0248832832c61505 zipped_file: 40103.ic109 native_id: pcw + name: Amstrad PCW apfm1000: files: - name: apfm1000.zip @@ -2195,6 +2255,7 @@ systems: md5: 89a7cfa5469ce24773721d65b28f8544 zipped_file: trash-ii.bin native_id: apfm1000 + name: APF M-1000 fm7: files: - name: fm7.zip @@ -2254,6 +2315,7 @@ systems: md5: 7db27dede3e358017d518101850bccfa zipped_file: subsyscg.rom native_id: fm7 + name: Fujitsu FM-7 archimedes: files: - name: aa310.zip @@ -2463,6 +2525,7 @@ systems: md5: 1a8617c1abe3e0729d20ce844e1e12a8 zipped_file: acorn_0280,022-01_philips_8051ah-2.bin native_id: archimedes + name: Acorn Archimedes atom: files: - name: atom.zip @@ -2484,6 +2547,7 @@ systems: md5: 9627dfb5f8302db8dd5702dbf7c09f72 zipped_file: dosrom.u15 native_id: atom + name: Acorn Atom electron: files: - name: electron.zip @@ -2544,6 +2608,7 @@ systems: md5: 5c39baa89fe8a40a5167a53cc5ae7791 zipped_file: pres_adfs_115.rom native_id: electron + name: Acorn Electron apple-ii: files: - name: apple2e.zip @@ -2671,6 +2736,7 @@ systems: md5: 5f1be0c1cdff26f5956eef9643911886 zipped_file: 341-0028-a.rom native_id: apple2 + name: Apple II camplynx: files: - name: lynx48k.zip @@ -2753,6 +2819,7 @@ systems: md5: f9f54913cdedb22bb8f0c549ad121379 zipped_file: lynx128-3.ic3 native_id: camplynx + name: Camputers Lynx mz80k: files: - name: mz80k.zip @@ -2782,6 +2849,7 @@ systems: md5: 4138784bdd2e2cbacd6c55eff195b2ac zipped_file: mz80kfdif.rom native_id: mz80k + name: Sharp MZ-80K mz700: files: - name: mz700.zip @@ -2798,6 +2866,7 @@ systems: md5: e9045d57e8574f3eb3f775c02369fbfe zipped_file: mz700fon.int native_id: mz700 + name: Sharp MZ-700 mz800: files: - name: mz800.zip @@ -2809,6 +2878,7 @@ systems: md5: 7d3909267b3f3e6ce7aa999de0ded226 zipped_file: mz800.rom native_id: mz800 + name: Sharp MZ-800 mz2000: files: - name: mz2000.zip @@ -2825,6 +2895,7 @@ systems: md5: dea49b39998885631db16de1176e71b9 zipped_file: font.bin native_id: mz2000 + name: Sharp MZ-2000 mz2500: files: - name: mz2500.zip @@ -2861,6 +2932,7 @@ systems: md5: 04843d14a8e2f69a7fcaff394a8cc012 zipped_file: phone.rom native_id: mz2500 + name: Sharp MZ-2500 vgmplay: files: - name: qsound.zip @@ -2888,6 +2960,7 @@ systems: md5: 8740932cda05e518a9955f1d08d6786f zipped_file: ym2608_adpcm_rom.bin native_id: vgmplay + name: Video Game Music Player gamepock: files: - name: gamepock.zip @@ -2899,6 +2972,7 @@ systems: md5: a0dd595eafb407a6a4b4ed800005a394 zipped_file: egpcboot.bin native_id: gamepock + name: Epoch Game Pocket Computer gamecom: files: - name: gamecom.zip @@ -2915,6 +2989,7 @@ systems: md5: f7bcefb6daf923c8e5ea2eb69f619efe zipped_file: internal.bin native_id: gamecom + name: Tiger Game.com xegs: files: - name: xegs.zip @@ -2926,6 +3001,7 @@ systems: md5: 42cbd989802c17d0ac3731d33270d835 zipped_file: c101687.rom native_id: xegs + name: Atari XE Game System crvision: files: - name: crvision.zip @@ -2937,6 +3013,7 @@ systems: md5: 3b1ef759d8e3fb4071582efd33dd05f9 zipped_file: crvision.u20 native_id: crvision + name: VTech CreatiVision vsmile: files: - name: vsmile.zip @@ -2958,6 +3035,7 @@ systems: md5: 11e59253c578c8f16ea2375ec398e4e9 zipped_file: vsmile_v103.bin native_id: vsmile + name: VTech V.Smile socrates: files: - name: socrates.zip @@ -2989,6 +3067,7 @@ systems: md5: 31c29c57e3d3e6788ba5817eaaa8b17a zipped_file: speech_eng_vsm3.bin native_id: socrates + name: VTech Socrates rx78: files: - name: rx78.zip @@ -3000,6 +3079,7 @@ systems: md5: f613b15c4b965013e4827d2ad79c7080 zipped_file: ipl.rom native_id: rx78 + name: Bandai RX-78 advision: files: - name: advision.zip @@ -3016,6 +3096,7 @@ systems: md5: fc5e71445e4947a9d00eedbc66b13a8f zipped_file: b8223__cop411l-kcn_n.u8 native_id: advision + name: Entex Adventure Vision gamate: files: - name: gamate.zip @@ -3032,12 +3113,14 @@ systems: md5: ef67993a94503c4b7798b5901c7dda52 zipped_file: gamate_bios_umc.bin native_id: gamate + name: Bitcorp Gamate pv2000: files: - name: pv2000.zip destination: pv2000.zip required: true native_id: pv2000 + name: Casio PV-2000 pc80: files: - name: pc8001.zip @@ -3092,6 +3175,7 @@ systems: md5: d81c6d5d7ad1a4bbbd6ae22a01257603 zipped_file: kanji1.rom native_id: pc80 + name: NEC PC-8001 cdi: files: - name: cdimono1.zip @@ -3123,6 +3207,7 @@ systems: md5: 3d20cf7550f1b723158b42a1fd5bac62 zipped_file: zx405042p__cdi_slave_2.0__b43t__zzmk9213.mc68hc705c8a_withtestrom.7206 native_id: cdi + name: Phillips CD-i hikaru: files: - name: hikaru.zip @@ -3138,6 +3223,7 @@ systems: required: true md5: ee643e8c7369fe7feca610d4daa4a57c native_id: hikaru + name: Hikaru sony-playstation-vita: files: - name: PSP2UPDAT.PUP @@ -3149,6 +3235,7 @@ systems: required: true md5: f2c7b12fe85496ec88a0391b514d6e3b native_id: psvita + name: PS Vita vectrex: files: - name: vectrex.zip @@ -3165,6 +3252,7 @@ systems: md5: a9c238473229912eb757ff3dfe6f4631 zipped_file: exec_rom_intl_284001-1.bin native_id: vectrex + name: GCE Vectrex scummvm: files: - name: MT32_PCM.ROM @@ -3176,6 +3264,7 @@ systems: required: true md5: 5626206284b22c2734f3e9efefcd2675 native_id: scummvm + name: ScummVM supracan: files: - name: supracan.zip @@ -3187,6 +3276,7 @@ systems: md5: 53c4343e062bb3b337370bbb58e64d16 zipped_file: internal_68k.bin native_id: supracan + name: Supr'A'can tandy-vis: files: - name: vis.zip @@ -3203,6 +3293,7 @@ systems: md5: 758f8fec271fbf526bb22b36e88f154b zipped_file: p513bk1b.bin native_id: vis + name: Tandy Video Information System nintendo-64dd: files: - name: 64DD_IPL.bin @@ -3210,6 +3301,7 @@ systems: required: true md5: 8d3d9f294b6e174bc7b1d2fd1c727530 native_id: n64dd + name: Nintendo 64DD nintendo-gamecube: files: - name: IPL.bin @@ -3225,6 +3317,7 @@ systems: required: true md5: b17148254a5799684c7d783206504926 native_id: gamecube + name: Nintendo GameCube chihiro: files: - name: mcpx_1.0.bin @@ -3236,6 +3329,7 @@ systems: required: true md5: f23d7e00ae8fbf88908ed1f9165f35eb native_id: chihiro + name: Sega Chihiro oricatmos: files: - name: basic11.rom @@ -3247,6 +3341,7 @@ systems: required: true md5: c888b36bf0fc222c3585c3fabe556d21 native_id: oricatmos + name: Oric Atmos enterprise-64-128: files: - name: basic21.bin @@ -3361,6 +3456,7 @@ systems: md5: 47258d03aec37bc24df5dbc5d50fc9f8 zipped_file: exdos13.rom native_id: enterprise + name: Enterprise videoton-tvc: files: - name: tvc22_sys.rom @@ -3413,6 +3509,7 @@ systems: md5: 5ce95a26ceed5bec73995d83568da9cf zipped_file: tvc22_d7.64k native_id: tvc + name: Videoton TVC triforce: files: - name: segaboot.gcm @@ -3420,6 +3517,7 @@ systems: required: true md5: 2ef01c0e93f7ee3a0a4b139aa14728b9 native_id: triforce + name: Triforce bk: files: - name: B11M_BOS.ROM @@ -3513,6 +3611,7 @@ systems: md5: fe4627d1e3a1535874085050733263e7 zipped_file: bk11m_324_bos.rom native_id: bk + name: Elektronika BK standalone_cores: - abuse - azahar diff --git a/scripts/exporter/base_exporter.py b/scripts/exporter/base_exporter.py index 1839dc69..e27fe155 100644 --- a/scripts/exporter/base_exporter.py +++ b/scripts/exporter/base_exporter.py @@ -30,3 +30,26 @@ class BaseExporter(ABC): def _is_pattern(name: str) -> bool: """Check if a filename is a placeholder pattern (not a real file).""" return "<" in name or ">" in name or "*" in name + + @staticmethod + def _display_name( + sys_id: str, scraped_sys: dict | None = None, + ) -> str: + """Get display name for a system from scraped data or slug.""" + if scraped_sys: + name = scraped_sys.get("name") + if name: + return name + # Fallback: convert slug to display name with acronym handling + _UPPER = { + "3do", "cps1", "cps2", "cps3", "dos", "gba", "gbc", "msx", + "nes", "nds", "ngp", "psp", "psx", "sms", "snes", "tvc", + } + parts = sys_id.replace("-", " ").split() + result = [] + for p in parts: + if p.lower() in _UPPER: + result.append(p.upper()) + else: + result.append(p.capitalize()) + return " ".join(result) diff --git a/scripts/exporter/batocera_exporter.py b/scripts/exporter/batocera_exporter.py index 0edf6c34..745bb88d 100644 --- a/scripts/exporter/batocera_exporter.py +++ b/scripts/exporter/batocera_exporter.py @@ -11,9 +11,6 @@ from pathlib import Path from .base_exporter import BaseExporter -def _slug_to_display(slug: str) -> str: - """Convert slug to display name: 'atari-5200' -> 'Atari 5200'.""" - return slug.replace("-", " ").title() class Exporter(BaseExporter): @@ -31,15 +28,11 @@ class Exporter(BaseExporter): ) -> None: # Build native_id and display name maps from scraped data native_map: dict[str, str] = {} - display_map: dict[str, str] = {} if scraped_data: for sys_id, sys_data in scraped_data.get("systems", {}).items(): nid = sys_data.get("native_id") if nid: native_map[sys_id] = nid - dname = sys_data.get("name") - if dname: - display_map[sys_id] = dname lines: list[str] = ["systems = {", ""] @@ -51,7 +44,8 @@ class Exporter(BaseExporter): continue native_id = native_map.get(sys_id, sys_id) - display_name = display_map.get(sys_id, _slug_to_display(sys_id)) + scraped_sys = scraped_data.get("systems", {}).get(sys_id) if scraped_data else None + display_name = self._display_name(sys_id, scraped_sys) # Build biosFiles entries as compact single-line dicts bios_parts: list[str] = [] diff --git a/scripts/exporter/recalbox_exporter.py b/scripts/exporter/recalbox_exporter.py index c014e6df..9b5ae759 100644 --- a/scripts/exporter/recalbox_exporter.py +++ b/scripts/exporter/recalbox_exporter.py @@ -15,9 +15,6 @@ from pathlib import Path from .base_exporter import BaseExporter -def _slug_to_display(slug: str) -> str: - """Convert slug to display name.""" - return slug.replace("-", " ").title() class Exporter(BaseExporter): @@ -34,15 +31,11 @@ class Exporter(BaseExporter): scraped_data: dict | None = None, ) -> None: native_map: dict[str, str] = {} - display_map: dict[str, str] = {} if scraped_data: for sys_id, sys_data in scraped_data.get("systems", {}).items(): nid = sys_data.get("native_id") if nid: native_map[sys_id] = nid - dname = sys_data.get("name") - if dname: - display_map[sys_id] = dname lines: list[str] = [ '', @@ -58,7 +51,8 @@ class Exporter(BaseExporter): continue native_id = native_map.get(sys_id, sys_id) - display_name = display_map.get(sys_id, _slug_to_display(sys_id)) + scraped_sys = scraped_data.get("systems", {}).get(sys_id) if scraped_data else None + display_name = self._display_name(sys_id, scraped_sys) lines.append(f' ') diff --git a/scripts/exporter/retrobat_exporter.py b/scripts/exporter/retrobat_exporter.py index 20c2f9cc..814dde37 100644 --- a/scripts/exporter/retrobat_exporter.py +++ b/scripts/exporter/retrobat_exporter.py @@ -15,9 +15,6 @@ from pathlib import Path from .base_exporter import BaseExporter -def _slug_to_display(slug: str) -> str: - """Convert slug to display name.""" - return slug.replace("-", " ").title() class Exporter(BaseExporter): @@ -34,15 +31,11 @@ class Exporter(BaseExporter): scraped_data: dict | None = None, ) -> None: native_map: dict[str, str] = {} - display_map: dict[str, str] = {} if scraped_data: for sys_id, sys_data in scraped_data.get("systems", {}).items(): nid = sys_data.get("native_id") if nid: native_map[sys_id] = nid - dname = sys_data.get("name") - if dname: - display_map[sys_id] = dname output: OrderedDict[str, dict] = OrderedDict() @@ -54,7 +47,8 @@ class Exporter(BaseExporter): continue native_id = native_map.get(sys_id, sys_id) - display_name = display_map.get(sys_id, _slug_to_display(sys_id)) + scraped_sys = scraped_data.get("systems", {}).get(sys_id) if scraped_data else None + display_name = self._display_name(sys_id, scraped_sys) bios_files: list[OrderedDict] = [] for fe in files: diff --git a/scripts/exporter/systemdat_exporter.py b/scripts/exporter/systemdat_exporter.py index 27b11abb..ca54ebc2 100644 --- a/scripts/exporter/systemdat_exporter.py +++ b/scripts/exporter/systemdat_exporter.py @@ -46,16 +46,28 @@ class Exporter(BaseExporter): if nid: native_map[sys_id] = nid + # Match exact header format of libretro-database/dat/System.dat + version = "" + if scraped_data: + version = scraped_data.get("dat_version", scraped_data.get("version", "")) lines: list[str] = [ "clrmamepro (", '\tname "System"', '\tdescription "System"', '\tcomment "System, firmware, and BIOS files used by libretro cores."', + ] + if version: + lines.append(f"\tversion {version}") + lines.extend([ + '\tauthor "libretro"', + '\thomepage "https://github.com/libretro/libretro-database/blob/master/dat/System.dat"', + '\turl "https://raw.githubusercontent.com/libretro/libretro-database/master/dat/System.dat"', ")", "", "game (", '\tname "System"', - ] + '\tcomment "System"', + ]) systems = truth_data.get("systems", {}) for sys_id in sorted(systems): diff --git a/scripts/scraper/batocera_scraper.py b/scripts/scraper/batocera_scraper.py index 8a4e0a76..9bdf76a9 100644 --- a/scripts/scraper/batocera_scraper.py +++ b/scripts/scraper/batocera_scraper.py @@ -303,12 +303,25 @@ class Scraper(BaseScraper): """Generate a platform YAML config dict from scraped data.""" requirements = self.fetch_requirements() + # Parse source to extract display names per system + raw = self._fetch_raw() + source_dict = self._extract_systems_dict(raw) + display_names: dict[str, str] = {} + for sys_key, sys_data in source_dict.items(): + dname = sys_data.get("name", "") + if dname: + slug = SYSTEM_SLUG_MAP.get(sys_key, sys_key) + display_names[slug] = dname + systems = {} for req in requirements: if req.system not in systems: sys_entry: dict = {"files": []} if req.native_id: sys_entry["native_id"] = req.native_id + dname = display_names.get(req.system) + if dname: + sys_entry["name"] = dname systems[req.system] = sys_entry entry = { diff --git a/scripts/scraper/retrobat_scraper.py b/scripts/scraper/retrobat_scraper.py index 5a9f0b84..70a80e33 100644 --- a/scripts/scraper/retrobat_scraper.py +++ b/scripts/scraper/retrobat_scraper.py @@ -121,10 +121,25 @@ class Scraper(BaseScraper): """Generate a platform YAML config dict from scraped data.""" requirements = self.fetch_requirements() + # Parse source to extract display names per system + raw = self._fetch_raw() + source_data = json.loads(raw) + display_names: dict[str, str] = {} + for sys_key, sys_data in source_data.items(): + if isinstance(sys_data, dict): + dname = sys_data.get("name", "") + if dname: + slug = SYSTEM_SLUG_MAP.get(sys_key, sys_key) + display_names[slug] = dname + systems = {} for req in requirements: if req.system not in systems: - systems[req.system] = {"files": []} + sys_entry: dict = {"files": []} + dname = display_names.get(req.system) + if dname: + sys_entry["name"] = dname + systems[req.system] = sys_entry entry = { "name": req.name,