Commit Graph

1048 Commits

Author SHA1 Message Date
Michael Manganiello
a31a8504c2 feat: Add scheduled task to sync RetroAchievements progress
Add a new scheduled task that syncs RetroAchievements progress for all
users with a RetroAchievements username.

Environment variables:
- `ENABLE_SCHEDULED_RETROACHIEVEMENTS_PROGRESS_SYNC`: Enable or disable
  the task (default: `false`)
- `SCHEDULED_RETROACHIEVEMENTS_PROGRESS_SYNC_CRON`: Cron string to
  schedule the task (default: "0 4 * * *" - daily at 4 AM)
2025-08-31 01:57:26 -03:00
Michael Manganiello
88e5f8aceb Merge pull request #2345 from rommapp/misc/igdb-service-adapter
misc: Create IGDB service adapter
2025-08-30 21:13:10 -03:00
Michael Manganiello
b2ea84b5bb misc: Create IGDB service adapter
Add a new service adapter for the IGDB API, to separate concerns with
RomM's handler for metadata. This adapter is agnostic to the handler and
only provides methods to interact with the API, and correctly return
typed responses.

The API authorization was also improved to not rely on decorating each
method that makes requests, but instead using an `aiohttp` middleware
to automatically add the required headers to each request.

Utils `mark_expanded` and `mark_list_expanded` where added to help
narrow the types of IGDB's expandable fields when we know they are
expanded, for `mypy` type checking.
2025-08-30 20:21:15 -03:00
Georges-Antoine Assi
45edc8fcc0 use stores for loading global data 2025-08-28 09:48:52 -04:00
Georges-Antoine Assi
586ce0ef30 Craete image to webp task 2025-08-27 22:12:12 -04:00
Michael Manganiello
9cede7680f feat: Add incremental sync for RetroAchievements progression
This change makes the RetroAchievements progression sync endpoint to
optionally perform an incremental sync (when `incremental` is true),
by only fetching new achievements since the last sync.

This reduces the amount of data fetched and speeds up the sync
process for users who frequently sync their progression. It unblocks the
implementation of automatic periodic syncs in the future.

Frontend behavior:
- When the `Apply` button is clicked in the RetroAchievements settings,
  a full sync is performed (same as before). This is because a change to
  the RA username may have occurred.
- When the `Sync` button is clicked, an incremental sync is performed.
2025-08-27 10:41:51 -03:00
Georges-Antoine Assi
603f6ec5af Add options to gunicorn call 2025-08-26 18:16:52 -04:00
Georges-Antoine Assi
898f960c96 noload rom metadata on collection 2025-08-22 09:15:03 -04:00
Georges-Antoine Assi
b26abdf9a0 noload some related tables 2025-08-21 23:59:24 -04:00
Georges-Antoine Assi
344702415f joinedload roms on collection 2025-08-21 23:23:38 -04:00
Georges-Antoine Assi
1d5cd64fb8 move is_verified to db 2025-08-21 22:58:22 -04:00
Georges-Antoine Assi
8ed107336f only print queries once 2025-08-21 22:34:07 -04:00
Georges-Antoine Assi
82f527b3ad Remove check for non extension 2025-08-20 20:48:30 -04:00
Georges-Antoine Assi
474459c9d5 move group_id coalesce into partition_by 2025-08-20 18:52:55 -04:00
Georges-Antoine Assi
f32dc3171d ignore type issue 2025-08-20 13:50:12 -04:00
Georges-Antoine Assi
e73b6cc190 add option to skip char index 2025-08-20 13:27:26 -04:00
Georges-Antoine Assi
1c0c93bb3d select only some columns for performance 2025-08-20 11:20:02 -04:00
Georges-Antoine Assi
0cc9789a12 fix get_scalar_roms 2025-08-19 23:40:23 -04:00
Georges-Antoine Assi
464ce6a23d only group roms in certain views 2025-08-19 22:27:49 -04:00
Georges-Antoine Assi
7850cf059f fix loading collections 2025-08-19 21:49:52 -04:00
Georges-Antoine Assi
048f8ba248 move fs_size_bytes back to db 2025-08-19 19:38:56 -04:00
Georges-Antoine Assi
cde0c0681f changes from review 2025-08-19 17:07:05 -04:00
Georges-Antoine Assi
5a5abe4e62 changes from self review 2025-08-19 16:27:46 -04:00
Georges-Antoine Assi
7370f83b8f load sibling_roms for individual roms 2025-08-19 16:08:03 -04:00
Georges-Antoine Assi
0dadf8681e fix updating smart collections 2025-08-19 15:53:03 -04:00
Georges-Antoine Assi
25983fad3a comment cleanup 2025-08-19 14:46:56 -04:00
Georges-Antoine Assi
078b140ddb simplify group_id 2025-08-19 12:50:25 -04:00
Georges-Antoine Assi
13ac6104ce Raise lazy joins so all complex joins are explicit 2025-08-19 10:02:11 -04:00
Georges-Antoine Assi
4657ca305a [ROMM-2274] Use platform_id in group_by_meta_id 2025-08-18 19:51:37 -04:00
Georges-Antoine Assi
593f5c921d catch playmatch connect error 2025-08-18 09:08:41 -04:00
Georges-Antoine Assi
5f4943c97b find_best_match handles split name search 2025-08-17 22:39:00 -04:00
Georges-Antoine Assi
363657d139 cleanup 2025-08-17 21:08:56 -04:00
Georges-Antoine Assi
d41a920c37 normalize split tiles for ssfr 2025-08-17 20:29:44 -04:00
Georges-Antoine Assi
f0574577c9 Prefer lower IDs when matching games with same title 2025-08-17 19:53:29 -04:00
Georges-Antoine Assi
a8dc3d3e8d Await .file_exists() when storing badges 2025-08-17 17:43:19 -04:00
Georges-Antoine Assi
dea606ad80 Merge pull request #2261 from rommapp/hash-largest-file
Always hash the largest file in compressed multi file roms
2025-08-13 13:21:59 -05:00
Georges-Antoine Assi
8fb4769776 changes from code review 2025-08-13 14:03:45 -04:00
Georges-Antoine Assi
81a04e4ab4 Always hash the largest file in compressed multi file roms 2025-08-13 13:43:07 -04:00
Michael Manganiello
80291f4be1 misc: Move cache initialization to startup script
Guarantee that cache is initialized during startup, and only once,
instead of every time a `MetadataHandler` object is instantiated.

Also, improve logic to determine `fixtures` paths.
2025-08-13 12:26:15 -03:00
Georges-Antoine Assi
774be0cbde [ROMM-2163] Fix excluding single roms without extensions 2025-08-12 18:18:29 -04:00
Michael Manganiello
edbff6b7e8 Merge pull request #2248 from rommapp/fix/performance-asset-screenshot
fix: Improve performance on asset screenshot retrieval
2025-08-10 16:05:35 -03:00
Georges-Antoine Assi
4728e5da67 [ROMM-2247] Return early if cover write fails 2025-08-10 14:51:06 -04:00
Michael Manganiello
00d7815889 fix: Improve performance on asset screenshot retrieval
When retrieving the related screenshot for a `Save` or `State`, we were
retrieving a very heavy representation of the associated `Rom` object,
only to iterate through its screenshots to find the one we needed.

This change modifies the `Save` and `State` models to directly query the
`Screenshot` model, which is much faster and more efficient. The
`DBScreenshotsHandler` has been updated to include a new `filter` method
that will simplify building queries using SQLAlchemy, something we can
extend to other handlers in the future.

Fixes #1925.
2025-08-10 15:33:13 -03:00
Michael Manganiello
c0483832ac Merge pull request #2240 from rommapp/fix/retroachievements-case-insensitive-hash-match
fix: Make RetroAchievements hash matching case-insensitive
2025-08-09 16:13:41 -03:00
Georges-Antoine Assi
84ded3bc24 pick largest file from the list 2025-08-09 14:47:34 -04:00
Michael Manganiello
f13d2198db fix: Make RetroAchievements hash matching case-insensitive
Fixes #2182.
2025-08-09 12:48:28 -03:00
Georges-Antoine Assi
d005dba90b fix a bunch of shit 2025-08-09 11:16:12 -04:00
Georges-Antoine Assi
afaef09c84 cleanup 2025-08-08 17:08:16 -04:00
Georges-Antoine Assi
16c8c9f993 only init JW once 2025-08-08 17:03:28 -04:00
Georges-Antoine Assi
69079b2a90 Merge branch 'master' into find-best-match 2025-08-08 16:55:39 -04:00