Live Sync Module

live_sync.rs (905 lines) — bidirectional file synchronization between a local folder and Proton Drive.

Architecture: Bidirectional Sync

graph TB
    subgraph "Local"
        FS[Filesystem
Sync Folder] WATCHER[notify Watcher
inotify/kqueue] end subgraph "Remote" PROTON[Proton Drive API] end subgraph "LiveSyncManager" EVENTS[Local Events] POLLER[Remote Poller
30s interval] SUPPRESS[Suppression Cache
30s TTL] BRIDGE[Sync Bridge
Tauri IPC] end FS --> WATCHER WATCHER --> EVENTS EVENTS --> SUPPRESS SUPPRESS --> BRIDGE BRIDGE --> PROTON PROTON --> POLLER POLLER --> SUPPRESS SDB[(sync_db.rs
SQLite)] EVENTS --> SDB POLLER --> SDB

How It Works

Local → Remote

  1. notify::RecommendedWatcher monitors the sync folder for filesystem events (create, modify, delete)
  2. Events are deduplicated via a suppression cache with a 30-second TTL (max 4096 entries)
  3. Changes are serialized as LiveSyncEvent and emitted to the WebView frontend via Tauri IPC
  4. The frontend uploads changed files through Proton’s API

Remote → Local

  1. A background poller thread runs at a configurable interval (default: 30 seconds)
  2. Polls the Proton API for remote changes via RemoteSyncChange structs
  3. RemoteSyncChange contains: relative_path, action (string), and optional content_base64
  4. Remote changes are applied to the local filesystem

Sync Database Integration

Every change (local or remote) updates the sync_db SQLite database. On restart, the sync manager reads persisted state from sync_db to resume without re-scanning.

Key Structures

Struct Purpose
LiveSyncManager Core manager: watcher, poller, worker threads, known-files cache
LiveSyncEvent Serialized event emitted to WebView: kind, paths, root_path, source
LiveSyncStatus Status snapshot: enabled, folder_path, poll_interval_seconds
RemoteSyncChange Incoming remote change: relative_path, action, content_base64

Suppression Logic

The suppression cache prevents echo loops: when remote changes are applied to disk, the local watcher would detect them as “new” changes. The 30-second TTL suppression window catches these echoes before they loop back to the server.

ProtonDrive Linux — not affiliated with Proton AG. GitHub