github Selectively11/CloudRedirect v1.0.5-test
CloudRedirect v1.5.0 — AutoCloud Test (Issues #1 and #2 fix test!)

latest releases: v2.1.8, v2.1.7, v2.1.6...
pre-releaseone month ago

THIS BUILD IS INTENDED FOR A SPECIFC SET OF USERS WHO OPENED AN ISSUE. This isn't meant for everyone to test! It has huge changes compared to the last version and needs to be played with a lot more before I would be comfortable pushing it as an update. This is not an auto-update! This is not the latest release! Don't run me!

Now, for what's new:

AutoCloud handling improvements (new) — fixes Issue #1 and #3

v1.0.5 only uploaded files Steam wrote after CloudRedirect was installed for the first time. This was a design decision to deal with SteamTools 760 nonsense while achieving a result that was better than what existed before (SteamTools itself did the same thing) while avoiding painful work. Anyway, the painful work is done:

This release implements AutoCloud bootstrap! On the first cloud-touching RPC for an app (changelist, launch intent, batch begin), CloudRedirect now scans the game's local user files according to the app's installscript autocloud rules (we parse and enforce those now, just like Steam normally does!) and imports every matching pre-existing file into the cloud cache.

  • Reads the game's <autocloud> rules (root, path, pattern, platform, recursive) from installscript.vdf.

  • Wanders around the resolved roots with platform/exclude filters, applies the canonical %Token% prefix per file, and skips files that already exist as cloud blobs or have a delete tombstone.

  • Integrity checks that mirror real Steam Cloud to prevent data loss in scenarios involving stale data

  • For testing, there is behavior to deal with apps that have 760 garbage in their userdata folder. That data will not be uploaded and is treated as a failure scenario.

Tombstones (new)

This release introduces a per-app tombstone log:

  • Deletes are recorded with a timestamp and persist across restarts.

  • Tombstones suppress AutoCloud bootstrap from re-importing a file the user actually deleted.

  • Lots of handling to prevent edge cases

Steam in-memory state restoration (new) — Play Time, Last Played, Achievements

v1.0.5 wrote playtime/Last Played/achievements to disk but did not push them back into Steam's running process state. Steam would reconcile on its own clock and overwrite the disk values from stale in-memory state, effectively losing the data.

Basically, I slapped together playtime/achievement syncing by popular demand. I did not and do not consider that data to be 'critical'. I am very cautious with game save data, that stuff is important. If I do something wrong with achievement/playtime syncing, the user does not lose anything on the same level of a game save.

Playtime/Achievement syncing remains experimental. It's off by default and is optional. It should be working better now, but needs testing

This release adds in-process restoration of data as part of my never ending effort to more closely mirror real Steam Cloud behavior:

  • On Steam startup, after the SteamID/account is captured, CloudRedirect pulls metadata for every known app from the cloud and writes playtime, Last Played, and achievement records directly into the live steamclient64.dll user struct (via resolved RVAs GetAppMinutesPlayedData, FlushAppMinutesPlayed, SetAppLastPlayedTime). The result of this is that the UI in Steam looks all pretty.

But it can still fall back to enumerating apps in the local cache if the cloud provider returns zero apps (cold start, auth still warming up). Nothing was lost in terms of functionality, just trying to handle edge cases involving users who use multiple PCs and switch back and forth. Previously, this would cause a Steam Cloud conflict resolution dialog (as the local data is out of sync with the cloud data - they played on their other PC and switched back to PC #1, now the cache is out of date) and required manual intervention. The new behavior is closer to actual Steam Cloud behavior, with conflict resolution prompts appearing for real Steam Cloud behaviors that need resolution versus appearing for those cases as well as stuff tied to the local caching solution.

Multi-account isolation

Token tracking (g_appRootTokens, g_fileTokens) and HTTP blob storage were keyed by app ID alone in v1.0.5. Two Steam accounts on the same machine redirecting the same app would collide silently — the second account's file-token map would clobber the first's, breaking the changelist for whichever account logged in second. All of these are now keyed by (accountId, appId). This never caused data loss! But it was stupid and would cause Steam Cloud Conflict Resolution dialogs in an edge case involving a user who rapidly switches back and forth between Steam Accounts to hurt my soul or whatever the reason. Oops.

Miscellaneous

Did a bunch of drudgery to support scenarios where a user has non-ASCII characters in their paths. I hate Windows.

The updater now skips releases marked pre-release or draft on GitHub, and skips tags ending in -test, -pre, -rc, -beta, -alpha. Preparing for release, an end of every build being a Public Test Build.

And finally,

Issue #2 — "Restart Steam" button issues in GUI component when Steam is not running

Fixed!

Don't miss a new CloudRedirect release

NewReleases is sending notifications on new releases.