The flag was only set during local scan. Downloads for directory save
platforms (PSP) need the flag set to trigger unzip instead of writing
a raw file.
Parse the PARAM.SFO binary file inside each PPSSPP save directory to
extract the game title directly. This eliminates the need for the 339KB
embedded GameDB since the save metadata is already on the device. Tested
with Bust A Move Deluxe and Field Commander SFO files.
Save folders like ULUS10088010000 have the save slot appended directly
without a separator. Try the 9-char Game ID prefix (standard format:
4 letters + 5 digits) in addition to underscore splitting.
Add support for PPSSPP directory-based saves. The scan detects save
folders by Game ID, resolves titles via the embedded PSP GameDB, and
matches against the ROM cache by name. Uploads zip the directory,
downloads extract it. Adds GetRomByNameLookup to the cache layer and
ZipDirectory/UnzipToDirectory helpers.
Embed a slim 339KB mapping of 7,902 PSP serial numbers to game titles
from niemasd/GameDB-PSP. LookupPSPTitle resolves PPSSPP save folder
names (e.g., UCUS98662_GameData0) to game titles (LocoRoco) by
stripping suffixes and normalizing dashes.
PPSSPP stores saves as Game ID folders (e.g., UCUS98662_GameData0/)
rather than flat files. This registry identifies platforms that need
directory zipping for upload and Game ID resolution for ROM matching.
- Add concurrent fetching (8 workers) for FetchRemoteSaves and DiscoverRemoteSaves
- Guard against empty emulator string on upload
- Add backup retention setting (5/10/15/No Limit) with cleanup logic
- Show last synced relative time in sync menu
- Add health check before starting save sync
- Remove unused API methods (TrackSave, UntrackSave, GetSaveIdentifiers)
- Remove dead ScreenSaveConflict router registration
- Set with_filter_values and with_char_index to false on ROM queries
- Add missing i18n keys to all locale files
Previously, FetchRemoteSaves and DiscoverRemoteSaves silently
continued on HTTP failures, causing local saves to appear as
new uploads and potentially overwriting newer remote data.
Now errors are propagated and the UI shows a connection error
instead of proceeding with a misleading sync.
Closes#144
This will allow for duplicate roms on a local device (e.g. Pokemon Red.gb and Pokemon Red Nuzlocke.gb) and for the saves to be synced and managed separately