Commit Graph

4242 Commits

Author SHA1 Message Date
Cameron Horn
e987b532d7 default to querying all roms 2026-03-11 17:33:31 -04:00
Georges-Antoine Assi
6f02a4beff Merge pull request #3114 from tmgast/feature/client-api-tokens
Add client API tokens with QR pairing flow
2026-03-10 22:17:05 -04:00
Georges-Antoine Assi
9b95e85dee Merge pull request #3110 from cciollaro/feat/stats-metadata-coverage-regions
Per-platform metadata coverage and region breakdown to server stats
2026-03-10 21:58:32 -04:00
nendo
6de2a478f3 fix: remove dead code and add missing validation
- Consolidate PAIR_CODE_TTL_SECONDS to single source in utils
- Add min_length=1 validation on scopes field
- Remove unused pairExpiresIn ref, rawToken ref, dead emitter listener
- Fix formattedCode fallback to return normalized value
2026-03-11 10:56:35 +09:00
nendo
bd5b3375f0 fix: remove unused User import and add i18n keys to all locales
Fixes trunk_check (unused import) and check-translations (missing
keys in non-en_US locales) CI failures.
2026-03-11 10:56:35 +09:00
nendo
e0b25fbc6c feat(client-tokens): add client API tokens with QR pairing flow
Long-lived, revocable, scope-restricted tokens for external clients
(mobile apps, retro handhelds, third-party tools). Includes:

- Backend: model, migration, DB handler, auth integration (rmm_ prefix
  routing in HybridAuthBackend), CRUD + pairing + exchange endpoints,
  rate limiting, scope intersection enforcement, admin oversight
- Frontend: settings page with token management table, stepped
  create/deliver dialog (config -> copy/pair), QR code with RomM logo,
  admin token table, standalone /pair page for QR scan landing
- /pair page supports custom-scheme callbacks for app deep linking,
  falls back to displaying code for manual entry
- 33 backend tests across 5 classes (CRUD, auth, isolation, pairing,
  admin)
2026-03-11 10:56:35 +09:00
Georges-Antoine Assi
f8a9740e8f rejig styles 2026-03-10 21:52:33 -04:00
Georges-Antoine Assi
0c18c2588c run fmt 2026-03-10 21:47:27 -04:00
cc
a4e8d9df49 fix: sort without mutating store, move constants to module scope
- Spread allPlatforms before sorting to avoid mutating Pinia store
- Move _METADATA_SOURCE_COLUMNS to module level
- Add optional chain on sourceInfo v-img src

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 20:09:19 -04:00
cc
f82a4e15f5 fix: address remaining review feedback
- Use i18n key for "games" label instead of hardcoded "Roms"
- Remove min-width on size bar fill so zero-size platforms show no bar
- Align Python TypedDict keys to str to match JSON wire format

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 19:58:14 -04:00
cc
60f5c38c8c fix: polish platform card layout
- Add rom count as detail table row aligned with metadata/region chips
- Use standard chip style for fs_slug matching PlatformListItem
- Size and percentage on two lines for readability
- Adjust platform icon vertical alignment

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 19:52:14 -04:00
cc
837046d4c1 fix: use String() for numeric key lookups on string-keyed Records
JSON serializes object keys as strings, so explicitly convert platform
IDs to strings when accessing metadataCoverage and regionBreakdown maps.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 19:40:06 -04:00
cc
8e568780e8 chore: use existing locale keys for metadata/region labels
Reuse rom.metadata and platform.region instead of adding new keys.
Remove orphaned platforms-size key from all 16 locale files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 19:39:13 -04:00
cc
d0c33e31bc chore: remove unused platforms-size locale key
Fallback locale (en_US) covers the two new keys for other languages.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 19:32:18 -04:00
cc
52c53505a1 refactor: address review feedback
- Derive metadata source columns from Rom model instead of hardcoded list
- Replace getOrderedCoverage() function calls with a computed map to avoid
  redundant sorting on each render

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 19:27:50 -04:00
Georges-Antoine Assi
3ebeb10b1c Merge pull request #3116 from JamieeBond/feature/shared-logic-path-video
Add property for path_video and refactor places which use similar logic
2026-03-10 16:58:09 -04:00
Georges-Antoine Assi
a4a4fd29c8 Merge pull request #3111 from rommapp/copilot/improve-firmware-detection-message
Show firmware count in scan results to improve BIOS detection discoverability
2026-03-10 16:37:03 -04:00
Georges-Antoine Assi
8e4c5114cc Merge pull request #3109 from rommapp/copilot/fix-cleanup-all-hangs-issue
Move "Clean up All" missing ROMs deletion to background task
2026-03-10 16:26:00 -04:00
Georges-Antoine Assi
515be47d6d add cleanup dialog 2026-03-10 16:15:57 -04:00
Georges-Antoine Assi
8f8ef1f700 some changes from review 2026-03-10 16:13:21 -04:00
Jamie Bond
a72a370c86 Ran npm run generate 2026-03-10 20:48:49 +01:00
Jamie Bond
1e6f0d6000 Add property for path_video and refactor places which use similar logic to access video paths 2026-03-10 20:32:54 +01:00
Georges-Antoine Assi
e9ac44ce2c finish language translation 2026-03-10 08:24:29 -04:00
Georges-Antoine Assi
bbb257b68a style to my liking 2026-03-09 23:37:35 -04:00
Georges-Antoine Assi
99d93d95c7 run fmt 2026-03-09 22:49:30 -04:00
copilot-swe-agent[bot]
54fdc62e8e refactor: aggregate firmware socket event to fire once per platform with a count
Instead of emitting scan:scanning_firmware once per firmware file, emit
a single event per platform after all firmware is processed, carrying
only the firmware_count. Frontend tracks firmware_count (int) on each
ScanningPlatform instead of a full firmware list.

Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
2026-03-10 02:45:50 +00:00
copilot-swe-agent[bot]
41a9a2106d Use existing /tasks/run endpoint instead of custom cleanup-missing endpoint
Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
2026-03-10 02:40:47 +00:00
copilot-swe-agent[bot]
09ff700e9a feat: show firmware files in scan results to improve discoverability
- Backend: emit scan:scanning_firmware socket event per firmware
- Frontend: track and display firmware per platform in scan results
- Frontend: add firmware stats chip to scan stats bar
- Frontend: update empty state message to mention firmware
- i18n: add firmware-related translation keys

Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
2026-03-10 02:31:15 +00:00
copilot-swe-agent[bot]
f938e627b4 Move cleanup-all missing ROMs to background task to prevent browser hang
Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
2026-03-10 02:25:58 +00:00
cc
c8fd7fedde fix: section header, card spacing polish
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 22:25:40 -04:00
cc
778097f4a0 feat: add per-platform metadata coverage and region breakdown to server stats
Enhances the server stats page with two new per-platform statistics:
- Metadata coverage: shows which sources matched ROMs (ordered by user's scan priority config)
- Region breakdown: shows ROM counts per region with flag emojis

Backend adds two new efficient queries (single GROUP BY for metadata, Python-side aggregation for regions).
Frontend redesigns platform cards with a tabular detail layout, size bar visualization, and expandable region chips.

> This PR was developed with AI assistance (Claude Code) per CONTRIBUTING.md disclosure requirements.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 22:15:08 -04:00
copilot-swe-agent[bot]
dda77737af Implement OIDC RP-Initiated Logout (end-session endpoint)
Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
2026-03-10 01:56:47 +00:00
cc
6936a089b8 perf(scan): replace deep watch with computed to reduce reactivity overhead
During a scan with large collections, the scan page becomes slow or
unresponsive. The watch on scanningPlatforms with { deep: true } was
firing on every ROM addition, causing Vue to deeply traverse all nested
platform and ROM data each time.

The watch's only job is deciding which panels are open. A panel should
open when a platform first receives ROMs — after that, its open/closed
state doesn't need to change regardless of how many more ROMs arrive.

Replace with a computed that maps each platform to a boolean
(roms.length > 0), so the watch only fires on that one meaningful
transition per platform. The ROM list inside each panel continues to
update reactively as normal — this change only affects the panel
open/close logic.

Note: This PR was written with AI assistance (Claude Code).
2026-03-09 20:38:54 -04:00
Georges-Antoine Assi
e651cfcf4a Merge pull request #3097 from rommapp/copilot/add-filter-results-number
Show filtered ROM count in the gallery AppBar and filter drawer
2026-03-09 09:20:59 -04:00
Georges-Antoine Assi
8e0ebad956 Merge pull request #3098 from Drarox/master
Add more plateforms to cover styles
2026-03-09 09:20:42 -04:00
Georges-Antoine Assi
b2abf776f2 hide on 0 2026-03-09 09:18:04 -04:00
Georges-Antoine Assi
3286fd970e ill do it myself 2026-03-09 09:13:14 -04:00
Yannick
9e529caa74 Add more plateforms 2026-03-09 11:25:59 +01:00
copilot-swe-agent[bot]
5a2fb7a395 feat: move ROM count to filter drawer and AppBar chip, remove from button
Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
2026-03-09 03:20:58 +00:00
copilot-swe-agent[bot]
462b3aaf9e feat: show filtered ROM count below the filter button in gallery AppBar
Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
2026-03-09 03:07:46 +00:00
Georges-Antoine Assi
115fad85e9 Merge pull request #3093 from rommapp/copilot/add-click-to-zoom-feature
feat: Click to zoom game cover image
2026-03-08 23:03:16 -04:00
copilot-swe-agent[bot]
89c482c7fa fix: only show zoom button on non-clickable covers (when pointerOnHover is false)
Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
2026-03-09 02:59:43 +00:00
Georges-Antoine Assi
84ff48e725 run fmt 2026-03-08 22:56:19 -04:00
Georges-Antoine Assi
e2ece6b938 run fmt 2026-03-08 22:54:58 -04:00
copilot-swe-agent[bot]
53b0b9021b Switch invite token expiration unit from minutes to seconds
Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
2026-03-09 02:48:21 +00:00
copilot-swe-agent[bot]
5f309639af Make invite token expiration configurable via env var and UI
Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
2026-03-09 01:43:53 +00:00
copilot-swe-agent[bot]
554845bd56 feat: move click-to-zoom to common game card Base.vue
Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
2026-03-09 00:52:48 +00:00
copilot-swe-agent[bot]
61540b5ceb feat: click to zoom game cover in console Game view
Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
2026-03-09 00:42:07 +00:00
Georges-Antoine Assi
c89753c3c1 display otehr categoies 2026-03-08 18:40:36 -04:00
Georges-Antoine Assi
80e78a8fe3 fix literally everything about age ratings 2026-03-08 18:34:58 -04:00