59 Commits

Author SHA1 Message Date
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
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
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
ee8b55e6ef
last set of changes 2026-03-07 09:56:17 -05:00
Georges-Antoine Assi
7a5185fe22
complete rest of handler 2025-09-20 19:38:26 -04:00
Georges-Antoine Assi
8c33a95637
remove hartbeat from bh endpoint 2025-09-20 17:57:38 -04:00
Georges-Antoine Assi
3c4113f8a8
Merge branch 'master' into flashpoint-metadata-handler 2025-09-11 21:27:48 -04:00
Georges-Antoine Assi
d7e85ba633
[ROMM-1333] Use metadata tag in filename to match game 2025-09-07 14:12:30 -04:00
Georges-Antoine Assi
d1ecff395b
[ROMM-2344] Ignore RA manuals on scan 2025-09-04 23:11:04 -04:00
Michael Manganiello
e4e3928d1b
misc: Apply import sorting 2025-09-04 11:17:00 -03:00
Michael Manganiello
d216bad78b
misc: Add MetadataHandler's is_enabled method
Convert `MetadataHandler` to an abstract base class and add an
`is_enabled` class method that allows every metadata handler to
independently report whether it is enabled based on its configuration.

This avoids the need for global variables in the config module, allowing
us to change the enabled state of a metadata handler at runtime if
needed.
2025-09-03 22:13:28 -03:00
Georges-Antoine Assi
ef2546ec08
fix base handler filename 2025-08-27 12:40:16 -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
Michael Manganiello
f13d2198db
fix: Make RetroAchievements hash matching case-insensitive
Fixes #2182.
2025-08-09 12:48:28 -03:00
Georges-Antoine Assi
1955da78f2
finish all the handlers 2025-07-24 17:05:39 -04:00
Georges-Antoine Assi
8a76528815
finish translating keys 2025-07-24 16:09:49 -04:00
Georges-Antoine Assi
b431aa4d7e
manual fixes 2025-07-24 15:43:03 -04:00
Georges-Antoine Assi
39e6fd3579
use ups keys for all lists 2025-07-24 15:30:03 -04:00
Georges-Antoine Assi
973f42cd0b
update watasra supervision 2025-07-23 22:20:18 -04:00
Georges-Antoine Assi
595c52bcab
Unify singular slugs 2025-07-23 21:52:52 -04:00
Georges-Antoine Assi
51652d5084
make all path stuff async 2025-07-18 10:53:55 -04:00
Georges-Antoine Assi
4838bec0a6
fix rahasher days 2025-07-17 21:55:46 -04:00
Georges-Antoine Assi
0df4eb1985
fix some aggressive usage 2025-07-17 21:20:02 -04:00
Georges-Antoine Assi
0d95735351
finish updating endpoints 2025-07-17 14:44:13 -04:00
Georges-Antoine Assi
d351ad11b0
fix rahandler metadata generation 2025-07-15 16:06:44 -04:00
Georges-Antoine Assi
8049e47d82
change from code review 2025-07-14 11:22:56 -04:00
Georges-Antoine Assi
0224b0a124
fix url of cover art 2025-07-14 10:51:38 -04:00
Georges-Antoine Assi
5d6ae2c842
stop overwriting IDs on scan 2025-07-14 10:31:19 -04:00
Michael Manganiello
8647057e54
misc: Remove _request method from RAHandler
This logic was moved to the RetroAchievements service in #1951.
2025-06-20 12:41:29 -03:00
zurdi
e12114e9ef
fix: update badge path handling and improve user progression refresh logic 2025-06-18 10:25:51 +00:00
Georges-Antoine Assi
da74354eed
fix ra platform id 2025-06-17 18:50:25 -04:00
Georges-Antoine Assi
d39614e87a
Merge pull request #1990 from rommapp/hasheous-matching
Hasheous matching
2025-06-17 16:24:58 -04:00
zurdi
b1aa232ed6
fix: RA metadata file from new platform 2025-06-17 09:40:20 +00:00
Georges-Antoine Assi
66cf16d386
use hasheous as a populator to igdb and ra 2025-06-16 22:29:30 -04:00
Georges-Antoine Assi
f91109da37
pass in ra_hash fully 2025-06-14 22:25:16 -04:00
Georges-Antoine Assi
90a059a600
fix allt he shit 2025-06-13 21:30:13 -04:00
Georges-Antoine Assi
15896566ca
progress on reveritng parts 2025-06-13 19:46:07 -04:00
Georges-Antoine Assi
5b80e0ca39
Calculate hashes before fetching metadata 2025-06-12 20:55:49 -04:00
Georges-Antoine Assi
5e6229a59d
Fix RA platform IDs for matching 2025-06-11 08:51:47 -04:00
Michael Manganiello
bdc5fa5c41
feat: Display achievements earned in hardcore mode
Differentiate between achievements earned in softcore and hardcore
modes, by using the characteristic gold color for hardcore ones.

Also, update the progress bar to show both softcore and hardcore
completion percentages.
2025-06-10 22:19:41 -03:00
Michael Manganiello
a44db9767a
fix: Iterate through user completion progress in RetroAchievements
Iterate through all pages of user completion progress in the
RetroAchievements service, instead of limiting the data retrieval to the
first 500 results.
2025-06-09 19:19:39 -03:00
Michael Manganiello
e885586edb
misc: Create RetroAchievements service adapter
Add a new service adapter for the RetroAchievements 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 be handled by a specific
`httpx.Auth` class that sets the `y` parameter for each request.
2025-06-09 00:47:05 -03:00
Michael Manganiello
3f8baed220
misc: Add typing to RetroAchievements API responses
Include detailed type information for RetroAchievements API responses,
based on the official API documentation.
2025-06-07 17:56:29 -03:00
zurdi
5f1d39c8f8
refactor: remove RETROACHIEVEMENTS_USERNAME from docker env variables 2025-05-13 09:31:06 +00:00
zurdi
14dbafff79
refactor: Update RAUserGameProgression to use structured EarnedAchievement type 2025-04-23 23:40:36 +00:00
zurdi
53d2cfedb9
refactor: Update RAUserGameProgression to use earned achievements structure 2025-04-23 22:40:17 +00:00
zurdi
e17f6b44de
feat: Add RetroAchievements integration and user profile syncing
- Implemented RA hash handling in ROM processing.
- Added functionality to refresh RetroAchievements data for users.
- Updated user model to store RA progression data.
- Created a new component for managing RetroAchievements settings in user profiles.
- Enhanced ROM metadata to include merged RA achievements and badge paths.
- Refactored API calls to accommodate new RA features and removed unused API key handling.
- Updated frontend components to reflect changes in RA metadata and user settings.
- Adjusted Docker configuration for database service naming.
2025-04-22 21:08:10 +00:00
zurdi
15d630ef54
fix: ra cache files path 2025-04-15 16:12:46 +00:00
zurdi
574e16cadd
feat: fetch all achievements for a game 2025-04-14 16:29:03 +00:00