mirror of
https://github.com/rommapp/romm.git
synced 2026-06-28 23:06:11 +00:00
feat(fs): hardlink import/export assets when possible, harden sync init
Importer (gamelist/launchbox file:// flows) and exporters (gamelist.xml, metadata.pegasus.txt local exports) now hardlink media assets when source and destination share a filesystem, falling back transparently to a copy on EXDEV / EPERM / EOPNOTSUPP / EMLINK / EACCES (cross-device, FAT32, exFAT, network mounts, etc.). Saves disk space and is effectively instantaneous on large files (videos, manuals, miximages). Covers keep a real copy (allow_link=False) because _store_cover resizes the small cover in place via PIL.Image.save, which would truncate the shared inode and corrupt the user's source image. Also makes FSSyncHandler tolerate a missing/unwritable /romm/sync at startup: an OSError from mkdir now logs a warning instead of crashing the whole app at module-import time. Sync calls still fail at use time if the mount remains broken — the right place to surface the error. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -12,7 +12,7 @@ class FSSyncHandler(FSHandler):
|
||||
"""Filesystem handler for sync folder operations (File Transfer mode)."""
|
||||
|
||||
def __init__(self) -> None:
|
||||
super().__init__(base_path=SYNC_BASE_PATH)
|
||||
super().__init__(base_path=SYNC_BASE_PATH, tolerate_missing_base=True)
|
||||
|
||||
def build_incoming_path(
|
||||
self, device_id: str, platform_slug: str | None = None
|
||||
|
||||
Reference in New Issue
Block a user