# Sync Database Module
`sync_db.rs` (839 lines) — SQLite persistence layer for Proton Drive sync metadata.
## Purpose
Tracks the state of every synced file so the app can:
- Resume sync after restart without re-scanning
- Detect conflicts between local and remote state
- Track retry counts for failed operations
- Map local files to their remote Proton Drive counterparts
## Schema
The database uses two main tables:
### `sync_roots`
Tracks sync folder registrations:
| Column | Type | Description |
|---|---|---|
| `id` | TEXT PK | Hash of root path |
| `root_path_hash` | TEXT | SHA-256 hash of root path |
| `remote_scope` | TEXT | `computers`, `my_files`, or `unmapped` |
| `created_at_ns` | INTEGER | Creation timestamp (nanoseconds) |
| `updated_at_ns` | INTEGER | Last update timestamp |
### `sync_items`
Per-file sync state:
| Column | Type | Description |
|---|---|---|
| `root_id` | TEXT FK | References `sync_roots.id` |
| `relative_path_hash` | TEXT | Hash of path relative to root |
| `local_kind` | TEXT | File or directory |
| `local_size` | INTEGER? | File size in bytes |
| `local_mtime_ns` | INTEGER? | Modification time (ns) |
| `content_hash` | TEXT? | SHA-256 of file content |
| `remote_volume_id_hash` | TEXT? | Proton volume ID (hashed) |
| `remote_share_id_hash` | TEXT? | Proton share ID (hashed) |
| `remote_link_id_hash` | TEXT? | Proton link ID (hashed) |
| `remote_parent_id_hash` | TEXT? | Parent folder ID (hashed) |
| `remote_revision_hash` | TEXT? | Latest revision hash |
| `state` | TEXT | One of: `synced`, `local_pending`, `remote_pending`, `conflict`, `tombstone` |
| `retry_count` | INTEGER | Consecutive failure count |
| `last_error_code` | TEXT? | Last error for diagnostics |
## Sync Item States
| State | Meaning |
|---|---|
| `synced` | Local and remote are identical |
| `local_pending` | Local change not yet uploaded |
| `remote_pending` | Remote change not yet applied locally |
| `conflict` | Both sides changed — needs resolution |
| `tombstone` | Deleted but record kept for tracking |
## Security
- All Proton Drive IDs are stored as **SHA-256 hashes**, never in plaintext
- The database file is created with 0600 permissions
- Schema version is tracked (`SCHEMA_VERSION = 3`) for migrations
- WAL journal mode and foreign keys are enabled on open