Commit Graph
497 Commits
Author SHA1 Message Date
bf246f842f fix: add cus region to default ScreenScraper fallback regions
Games where only custom (cus) region artwork exists were not fetched
unless users explicitly added 'cus' to their region priority config.
Adding 'cus' to the default fallback list ensures custom artwork is
always considered as a fallback when no other regional artwork exists.

Agent-Logs-Url: https://github.com/rommapp/romm/sessions/75c3e455-f7dd-4bd6-bec7-0460987e40a0

Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
2026-04-16 14:28:51 +00:00
Georges-Antoine AssiandClaude Opus 4.6 f2df03361e fix: cast spread-dict back to RAUserGameProgression to preserve typing
Pylance infers dict[str, Unknown] from the {**old, "highest_award_kind": ...}
spread, which then fails to assign to list[RAUserGameProgression]. Wrap in
typing.cast so the TypedDict type survives the reassignment.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 18:08:18 -04:00
Georges-Antoine Assi 3ce0873931 fix 2026-04-12 16:09:36 -04:00
Georges-Antoine AssiandClaude Opus 4.6 1b5943bd93 feat: fetch libretro Named_Snaps/Titles/Logos gated by SCAN_MEDIA
get_rom now also fetches Named_Snaps, Named_Titles, and Named_Logos
when the matching MetadataMediaType (SCREENSHOT, TITLE_SCREEN, LOGO)
is in SCAN_MEDIA. Box art is still fetched unconditionally — it drives
url_cover and libretro_id. Matching extras are appended to
url_screenshots so the scan_handler artwork priority loop picks them
up without further changes. All enabled listings are fetched
concurrently.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 16:01:37 -04:00
Georges-Antoine Assi 62e540d60e changes from bot review 2026-04-12 15:43:14 -04:00
Georges-Antoine AssiandClaude Opus 4.6 f94c1491e5 fix: respect SCAN_ARTWORK_PRIORITY for SGDB and align libretro search with SGDB pattern
SGDB's url_cover used to clobber whatever the artwork priority loop
picked, which meant user-set priorities (e.g. libretro > sgdb) and
manually uploaded covers were silently overridden. SGDB now only
replaces the current url_cover when it outranks every other source
that produced one under SCAN_ARTWORK_PRIORITY, and never over a
manual cover preserved on UPDATE/UNMATCHED scans. Default artwork
priority gains sgdb at the top so existing "SGDB wins" behavior is
preserved for default configs.

On the /search/roms endpoint, libretro is now an enrichment source
alongside SGDB instead of a primary match source: it decorates
entries resolved by IGDB/Moby/SS/Flashpoint/Launchbox with
libretro_id and libretro_url_cover, mirroring how SGDB works.
get_matched_roms_by_name is removed from the libretro handler since
nothing else calls it.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 11:52:44 -04:00
Georges-Antoine Assi 4928041593 manual cleanu 2026-04-12 11:04:12 -04:00
Georges-Antoine AssiandClaude Opus 4.6 522df9d31a feat: add libretro thumbnails as an artwork source
Adds the libretro thumbnail repository as a first-class artwork source so
region-correct box art (PAL/Europe, Japan, etc.) can be matched directly
to ROM filenames, addressing rommapp/romm#3239.

Implementation follows the SGDB handler pattern (artwork-only, no game
metadata): MetadataSource enum entry, scan-time fetch wired into the
SCAN_ARTWORK_PRIORITY loop, /search/roms integration, MatchRom dialog
chip + cover selection, and a heartbeat flag.

Matching is exact case-insensitive against the directory listing first
(so a ROM named "(Europe)" lands on the (Europe) artwork), with a
JaroWinkler fuzzy fallback at 0.8 that strips parenthetical tags from
both sides. Listings are cached in Redis with a 24h TTL.

`libretro_id` is persisted on the Rom model as the SHA1 hex of the
matched libretro filename — stable across scans, distinct per region,
indexed for lookup. Migration 0077 adds the column.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:57:20 -04:00
Georges-Antoine Assi 21eee327b0 Merge branch 'master' into save-sync 2026-04-06 09:09:53 -04:00
Georges-Antoine Assi a61ff81e22 Merge branch 'master' into gamelist-customize 2026-04-05 22:11:02 -04:00
Georges-Antoine Assi f2e8e337b2 Merge branch 'master' into save-sync 2026-04-05 21:47:53 -04:00
Georges-Antoine Assi e0214f100d more bot cleanup 2026-04-05 19:15:33 -04:00
Georges-Antoine Assi 6abf60b0fe last fixes 2026-04-03 11:49:32 -04:00
Georges-Antoine Assi ceddf2f9e9 changes from bot review 2026-04-03 11:24:02 -04:00
Georges-Antoine Assi ec8583016b mega ton of fixes for 4.8 2026-04-03 10:54:31 -04:00
Vargash f4c965be33 feat: add new export.gamelist.media.image configuration
also fix broken title_screen/miximage/physical key name usage
2026-03-31 11:16:40 +02:00
Eric Daras 8540514b46 add outbound HTTP proxy support for backend requests 2026-03-27 07:02:14 +01:00
zurdi 56bc8c58dd feat: update RAHasher to version 1.8.3 and add Wii platform support 2026-03-20 13:24:19 +00:00
Georges-Antoine Assi 55ca39cacb fix deprecations in pydantic 2026-03-15 09:34:48 -04:00
Georges-Antoine Assi 72e884a83c run fmt 2026-03-12 19:02:24 -04:00
copilot-swe-agent[bot]andgantoine da30e4daf1 feat: auto-update game status from RetroAchievements award kind
Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
2026-03-11 02:27:38 +00:00
Georges-Antoine AssiandGitHub 38b311d1ca Merge pull request #3089 from rommapp/copilot/scrape-age-rating-data
Scrape and store age rating data from ScreenScraper.fr
2026-03-08 18:44:42 -04:00
Georges-Antoine Assi 80e78a8fe3 fix literally everything about age ratings 2026-03-08 18:34:58 -04:00
Georges-Antoine Assi 207f8a3c85 [ROMM-3067] Always sub dash with colon for launchbox matching 2026-03-08 17:26:53 -04:00
copilot-swe-agent[bot]andgantoine 7d103f48a8 Add age rating support from ScreenScraper classifications
Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
2026-03-08 21:20:14 +00:00
copilot-swe-agent[bot]andgantoine 7f88923dee Add video-normalized support for ScreenScraper scan.media config
Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
2026-03-08 20:30:16 +00:00
Georges-Antoine Assi a977b39192 update famicom ID in launchbox 2026-03-08 16:22:15 -04:00
Georges-Antoine Assi aa4abe6b7c end me 2026-03-07 23:43:58 -05:00
Georges-Antoine Assi c515f1855c sdgkjdfhgsdfk 2026-03-07 23:35:19 -05:00
Georges-Antoine Assi a14babc0da my brain is numb 2026-03-07 23:08:54 -05:00
Georges-Antoine Assi 84a39005dc its never done 2026-03-07 22:55:20 -05:00
Georges-Antoine Assi 606799e19c my own cleanup 2026-03-07 21:34:45 -05:00
Georges-Antoine Assi afcba4da9b some bot comments 2026-03-07 20:35:42 -05:00
Georges-Antoine Assi 5f2c1a6b3b fix tests 2026-03-07 18:24:31 -05:00
Georges-Antoine Assi eda88b70d1 get claude to refactor launchbox_handler 2026-03-07 16:02:39 -05:00
Georges-Antoine Assi 395b857592 changes from self review 2026-03-07 14:44:02 -05:00
Georges-Antoine Assi 6de46eb067 Merge branch 'master' into launchbox-handler 2026-03-07 11:31:03 -05:00
Georges-Antoine Assi ee8b55e6ef last set of changes 2026-03-07 09:56:17 -05:00
Georges-Antoine Assi b3339c177b Run formatter on alembic files 2026-02-17 15:12:33 -05:00
Georges-Antoine Assi 661a5504d7 find a couple more uses 2026-02-09 17:26:21 -05:00
Georges-Antoine Assi 16cac7cf64 [ROMM-2972] Fix /props returning stale data 2026-02-08 21:10:12 -05:00
Georges-Antoine Assi 71044bf54b change temp to launchbox 2026-02-06 22:19:19 -05:00
Georges-Antoine Assi efb157a57d [ROMM-2997] Fix HLTB saerch term fetching 2026-02-06 11:53:11 -05:00
Georges-Antoine Assi 257d0ef669 Update hltb_api_url 2026-02-06 11:49:53 -05:00
Georges-Antoine Assi 577a484938 Merge branch 'master' into launchbox-handler 2026-02-02 17:12:36 -05:00
Georges-Antoine Assi 03ca2ae681 replace amp with ampersnad 2026-01-29 13:16:06 -05:00
Georges-Antoine Assi 58e16d9c69 [ROMM-2949] Add support for shortfile scummvm names 2026-01-29 11:12:35 -05:00
Georges-Antoine Assi 7c2c964c32 fix check issues 2026-01-28 16:05:19 -05:00
Georges-Antoine Assi 98ed9a9f2f changes from self-review 2026-01-28 15:48:10 -05:00
Georges-Antoine Assi b95e99ac95 store cache in redis 2026-01-28 15:19:57 -05:00