Replaces the static sync icon with a live status widget in the email list app bar:
- **Syncing**: animated `CircularProgressIndicator` replaces the sync icon while a sync cycle is running; tap is disabled to prevent double-sync
- **Error**: red `sync_problem` icon when `syncLastErrorProvider` reports a failure
- **Idle**: regular `sync` icon (tapping triggers a manual sync as before)
## Changes
**`lib/core/sync/account_sync_manager.dart`**
- Added `_syncPhaseCtrl` broadcast `StreamController<(String, bool)>`
- `watchSyncing(accountId)` exposes a filtered `Stream<bool>` per account
- Both `_AccountSync` and `_JmapAccountSync` now accept `onSyncStart`/`onSyncEnd` VoidCallback parameters and fire them at the top of each loop iteration
**`lib/di.dart`**
- Added `isSyncingProvider` — `StreamProvider.autoDispose.family<bool, String>` backed by `AccountSyncManager.watchSyncing`
**`lib/ui/screens/email_list_screen.dart`**
- Extracted `_buildSyncButton` that watches both `isSyncingProvider` and `syncLastErrorProvider` to derive the icon state
🤖 Generated with [Claude Code](https://claude.com/claude-code)
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.
Replaces the static sync icon with a live status widget in the email list app bar:
CircularProgressIndicatorreplaces the sync icon while a sync cycle is running; tap is disabled to prevent double-syncsync_problemicon whensyncLastErrorProviderreports a failuresyncicon (tapping triggers a manual sync as before)Changes
lib/core/sync/account_sync_manager.dart_syncPhaseCtrlbroadcastStreamController<(String, bool)>watchSyncing(accountId)exposes a filteredStream<bool>per account_AccountSyncand_JmapAccountSyncnow acceptonSyncStart/onSyncEndVoidCallback parameters and fire them at the top of each loop iterationlib/di.dartisSyncingProvider—StreamProvider.autoDispose.family<bool, String>backed byAccountSyncManager.watchSyncinglib/ui/screens/email_list_screen.dart_buildSyncButtonthat watches bothisSyncingProviderandsyncLastErrorProviderto derive the icon state🤖 Generated with Claude Code