497 Commits

Author SHA1 Message Date
copilot-swe-agent[bot]
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 Assi
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 Assi
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 Assi
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 Assi
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]
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 Assi
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]
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]
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