feat(sync): wire TUI account orchestration, SyncProvider integration, and Ctrl+S keybinding

- MicrosoftAccountSyncProvider: implements SyncProvider interface with
  connect_account(), sync_account(), disconnect_account(), provider_id()
- TuiApp: inherits SyncObserver, implements thread-safe sync progress
  rendering, background sync thread, and Action::sync dispatch
- CLI: add "account disconnect <id>" and "account list" commands
- Main wiring: initialize sync infrastructure when connected accounts
  exist and a valid client ID is configured
- Screen: add sync_stage and sync_is_error fields to ScreenState,
  map Ctrl+S to Action::sync keybinding
- Fix ScreenState aggregate initializers in all construction sites
- Tests: new microsoft_sync_provider_tests.cpp, all 22 tests pass
This commit is contained in:
2026-07-22 21:49:26 +01:00
parent 74c798e7aa
commit 725e48569e
10 changed files with 1257 additions and 5 deletions

View File

@@ -118,6 +118,8 @@ void test_full_month_render()
.search_result_index = 0,
.notification = {},
.notification_is_error = false,
.sync_stage = {},
.sync_is_error = false,
.show_calendar_picker = false,
.calendar_index = 0,
.show_agenda = false,
@@ -178,6 +180,8 @@ void test_compact_and_input()
.search_result_index = 0,
.notification = {},
.notification_is_error = false,
.sync_stage = {},
.sync_is_error = false,
.show_calendar_picker = false,
.calendar_index = 0,
.show_agenda = false,