Skip to content

Add Linux/macOS support and cross-platform full-sync behavior#50

Draft
Mike-Solar wants to merge 18 commits into
cloudreve:mainfrom
Mike-Solar:feature/linux-and-macos-support
Draft

Add Linux/macOS support and cross-platform full-sync behavior#50
Mike-Solar wants to merge 18 commits into
cloudreve:mainfrom
Mike-Solar:feature/linux-and-macos-support

Conversation

@Mike-Solar

@Mike-Solar Mike-Solar commented Jun 6, 2026

Copy link
Copy Markdown

Summary

  • Add Linux and macOS support for the desktop sync client.
  • Use full sync on Linux/macOS instead of Windows-style on-demand placeholders.
  • Keep Windows Cloud Files / placeholder behavior intact.
  • Exclude Windows-only crates and examples from non-Windows builds.
  • Add Linux desktop notifications and non-Windows shell/UI fallbacks.
  • Add CI/CD workflows:
    • CI runs Linux checks/tests.
    • CD builds Linux packages.
  • Add Linux packaging support:
    • Debian package build.
    • RPM package build.
    • Arch Linux PKGBUILD.
  • Fix Linux runtime issues found during testing:
    • Avoid tauri-plugin-positioner panic when tray position or monitor info is unavailable.
    • Use a visible non-transparent background on non-Windows windows.
    • Set the Linux taskbar/window icon from src-tauri/icons.
    • Avoid GTK icon APIs from Tokio worker threads.
    • Keep popup open while using right-click conflict actions.
    • Fix packaged app startup so it does not try to connect to a missing localhost dev server.
  • Add conflict-resolution entry in the Cloudreve frontend for non-Windows platforms.
  • Add cross-platform support for binding a non-empty local folder to a remote drive:
    • Existing local-only content is uploaded through the normal sync plan.
    • Same-name local/remote files are compared with the hash exposed by the API when available.
    • Matching hashes are treated as already synced.
    • Different hashes, missing hashes, or hash calculation failures are recorded as pending conflicts.
  • Add translations for newly introduced UI strings across all supported languages.

Platform Behavior

  • Windows:
    • Keeps Cloud Files placeholder/on-demand behavior.
    • Also supports binding non-empty local folders and resolving same-name conflicts.
  • Linux:
    • Uses full sync only.
    • Supports desktop notifications and Linux packaging.
    • Supports conflict resolution from the frontend.
  • macOS:
    • Uses full sync only.
    • Shares the non-Windows sync fallback path.
    • Supports binding non-empty local folders.

Validation

  • Linux package build was verified manually during development.
  • Manually reviewed all the AI code.
  • I will take my dog food it on macOS and Linux for two weeks before submit to review.

@Mike-Solar

Copy link
Copy Markdown
Author

@HFO4

@Mike-Solar

Mike-Solar commented Jun 6, 2026

Copy link
Copy Markdown
Author

#4 and #21

- Make tauri-plugin-frame conditional on Windows only
- Add deep-link://new-url event listener for macOS OAuth callbacks
- Register cloudreve:// URL scheme via tauri.conf.json deep-link config
- Move initial sync to background so add_drive returns immediately
- Add HTTP request timeout to prevent indefinite hangs during sync
@Mike-Solar Mike-Solar force-pushed the feature/linux-and-macos-support branch from 10cbc2d to 9e1d4e0 Compare June 7, 2026 10:37
@krom

krom commented Jun 13, 2026

Copy link
Copy Markdown

@HFO4 I'm really looking forward to this feature. I bought the Pro Version, in part, to support the developer and add Linux and Android support. Please don't lose this PR.
@Mike-I can help with testing this functionality if you are interested.

- Avoid false conflicts by improving remote hash detection in metadata
  and comparing local/remote content before marking upload errors as conflicts.
- Remove unreliable primary_entity hash fallback; use size comparison when
  no content hash is available.
- Show conflict bulk resolution UI on all platforms (keep all remote / overwrite all remote).
- Clean up orphaned inventory metadata for drives no longer in config.
- Remove incorrect backend OAuth refresh_token grant to /session/oauth/token;
  Cloudreve V4 uses /session/token/refresh for all refresh tokens, including
  those obtained via OAuth. Keep OAuth client credentials only in the UI for
  the authorization_code exchange during login.
@Mike-Solar

Mike-Solar commented Jun 13, 2026

Copy link
Copy Markdown
Author

@krom I'm happy if you can test it. All in all, cloud storage app's stablity means data safety.

@Mike-Solar

Copy link
Copy Markdown
Author

Also solved this: #16

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.

2 participants