feat: combined inbox as the default startup view (#376) #379

Merged
guettlibot merged 5 commits from issue-376-combined-inbox into main 2026-06-04 00:47:01 +00:00
guettlibot commented 2026-06-03 22:01:13 +00:00 (Migrated from codeberg.org)

Summary

  • Adds a Combined Inbox screen that shows threads from the INBOX mailbox of every configured account, sorted by latest message date
  • On startup the app navigates to /inbox (the combined inbox) instead of the accounts list
  • If no accounts exist yet, the screen immediately redirects to /accounts so the user can add one

Implementation details

  • EmailRepository.observeAllInboxThreads() — new stream method that JOINs the threads table with mailboxes on role = 'inbox'
  • allAccountsProvider — new StreamProvider<List<Account>> in di.dart
  • CombinedInboxScreen — thread list with swipe-to-archive/delete, pull-to-refresh, load-more pagination, account name badge per thread (when multiple accounts), FAB to compose, and a drawer for per-account mailbox navigation
  • router.dart/inbox route added; initialLocation changed from /accounts to /inbox
  • All test fakes and generated mocks updated to implement the new abstract method

Closes #376

## Summary - Adds a **Combined Inbox** screen that shows threads from the INBOX mailbox of every configured account, sorted by latest message date - On startup the app navigates to `/inbox` (the combined inbox) instead of the accounts list - If no accounts exist yet, the screen immediately redirects to `/accounts` so the user can add one ## Implementation details - `EmailRepository.observeAllInboxThreads()` — new stream method that JOINs the `threads` table with `mailboxes` on `role = 'inbox'` - `allAccountsProvider` — new `StreamProvider<List<Account>>` in `di.dart` - `CombinedInboxScreen` — thread list with swipe-to-archive/delete, pull-to-refresh, load-more pagination, account name badge per thread (when multiple accounts), FAB to compose, and a drawer for per-account mailbox navigation - `router.dart` — `/inbox` route added; `initialLocation` changed from `/accounts` to `/inbox` - All test fakes and generated mocks updated to implement the new abstract method Closes #376
Sign in to join this conversation.