Adds a user-facing escape hatch for when the local DB falls out of sync with the server.
Changes:
EmailRepository.clearForResync() / MailboxRepository.clearForResync() — new interface methods that truncate local emails, mailboxes, pending changes, and sync-state checkpoints. EmailBodies are preserved (FK temporarily disabled) so previously-downloaded content survives the reset.
AccountSyncManager.forceResync() — stops the existing loop, calls both clear methods, then rebuilds and restarts the loop.
Edit account screen: "Force full sync" button (with confirmation dialog) triggers the above; spinner shown while running.
Adds a user-facing escape hatch for when the local DB falls out of sync with the server.
**Changes:**
- `EmailRepository.clearForResync()` / `MailboxRepository.clearForResync()` — new interface methods that truncate local emails, mailboxes, pending changes, and sync-state checkpoints. EmailBodies are preserved (FK temporarily disabled) so previously-downloaded content survives the reset.
- `AccountSyncManager.forceResync()` — stops the existing loop, calls both clear methods, then rebuilds and restarts the loop.
- Edit account screen: "Force full sync" button (with confirmation dialog) triggers the above; spinner shown while running.
Closes part of #19
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Adds a user-facing escape hatch for when the local DB falls out of sync with the server.
Changes:
EmailRepository.clearForResync()/MailboxRepository.clearForResync()— new interface methods that truncate local emails, mailboxes, pending changes, and sync-state checkpoints. EmailBodies are preserved (FK temporarily disabled) so previously-downloaded content survives the reset.AccountSyncManager.forceResync()— stops the existing loop, calls both clear methods, then rebuilds and restarts the loop.Closes part of #19