Add cloud backup, auto backup on game close, and bulk title export #4

Merged
stamatisd merged 0 commits from cloud-save-backup into main 2026-06-10 19:43:01 -05:00
stamatisd commented 2026-06-10 18:29:37 -05:00 (Migrated from git.etawen.dev)

Summary

Adds cloud backup support to Garlic SaveMgr with FTP and Google Drive (browser OAuth), automatic backup when a watched game closes, title-level bulk export/backup in the web UI, and README docs including a local Docker FTP testing guide.

What's included

  • Cloud backup (FTP) — manual backup per save or per title; passive-mode NAT fix, connect timeout, non-blocking uploads so the UI stays responsive; Test FTP in Settings
  • Google Drive (browser mode) — OAuth2 client ID/secret/refresh token; service account kept for Shared Drives; queue for auto backups when the browser is open
  • Auto backup — watches configured title IDs; backs up after game close + configurable settle delay (LNC-based detection)
  • Bulk actions — select titles in the save list; queue Decrypted / Encrypted / Cloud (one zip per title, same as Export All / Cloud Backup All)
  • Docs — cloud.json reference, API endpoints, Windows + Docker local FTP setup for testing

How to test

  1. Build and run the payload; open http://<ps5-ip>:8082
  2. FTP: follow README “Quick Setup: Local FTP Server”; configure Settings → Test FTP → Cloud Backup All on a title
  3. Bulk: check a few titles → Decrypted / Encrypted / Cloud; confirm one zip per title, not per save slot
  4. Auto backup: add a title to watch_titles, play and close the game; confirm upload after settle period
  5. Drive (optional): Browser OAuth in Settings → Test Drive Access → Cloud backup

Notes

  • Links -lSceNet in Makefile for FTP
  • *.zip added to .gitignore
  • Google Drive direct/HTTPS upload from PS5 remains disabled (SDK limitation); browser mode handles uploads from the PC
## Summary Adds cloud backup support to Garlic SaveMgr with FTP and Google Drive (browser OAuth), automatic backup when a watched game closes, title-level bulk export/backup in the web UI, and README docs including a local Docker FTP testing guide. ## What's included - **Cloud backup (FTP)** — manual backup per save or per title; passive-mode NAT fix, connect timeout, non-blocking uploads so the UI stays responsive; Test FTP in Settings - **Google Drive (browser mode)** — OAuth2 client ID/secret/refresh token; service account kept for Shared Drives; queue for auto backups when the browser is open - **Auto backup** — watches configured title IDs; backs up after game close + configurable settle delay (LNC-based detection) - **Bulk actions** — select titles in the save list; queue Decrypted / Encrypted / Cloud (one zip per title, same as Export All / Cloud Backup All) - **Docs** — `cloud.json` reference, API endpoints, Windows + Docker local FTP setup for testing ## How to test 1. Build and run the payload; open `http://<ps5-ip>:8082` 2. **FTP:** follow README “Quick Setup: Local FTP Server”; configure Settings → Test FTP → Cloud Backup All on a title 3. **Bulk:** check a few titles → Decrypted / Encrypted / Cloud; confirm one zip per title, not per save slot 4. **Auto backup:** add a title to `watch_titles`, play and close the game; confirm upload after settle period 5. **Drive (optional):** Browser OAuth in Settings → Test Drive Access → Cloud backup ## Notes - Links `-lSceNet` in Makefile for FTP - `*.zip` added to `.gitignore` - Google Drive direct/HTTPS upload from PS5 remains disabled (SDK limitation); browser mode handles uploads from the PC
earthonion commented 2026-06-10 19:40:47 -05:00 (Migrated from git.etawen.dev)

Thanks for this — going to merge. One thing we hit during testing worth flagging: configured an FTP password containing a ! in Settings, and the wire showed the client sending the password truncated at the ! (e.g. foobar!baz arrived as foobar) — server returned 530 Login incorrect. Worked fine after switching to a password with no special characters. Could be the JSON load/save round-trip stripping it, the Settings form input, or shell-style history expansion somewhere in the chain — worth a quick look so users with ! (or other shell metachars) in their passwords don't get silent auth failures. Not blocking the merge.

Thanks for this — going to merge. One thing we hit during testing worth flagging: configured an FTP password containing a `!` in Settings, and the wire showed the client sending the password truncated at the `!` (e.g. `foobar!baz` arrived as `foobar`) — server returned 530 Login incorrect. Worked fine after switching to a password with no special characters. Could be the JSON load/save round-trip stripping it, the Settings form input, or shell-style history expansion somewhere in the chain — worth a quick look so users with `!` (or other shell metachars) in their passwords don't get silent auth failures. Not blocking the merge.
Sign in to join this conversation.
No reviewers
No labels
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
git-etawen-dev-earthonion/garlic-savemgr!4
No description provided.