Commit Graph

4115 Commits

Author SHA1 Message Date
zurdi
1b05ffc6c2 fix: update pluralization in Spanish translations and improve file upload handling in RDropzone 2026-06-19 11:06:30 +02:00
zurdi
54b403a38e Merge remote-tracking branch 'origin/master' into feat/add-user-avatar-to-notes 2026-06-19 07:48:36 +00:00
zurdi
d5c985f634 Merge remote-tracking branch 'origin/master' into feat/screenshot-CRUD-endpoints 2026-06-19 07:35:07 +00:00
Georges-Antoine Assi
8922c2dd12 changes forom bot review 2026-06-18 13:27:41 -04:00
Georges-Antoine Assi
8bf7d18afe cleanup 2026-06-18 11:48:51 -04:00
Georges-Antoine Assi
d3390b9d47 Add rom.sort-key translation to all locales
Backfill the `sort-key` key (added to en_US/en_GB) across the remaining 15
locale rom.json files with translations, so check_i18n_locales passes.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 11:42:59 -04:00
Georges-Antoine Assi
a38ebe29b5 Preserve custom name_sort_key; gate derivation on "still derived"
Drop the name_sort_key_custom flag/migration in favour of a flagless rule: a
key is "custom" when it no longer equals compute(name). Apply that consistently
across all three write paths so a manual sort key survives renames while a
derived key keeps following the name:

- @validates re-derives on name assignment only when the stored key still
  matches the derived value; direct name_sort_key assignment stores a
  normalized custom key (or reverts to derived when cleared). Handles both
  kwarg orders at construction.
- update_rom mirrors the same check for the bulk update() path it bypasses.
- The edit endpoint only writes the key when the user actually changed the
  field, delegating the untouched case to update_rom.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 11:30:40 -04:00
Georges-Antoine Assi
cd19d723fa Merge sort_name into name_sort_key with custom-override flag
Collapse the separate `sort_name` column into `name_sort_key`, which is now
the single user-settable sort field: always normalized and indexed for fast
ordering, derived from `name` by default, and overridable. A new
`name_sort_key_custom` boolean marks user/metadata overrides so they survive
renames and rescans.

- Drop the `roms.sort_name` column; repurpose migration 0085 to add
  `name_sort_key_custom`.
- Derive the key via `@validates("name")` unless pinned custom; the edit
  dialog, unmatch flow, and ES-DE gamelist <sortname> set custom keys.
- update_rom / scan_rom keep the columns in sync explicitly (bulk update and
  construction bypass / reorder the validator).
- Frontend: edit field drives name_sort_key (empty when auto), api sends the
  override only when custom, regenerated types updated.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 10:34:21 -04:00
zurdi
d4a6d97acb feat: add user avatar and updated timestamp to community screenshots 2026-06-18 14:20:54 +00:00
zurdi
c0b44cd2ef Merge branch 'feat/screenshot-CRUD-endpoints' into feat/add-user-avatar-to-notes 2026-06-18 14:17:32 +00:00
Georges-Antoine Assi
e7d46ee8c4 fix types 2026-06-18 09:32:38 -04:00
Georges-Antoine Assi
0d8a0a2ab2 Merge branch 'master' into copilot/support-sortname-tag-es-de 2026-06-18 09:04:17 -04:00
zurdi
2772ecb239 Merge remote-tracking branch 'origin/master' into feat/screenshot-CRUD-endpoints 2026-06-18 12:58:31 +00:00
Georges-Antoine Assi
4feb71a697 fix type errors 2026-06-18 08:07:07 -04:00
Georges-Antoine Assi
aea09911ad cleanup 2026-06-18 07:57:09 -04:00
zurdi
a8d2fcb605 feat: implement RDropzone component for file uploads with drag-and-drop support
- Added RDropzone component for handling file uploads with a customizable interface.
- Integrated RDropzone into Patcher and Upload views, replacing previous drop zone implementations.
- Enhanced ScreenshotsTab with additional functionality for community screenshots, including visibility toggles and owner display.
- Updated styles for improved user experience and responsiveness.
- Created Storybook stories for RDropzone to demonstrate its usage and interaction.
2026-06-18 11:05:52 +00:00
zurdi
cc9691196c feat: add screenshot upload functionality and UI enhancements
- Implemented screenshot upload feature in the ROM management section.
- Added new API methods for uploading and removing screenshots.
- Enhanced UI to support drag-and-drop for screenshots and display uploaded images.
- Updated localization files for Russian, Simplified Chinese, and Traditional Chinese to include new screenshot-related strings.
- Improved the FilesTab and MediaTab components to manage screenshots effectively.
- Added delete functionality for user-uploaded screenshots with confirmation prompts.
- Updated styling for screenshot elements to improve user experience.
2026-06-18 07:45:16 +00:00
Georges-Antoine Assi
4bacdc5f09 Merge branch 'master' into fix/search-performance-improvements 2026-06-17 17:39:47 -04:00
zurdi
17e37c4262 feat: add user avatar and updated timestamp to notes schema and frontend components 2026-06-17 13:41:07 +02:00
zurdi
a692a7e8f8 fix: replace default avatar handling with userAvatarUrl utility across components 2026-06-17 13:13:37 +02:00
zurdi
0897c69927 feat: implement All-mode selection handling in RSelect and Scan views 2026-06-17 01:46:30 +02:00
Daniel Bonofiglio
d5ffeeeddb fix(search): full-text indexes+caching
Adds a few new indexes to handle full-text searches instead of doing
`ILIKE` matching, improving performance substantially.
Alongside that, a few other things were done in order to improve search
performance, such as caching filter values so they're not computed on
each request to /api/roms. Overall, this should have a very noticeable
impact on large collections when using the search feature.
2026-06-16 20:39:15 -03:00
zurdi
f01eda9227 Merge remote-tracking branch 'origin/master' into chore/frontend-v2 2026-06-16 18:21:14 +02:00
zurdi
1e00538db3 feat: enhance selection bar and game action button for status toggling 2026-06-16 17:33:25 +02:00
zurdi
84a4c80ba6 feat: enhance game actions and menu interactions
- Updated `useGameActions` to improve navigation handling during game play.
- Modified `RMenu` to allow modifier-clicks on links to open in new tabs without closing the menu.
- Added new stories and tests for `RMenuItem` to ensure correct behavior for new-tab gestures.
- Introduced `colorCoverArt` for procedural cover-art generation, ensuring consistent styling across missing and unmatched cover images.
- Implemented SVG generation for cover art in `covers.ts`, providing unique visuals for identified and unidentified ROMs.
- Enhanced `EmulatorJS` and `Ruffle` views to support dynamic cover art based on selected styles, improving user experience during gameplay.
- Refactored cover image handling to support animations and maintain aspect ratios.
2026-06-16 17:20:47 +02:00
zurdi
9f6138d010 Merge branch 'master' into chore/frontend-v2
Adopt master's ROM schema design (sibling_roms + files, batched
get_files_for_roms / get_siblings_for_roms) while preserving the v2-branch
features master lacks: per-user is_main_sibling on siblings and audio_meta
on rom files.

Conflict resolution:
- responses/rom.py: keep master's sibling_roms/files fields; re-graft
  is_main_sibling via SiblingRomSchema.from_rom(rom, is_main_sibling=...);
  restore the eager-relationship fallback in
  SimpleRomSchema.from_orm_with_request (None sentinel) so the v2
  /{id}/simple endpoint still returns siblings/files.
- roms_handler.py: get_siblings_for_roms now left-joins RomUser and returns
  (Rom, is_main_sibling) tuples; keep both branch and master file helpers.
- drop the redundant branch-only sibling_ids field and
  get_sibling_data_for_roms.
- generated types resolved to match (sibling_roms + files; RomFileSchema
  keeps audio_meta and gains archive_members).
- update v2 components and the RelatedGameCard mock to read sibling_roms.
- fix stale exclude={"siblings"} -> "sibling_roms" in scan emit payloads.
- re-chain the audio_meta migration as 0083 (after master's 0082) to keep a
  single Alembic head.
- package.json: union of branch tooling + master dependency bumps; lock
  regenerated.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 01:19:55 +02:00
Georges-Antoine Assi
ccb8d400e9 run fmt 2026-06-15 13:47:32 -04:00
copilot-swe-agent[bot]
0bdba15aca Fix bypass_autologin being overwritten by 403 interceptor during app init
Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
2026-06-15 17:09:44 +00:00
zurdi
9912c4cc79 feat(collections): add visibility and kind labels to collections
- Updated localization files for multiple languages to include new keys for collection kinds (standard, smart, virtual) and visibility (public, private).
- Enhanced CollectionListHeader and CollectionListRow components to support sorting by visibility and display appropriate labels.
- Modified CollectionTile component to show visibility status for owner-managed collections.
- Updated CollectionsIndex view to implement segmented filters for kind and visibility, allowing users to filter collections based on these criteria.
- Adjusted styles for new visibility and kind indicators in collection components.
2026-06-15 18:49:50 +02:00
Georges-Antoine Assi
3f26398093 Merge pull request #3494 from rommapp/copilot/fix-safari-bezel-asset-error
Handle missing console bezel assets without rendering Safari broken-image overlay
2026-06-08 11:52:34 -04:00
Georges-Antoine Assi
cd101758fd cleanup for simplicity 2026-06-08 11:13:15 -04:00
Georges-Antoine Assi
036cf108f4 sinmplify siblings 2026-06-08 10:25:27 -04:00
copilot-swe-agent[bot]
a7751c55cd fix(console): hide bezel overlay when bezel asset fails to load
Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
2026-06-08 12:17:15 +00:00
nendo
37f0feab8c Add opt-in files/siblings expansion to GET /api/roms 2026-06-07 16:12:21 +09:00
Georges-Antoine Assi
619e03ab32 fix: stop serving private user assets via unauthenticated nginx static route
The default Docker image symlinked /romm/assets into the nginx static web
root (/assets/romm/assets), where it was served by an unauthenticated
`location /assets { try_files ... }` block. /romm/assets holds private user
data (save files, save states, screenshots, avatars) that is meant to be
accessible only through the authenticated /api/raw/assets/{path} route
(Scope.ASSETS_READ). The static symlink bypassed that protection, letting any
unauthenticated caller read another user's files given a (guessable) path.
Avatar URLs leaked the hex user ID through the same static route, making path
construction straightforward.

Fix:
- Drop the /romm/assets symlink from the Docker image build and both
  entrypoint scripts; only /romm/resources (public cover art, screenshots,
  manuals) remains statically served.
- Point the frontend avatar URLs at the authenticated /api/raw/assets/ route
  instead of /assets/romm/assets/. Browser <img> loads authenticate via the
  existing session cookie.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 17:34:30 -04:00
zurdi
0d1388a0fe Enhance mobile responsiveness across gallery components and UI elements 2026-06-05 17:39:09 +02:00
zurdi
da0961281a Implement responsive navigation layout with BottomNav and BreakpointBadge components 2026-06-05 15:09:26 +02:00
zurdi
9e348e385a Preserve body overflow state when locking and unlocking scroll in RDialog and RDrawer 2026-06-05 13:45:04 +02:00
zurdi
09e375face Update translations for "save-as-smart" to include "collection" in multiple languages 2026-06-05 13:41:49 +02:00
zurdi
485e031183 Refactor routing structure to consolidate Library Tools under Settings layout and remove LibraryToolsLayout component 2026-06-05 13:29:08 +02:00
zurdi
b999b20cdc Update user token messages for clarity and enhance navigation structure in AppNav and SettingsSidebar 2026-06-05 13:24:10 +02:00
zurdi
67a059a0be Add beta badge to New UI button in UI version toggle 2026-06-05 13:15:25 +02:00
zurdi
12b0ec92ae Add RChip component to UserMenu and SettingsSidebar for badge display 2026-06-05 13:12:16 +02:00
zurdi
33774e9adb Implement stable item keys in RVirtualScroller and enhance ROM row animations in ScanPlatformRow 2026-06-05 11:51:52 +02:00
zurdi
79525f8a5f Update theme settings to default to dark mode and adjust CSS for better readability in AuthLayout 2026-06-04 22:42:01 +02:00
zurdi
b3ab48ad41 Refactor scan log behavior to prepend new platforms and ensure auto-scroll remains at the top for better user experience 2026-06-04 18:55:50 +00:00
copilot-swe-agent[bot]
fd95a29551 fix: invalidate EmulatorJS ROM cache when rom filename changes
Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
2026-06-03 19:06:29 +00:00
copilot-swe-agent[bot]
3f98aa16f4 feat: expose rom sort_name in edit form
Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
2026-05-31 16:24:32 +00:00
Georges-Antoine Assi
3ca45fafc1 [ROMM-3457] Add tgcd and supergrafx to emulatorjs platform list 2026-05-31 09:23:53 -04:00
Georges-Antoine Assi
2137adc429 Merge pull request #3454 from rommapp/feat/emulatorjs-new-cores
feat(player): add genesis_plus_gx_wide, bsnes, freeintv, azahar EJS cores
2026-05-30 21:58:22 -04:00