Two-way sync of the vault folder to a user-configured WebDAV server,
so annotations (which travel with the file) sync with the file.
- WebDavSyncService.syncNow: per-file decision — local-only uploads,
remote-only downloads, and when BOTH sides changed since the last
sync it keeps the loser as <file>.conflict-<mtime> on both sides
(last-write-wins by mtime) so no data is ever lost. Creates dirs as
needed; deletes are conservative.
- The decision logic is pure and unit-tested against a fake WebDAV
client; the real client is a thin http adapter (no dio dependency).
- Settings: WebDAV URL / user / password / remote folder, Test
connection, Sync now (with status + last-synced), and an auto-sync
toggle (default OFF).
Real server round-trips are device/server-validated. Credentials are in
SharedPreferences for now (TODO secure-storage). analyze clean, 432 tests.