Skip to content

Fix GOG cloud save fetch failure handling - #1

Closed
kiequoo wants to merge 10 commits into
masterfrom
feat/cloud-saves-gog-fixes
Closed

Fix GOG cloud save fetch failure handling#1
kiequoo wants to merge 10 commits into
masterfrom
feat/cloud-saves-gog-fixes

Conversation

@kiequoo

@kiequoo kiequoo commented Apr 13, 2026

Copy link
Copy Markdown
Owner

Summary

This PR fixes two bugs in GOG cloud save sync and one related support issue in save-location resolution.

Before this change, getCloudFiles() treated request or parse failures the same as a valid empty cloud result. That could make sync logic believe the cloud was empty and incorrectly choose an upload path. It also parsed GOG last_modified timestamps with Instant.parse(...), which does not handle the offset-based format GOG returns, so remote timestamps could be dropped during sync decisions.

It also stops fabricating a default GOG cloud-save path when the remote config API returns no save locations. In that case, the game should be treated as not supporting cloud saves rather than showing a misleading fallback path with no usable credentials.

Changes

  • Return null from GOG cloud file listing on HTTP or parse failure instead of emptyList()
  • Abort sync when cloud file listing fails instead of treating the failure as cloud is empty
  • Parse GOG cloud timestamps with OffsetDateTime.parse(...).toInstant()
  • Stop falling back to a fake default cloud-save location when the API reports no save locations
  • Add regression tests covering offset timestamp parsing and failure-vs-empty cloud responses

Testing

  • ./gradlew :app:compileDebugKotlin
  • ./gradlew :app:testDebugUnitTest --tests app.gamenative.service.gog.GOGCloudSavesManagerTest

unbelievableflavour and others added 10 commits April 13, 2026 17:37
DownloadService caches directory listings for 5s. After deleteApp,
the cache still holds the deleted directory, so the subsequent
LibraryInstallStatusChanged refresh sees stale data. Invalidate
the cache after deletion so the next scan picks up the change.
…tkarshdalal#1191)

* fix: correct steam game dlc licensing logic and enhance dlc display in content

Cross-references resolved depots with owned DLC package information to ensure depots are attributed to the correct DLC app ID. This ensures accurate DLC identification for titles like Don't Starve, Halo MCC, and Cyberpunk 2077.

* refactor getMainAppDepots to calculate the logic to be used in getDownloadableDepots
…dalal#918)

Also use state.isSteamConnected (Compose-observable StateFlow) instead
of SteamService.isConnected (static boolean invisible to recomposition)
for banner visibility.
* fix: case-insensitive .exe filter in getWindowsLaunchInfos

* removed bug around appLaunchInfo null opening wfm.exe

* fixed build

* addressed coderabbit

* more coderabbit

---------

Co-authored-by: Dan Brooke <mail@danbrooke.net>
Co-authored-by: Utkarsh Dalal <utkarsh.dalal@toptal.com>
…s to steamcloud (utkarshdalal#1100)

* migrate GSE Saves to steam userdata, always upload userdata files to steam cloud

fix tests

* move migrateGSESavesToSteamUserdata just before beginLaunchApp

* also migrateGSESavesToSteamUserdata just before forceSyncUserFiles

* also migrateGSESavesToSteamUserdata in SteamUtils ensureSteamSettings

* use Files.move for migrating files

* check dir empty to exit earlier, update logging

* preserve file attributes like timestamp and permission during migration
* Add reusable ini game fix for Imperivm

* Avoid rereading ini fixes after migration

* Remove ini migration marker tracking
@kiequoo kiequoo closed this Apr 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants