Commit Graph

9437 Commits

Author SHA1 Message Date
Georges-Antoine Assi
51f0522193 undo 2026-05-17 17:39:47 -04:00
Georges-Antoine Assi
46357f0fa2 test: set SYNC_BASE_PATH to romm_test/sync for pytest
CI runs pytest without root, so the new /var/lib/romm/sync default
fails when FSSyncHandler tries to mkdir its base path at import time.
The other handlers stay writable in tests because they derive from
ROMM_BASE_PATH=romm_test (relative); pin SYNC_BASE_PATH the same way.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 17:25:23 -04:00
Georges-Antoine Assi
ea22b06502 fix(sync): export SYNC_BASE_PATH so the Python child inherits it
The shell fallback was assigned locally but never exported, so
sync_watcher.py and the Python config layer never saw the resolved
value. They happened to land on the same /var/lib/romm/sync default by
coincidence; export it so the shell and Python defaults stay linked
through a single source of truth.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 17:22:54 -04:00
Georges-Antoine Assi
e5c9d0faf7 fix(sync): create SYNC_BASE_PATH at startup before watching
The prod Dockerfile creates /var/lib/romm/sync at build time, but if a
user overrides SYNC_BASE_PATH to a path that doesn't exist (or runs the
dev entrypoint, which never created the default), watchfiles fails to
start because its target directory is missing. Have both entrypoints
mkdir -p the resolved path before handing it to watchfiles.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 14:12:16 -04:00
Georges-Antoine Assi
c97ec449e2 drop more aspect ratrio 2026-05-17 14:07:46 -04:00
Georges-Antoine Assi
90945685e4 Stuff 2026-05-17 12:43:33 -04:00
Georges-Antoine Assi
18a271b653 fix(home): center-align recently added cards vertically
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 12:42:59 -04:00
Georges-Antoine Assi
10d3eb2079 feat(sync): default SYNC_BASE_PATH to /var/lib/romm/sync
Move the sync staging folder out of ROMM_BASE_PATH so it lives on a
dedicated writable mount. This lets the container run with a read-only
root filesystem without losing in-flight save uploads, and keeps
app-owned state separate from the user-curated library volume.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 09:28:39 -04:00
Georges-Antoine Assi
016cc1ce52 Merge pull request #3382 from rommapp/copilot/fix-safari-webkit-upload-issues
Avoid Safari/WebKit stalls during chunked ROM uploads
4.9.0-alpha.3
2026-05-16 20:07:37 -04:00
Georges-Antoine Assi
6df37f50cf run fmt 2026-05-16 20:05:18 -04:00
Georges-Antoine Assi
d72e645049 use bowser 2026-05-16 19:17:38 -04:00
Georges-Antoine Assi
756f354ecf Merge pull request #3383 from rommapp/fix-gunicorn-logs
fix(docker): generate gunicorn logging config to writable /tmp path
2026-05-16 18:20:19 -04:00
Georges-Antoine Assi
3f52ab616e fix(docker): generate gunicorn logging config to writable /tmp path
The init script ran `sed -i` against /etc/gunicorn/logging.conf, which
fails both on read-only root filesystems and when the container runs
as a non-root UID (since /etc/gunicorn is not chmod'd writable). Copy
the config to /tmp/gunicorn/logging.conf at startup and edit/use that
copy instead, leaving the image file untouched.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-16 18:14:59 -04:00
copilot-swe-agent[bot]
5c82044bdb fix: avoid safari chunk upload progress stalls
Agent-Logs-Url: https://github.com/rommapp/romm/sessions/41c15553-6e97-45ca-be3d-589c2f07589e

Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
2026-05-16 21:55:12 +00:00
copilot-swe-agent[bot]
67060d4635 Initial plan 2026-05-16 21:50:54 +00:00
Georges-Antoine Assi
9bafd11993 Merge pull request #3381 from DevYukine/feat/playmatch-multi-provider
feat(playmatch): add SteamGridDB, ScreenScraper, MobyGames & Launchbox hash support
2026-05-16 15:53:50 -04:00
Georges-Antoine Assi
c3c6829962 refactor(playmatch): use dict as single source of truth for provider tags
Replace the tuple+derived-dict pair with PLAYMATCH_TAG_TO_ATTR as the
canonical mapping. Rename enum members to UPPER_CASE, expand
PlaymatchRomMatch to cover all provider ids, and inline the fallback
match in place of the _empty_playmatch_rom_match helper.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-16 15:41:33 -04:00
Georges-Antoine Assi
06eac10134 Merge pull request #3368 from rommapp/copilot/fix-ra-hashes-missing-ids
fix: include games without achievements in RA hash cache
2026-05-16 09:13:20 -04:00
Georges-Antoine Assi
9eecb67f0f Merge pull request #3369 from gtronset/gt-relative-gamelist-assets
Fix `gamelist.xml` export to use relative media paths for local exports
2026-05-16 09:04:26 -04:00
Georges-Antoine Assi
e92dbf060d run fmt 2026-05-16 08:58:20 -04:00
Georges-Antoine Assi
6f6d4c70ab Add integration tests for export_platform_to_file asset copying
Cover the local-export flow end to end: redirect resource and library
base paths into a tmp_path sandbox, run export_platform_to_file, and
assert that media files land at <platform>/assets/<subdir>/<rom>.<ext>
and that gamelist.xml references them. A second test withholds source
files to verify that failed copies omit their tags from the XML while
other assets still export.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-16 08:54:04 -04:00
Georges-Antoine Assi
4f03cdf03d Copy gamelist media into a local assets/ folder
Mirror the pegasus exporter pattern: collect each ROM's media into a
canonical asset-kind dict, then either copy the files under
<platform>/assets/<subdir>/ for local exports or build absolute URLs
from request.base_url for remote exports. Exclude the generated assets/
directory from filesystem scans.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-16 08:15:41 -04:00
Yukine
f307aeaca3 refactor(playmatch): move PLAYMATCH_SUPPORTED_SOURCES into playmatch_handler 2026-05-16 05:41:22 +02:00
Yukine
820595a160 refactor(playmatch): simplify comments 2026-05-16 05:21:22 +02:00
Yukine
563e1f4e76 feat(scan): lift IGDB gate from Playmatch and forward provider ids to fetch funcs 2026-05-16 05:17:37 +02:00
Yukine
d9427573dc feat(playmatch): align with upstream MetadataProvider enum and return all provider ids 2026-05-16 05:17:17 +02:00
Georges-Antoine Assi
f4227cafaf Build absolute resource URLs and simplify traversal check
Use URLPath.make_absolute_url with request.base_url to build resource
URLs for non-local exports, and simplify the local-export traversal
check with Path.is_relative_to.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 22:22:09 -04:00
Georges-Antoine Assi
1b164ee81b Merge pull request #3380 from EntropyEngineer/feature-gamelist-comma-separated-attributes
Add comma-separated metadata attribute support to gamelist
2026-05-15 21:15:08 -04:00
Georges-Antoine Assi
e7045446a8 run fmt 2026-05-15 21:01:33 -04:00
Entropy Engineer
4999214a92 Add comma-separated metadata attribute support to gamelist
Add comma-separated metadata attribute support to gamelist
2026-05-16 00:41:09 +05:00
Georges-Antoine Assi
32cdfb1547 Merge pull request #3374 from rommapp/copilot/fix-file-id-issue-api-call
Fix stale disc file ID in localStorage causing 404 on ROM play after rescan
2026-05-14 20:29:07 -04:00
Georges-Antoine Assi
de44d5be64 Merge pull request #3373 from rommapp/copilot/feature-disable-console-button
Apply `DISABLE_EMULATOR_JS` to Console mode (disable Play + block direct player route)
2026-05-14 15:50:35 -04:00
Georges-Antoine Assi
5b02d6b377 run fmt 2026-05-14 15:44:42 -04:00
Georges-Antoine Assi
3db3dd4434 run fmt 2026-05-14 15:41:32 -04:00
copilot-swe-agent[bot]
4ee310b0da fix(console): honor DISABLE_EMULATOR_JS in console mode
Agent-Logs-Url: https://github.com/rommapp/romm/sessions/67bb960a-e5ec-4569-bdeb-d8c90028c004

Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
2026-05-14 18:40:25 +00:00
copilot-swe-agent[bot]
d1696cd047 Fix stale disc file_id causing 404 when playing ROMs after rescan
When a ROM is rescanned and its file IDs change, disc IDs stored in
localStorage become stale. This caused file_ids query params with invalid
IDs to be sent to /api/roms/{id}/content/{name}, resulting in 404 errors.

Validate the stored disc ID against the actual ROM files before use. If
stale, clear localStorage and fall back to the first available file.

Agent-Logs-Url: https://github.com/rommapp/romm/sessions/3579d577-13ff-4288-9a9c-909b6f891c9e

Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
2026-05-14 18:38:23 +00:00
copilot-swe-agent[bot]
df32c8a2d3 Initial plan 2026-05-14 18:30:37 +00:00
copilot-swe-agent[bot]
5ed8fae4fc Initial plan 2026-05-14 18:29:58 +00:00
Georges-Antoine Assi
c635ba5451 Merge pull request #3370 from rommapp/dependabot/uv/authlib-1.6.12
chore(deps): bump authlib from 1.6.9 to 1.6.12
2026-05-13 22:16:04 -04:00
dependabot[bot]
e6662e9968 chore(deps): bump authlib from 1.6.9 to 1.6.12
Bumps [authlib](https://github.com/authlib/authlib) from 1.6.9 to 1.6.12.
- [Release notes](https://github.com/authlib/authlib/releases)
- [Changelog](https://github.com/authlib/authlib/blob/1.6.12/docs/changelog.rst)
- [Commits](https://github.com/authlib/authlib/compare/v1.6.9...1.6.12)

---
updated-dependencies:
- dependency-name: authlib
  dependency-version: 1.6.12
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-14 00:22:55 +00:00
Gavin Tronset
4a2a4d6d38 PR feedback for tests and relpath validation 2026-05-13 15:23:54 -07:00
Gavin Tronset
b7a1dad960 Remove now-uneeded test and change import 2026-05-13 13:37:45 -07:00
Gavin Tronset
87f0cbd3de Fix YouTube URL and conditionally use relative 2026-05-13 13:37:45 -07:00
Gavin Tronset
17d5178586 Use relative paths for resources in gamelist exports 2026-05-13 13:37:45 -07:00
copilot-swe-agent[bot]
2c3335e8cf refactor: version RA hash cache and switch to O(1) hash-index format
Agent-Logs-Url: https://github.com/rommapp/romm/sessions/f7097cd9-6bf4-42df-a14d-ff23e423291f

Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
2026-05-13 18:01:20 +00:00
Georges-Antoine Assi
c6a2f56fad Merge pull request #3367 from rommapp/regional-provider-tags
Prefer ROM's own region tag for ScreenScraper and IGDB artwork
2026-05-13 11:19:53 -04:00
copilot-swe-agent[bot]
157f719297 fix: include games without achievements in ra_hashes.json
Agent-Logs-Url: https://github.com/rommapp/romm/sessions/d113d268-38fd-4564-892d-959fd5fddc68

Co-authored-by: gantoine <3247106+gantoine@users.noreply.github.com>
2026-05-13 15:17:47 +00:00
copilot-swe-agent[bot]
885747d085 Initial plan 2026-05-13 15:13:28 +00:00
Georges-Antoine Assi
8e009dffc0 render covers at their natural aspect ratio and drop the cover-style setting
Covers now use object-fit: contain inside a fixed slot, so each image
keeps its own aspect ratio (letterboxed where needed) instead of being
cropped to the platform's configured ratio. The slot itself still uses
a single default aspect ratio for grid stability, so cards don't reflow
as images load.

With per-platform aspect ratio no longer doing anything visible, remove
the Cover style picker from the platform info drawer and clean up dead
plumbing: galleryViewStore.getAspectRatio no longer reads
platform.aspect_ratio, platformId is dropped from Skeleton / SearchCover
/ MatchRom / showSearchCoverDialog, and the orphaned i18n keys
(cover-style, settings, old-squared-cases, old-horizontal-cases) are
stripped from all platform.json locale files.

Backend aspect_ratio column is left in place; no client sends it anymore.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 11:11:09 -04:00
Georges-Antoine Assi
c15038957a Merge pull request #3364 from rommapp/tolerate-forward-compat-config
Tolerate forward-compat values and malformed YAML in config loader
2026-05-13 10:22:26 -04:00