Skip to main content

max / goingson

fix(mobile): register all commands on iOS via shared all_commands! macro The desktop entrypoint (main.rs) registered 207 commands; the mobile entrypoint (lib.rs build_mobile_app) registered only 193. The 14 desktop-only commands -- bulk_delete_contacts, bulk_delete_events, bulk_tag_contacts, get_daily_note, get_preferences, get_task_overview, list_emails_for_contact, list_events_between, list_events_for_contact, list_tasks_for_contact, promote_contact, set_update_check_on_launch, upsert_daily_note, validate_email_addresses -- are all invoked from api.js and rejected at runtime with "command not found" on iOS, breaking daily notes, preferences (incl. update-check toggle), the contact dashboard, task overview, and event bulk-delete/date-range. Root cause is two hand-maintained generate_handler! lists that drifted. Replace both with a single #[macro_export] all_commands! macro that is the sole registration list, so the desktop and mobile handler sets cannot diverge: omitting a command from one platform is now impossible, and adding a #[tauri::command] without registering it is a build error. Paths use $crate::commands::* so the macro resolves from both the lib crate (mobile) and the goingson_desktop consumer crate (desktop). Fixes UF-2 (CRITICAL) and the handler half of CHRONIC-C from ultra-fuzz Run #26. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-06-15 22:48 UTC
Commit: a8217d3b7d6d201fb5c778bbe26fc13d6b9803db
Parent: 1b2af31
2 files changed, +258 insertions, -435 deletions
M src-tauri/src/lib.rs +257 -195
@@ -27,6 +27,262 @@ pub mod notifications;
27 27 #[cfg(test)]
28 28 pub mod test_utils;
29 29
30 + /// The single source of truth for the Tauri command registration list.
31 + ///
32 + /// Both the desktop entry point (`main.rs`) and the mobile entry point
33 + /// (`build_mobile_app` below) expand this macro, so the desktop and mobile
34 + /// handler lists cannot drift: adding a `#[tauri::command]` and forgetting to
35 + /// register it here is a build error, and omitting a command from one platform
36 + /// is impossible because there is only one list. Paths are written as
37 + /// `$crate::commands::*` so the macro resolves correctly whether it is invoked
38 + /// from inside this crate (mobile) or from the `goingson_desktop` consumer crate
39 + /// (the desktop binary).
40 + #[macro_export]
41 + macro_rules! all_commands {
42 + () => {
43 + ::tauri::generate_handler![
44 + // Attachments
45 + $crate::commands::add_attachment,
46 + $crate::commands::list_attachments,
47 + $crate::commands::delete_attachment,
48 + $crate::commands::open_attachment,
49 + $crate::commands::save_attachment,
50 + $crate::commands::convert_email_attachments,
51 + $crate::commands::open_email_blob,
52 + $crate::commands::save_email_blob,
53 + $crate::commands::get_file_size,
54 + // Projects
55 + $crate::commands::list_projects,
56 + $crate::commands::get_project,
57 + $crate::commands::create_project,
58 + $crate::commands::update_project,
59 + $crate::commands::delete_project,
60 + // Tasks
61 + $crate::commands::list_tasks,
62 + $crate::commands::list_tasks_filtered,
63 + $crate::commands::get_task,
64 + $crate::commands::create_task,
65 + $crate::commands::quick_add_task,
66 + $crate::commands::update_task,
67 + $crate::commands::delete_task,
68 + $crate::commands::start_task,
69 + $crate::commands::complete_task,
70 + $crate::commands::list_snoozed_tasks,
71 + $crate::commands::snooze_task,
72 + $crate::commands::unsnooze_task,
73 + $crate::commands::list_waiting_tasks,
74 + $crate::commands::mark_task_waiting,
75 + $crate::commands::clear_task_waiting,
76 + // Task Overview
77 + $crate::commands::get_task_overview,
78 + // Annotations
79 + $crate::commands::list_annotations,
80 + $crate::commands::add_annotation,
81 + $crate::commands::delete_annotation,
82 + // Subtasks
83 + $crate::commands::list_subtasks,
84 + $crate::commands::add_subtask,
85 + $crate::commands::add_subtask_link,
86 + $crate::commands::toggle_subtask,
87 + $crate::commands::update_subtask,
88 + $crate::commands::delete_subtask,
89 + // Milestones
90 + $crate::commands::list_milestones,
91 + $crate::commands::create_milestone,
92 + $crate::commands::update_milestone,
93 + $crate::commands::delete_milestone,
94 + $crate::commands::reorder_milestones,
95 + // Events
96 + $crate::commands::list_events,
97 + $crate::commands::get_event,
98 + $crate::commands::create_event,
99 + $crate::commands::update_event,
100 + $crate::commands::delete_event,
101 + $crate::commands::bulk_delete_events,
102 + $crate::commands::list_events_between,
103 + $crate::commands::list_upcoming_events,
104 + $crate::commands::get_event_status_indicator,
105 + $crate::commands::list_snoozed_events,
106 + $crate::commands::snooze_event,
107 + $crate::commands::unsnooze_event,
108 + // Emails
109 + $crate::commands::list_emails,
110 + $crate::commands::list_emails_threaded,
111 + $crate::commands::get_email,
112 + $crate::commands::open_email_in_browser,
113 + $crate::commands::create_email,
114 + $crate::commands::send_email,
115 + $crate::commands::save_email_draft,
116 + $crate::commands::list_email_drafts,
117 + $crate::commands::send_email_draft,
118 + $crate::commands::set_email_labels,
119 + $crate::commands::list_email_folders,
120 + $crate::commands::list_email_labels,
121 + $crate::commands::move_email_to_folder,
122 + $crate::commands::delete_email,
123 + $crate::commands::mark_email_read,
124 + $crate::commands::mark_email_unread,
125 + $crate::commands::archive_email,
126 + $crate::commands::unarchive_email,
127 + $crate::commands::mark_all_emails_read,
128 + $crate::commands::link_email_to_project,
129 + $crate::commands::get_unread_email_count,
130 + $crate::commands::list_snoozed_emails,
131 + $crate::commands::snooze_email,
132 + $crate::commands::unsnooze_email,
133 + $crate::commands::list_waiting_emails,
134 + $crate::commands::mark_email_waiting,
135 + $crate::commands::clear_email_waiting,
136 + // Contacts
137 + $crate::commands::list_contacts,
138 + $crate::commands::get_contact,
139 + $crate::commands::create_contact,
140 + $crate::commands::update_contact,
141 + $crate::commands::delete_contact,
142 + $crate::commands::add_contact_email,
143 + $crate::commands::remove_contact_email,
144 + $crate::commands::add_contact_phone,
145 + $crate::commands::remove_contact_phone,
146 + $crate::commands::add_contact_social_handle,
147 + $crate::commands::remove_contact_social_handle,
148 + $crate::commands::add_contact_custom_field,
149 + $crate::commands::remove_contact_custom_field,
150 + $crate::commands::update_contact_email,
151 + $crate::commands::update_contact_phone,
152 + $crate::commands::update_contact_social_handle,
153 + $crate::commands::update_contact_custom_field,
154 + $crate::commands::find_contact_by_email,
155 + $crate::commands::validate_email_addresses,
156 + $crate::commands::promote_contact,
157 + $crate::commands::list_tasks_for_contact,
158 + $crate::commands::list_events_for_contact,
159 + $crate::commands::list_emails_for_contact,
160 + $crate::commands::list_contacts_filtered,
161 + $crate::commands::bulk_delete_contacts,
162 + $crate::commands::bulk_tag_contacts,
163 + // Snooze Options
164 + $crate::commands::get_snooze_options,
165 + // Email Accounts
166 + $crate::commands::list_email_accounts,
167 + $crate::commands::get_email_account,
168 + $crate::commands::create_email_account,
169 + $crate::commands::update_email_account,
170 + $crate::commands::update_email_sync_interval,
171 + $crate::commands::update_email_signature,
172 + $crate::commands::update_email_notify,
173 + $crate::commands::delete_email_account,
174 + $crate::commands::test_email_account,
175 + $crate::commands::sync_email_account,
176 + // Project Dashboard
177 + $crate::commands::list_tasks_for_project,
178 + $crate::commands::list_events_for_project,
179 + $crate::commands::list_emails_for_project,
180 + $crate::commands::list_unlinked_emails,
181 + // Email Threading
182 + $crate::commands::list_emails_by_thread,
183 + // Stats
184 + $crate::commands::get_dashboard_stats,
185 + // App info
186 + $crate::commands::get_changelog,
187 + // Window
188 + $crate::commands::open_compose_window,
189 + $crate::commands::set_window_title,
190 + // Search
191 + $crate::commands::search,
192 + // Daily Notes
193 + $crate::commands::get_daily_note,
194 + $crate::commands::upsert_daily_note,
195 + // Day Planning
196 + $crate::commands::get_day_planning,
197 + $crate::commands::schedule_task,
198 + $crate::commands::unschedule_task,
199 + // Saved Views
200 + $crate::commands::list_saved_views,
201 + $crate::commands::list_pinned_views,
202 + $crate::commands::get_saved_view,
203 + $crate::commands::create_saved_view,
204 + $crate::commands::update_saved_view,
205 + $crate::commands::delete_saved_view,
206 + $crate::commands::toggle_view_pinned,
207 + // OAuth
208 + $crate::commands::list_oauth_providers,
209 + $crate::commands::start_oauth,
210 + $crate::commands::complete_oauth,
211 + $crate::commands::refresh_oauth_tokens,
212 + $crate::commands::disconnect_oauth,
213 + $crate::commands::reconnect_oauth,
214 + // Export/Backup
215 + $crate::commands::get_export_summary,
216 + $crate::commands::export_json,
217 + $crate::commands::export_tasks_csv,
218 + $crate::commands::export_events_ics,
219 + $crate::commands::create_backup,
220 + $crate::commands::list_backups,
221 + $crate::commands::restore_backup,
222 + $crate::commands::delete_backup,
223 + $crate::commands::get_backup_settings,
224 + $crate::commands::save_backup_settings,
225 + // Monthly Review
226 + $crate::commands::get_monthly_review,
227 + $crate::commands::upsert_monthly_goal,
228 + $crate::commands::update_monthly_goal_status,
229 + $crate::commands::delete_monthly_goal,
230 + $crate::commands::save_monthly_reflection,
231 + // Weekly Review
232 + $crate::commands::get_weekly_review,
233 + $crate::commands::complete_weekly_review,
234 + $crate::commands::set_task_focus,
235 + $crate::commands::clear_all_focus,
236 + $crate::commands::set_vacation_days,
237 + $crate::commands::check_weekly_review_nudge,
238 + // Sync
239 + $crate::commands::sync_get_tiers,
240 + $crate::commands::sync_status,
241 + $crate::commands::sync_start_auth,
242 + $crate::commands::sync_complete_auth,
243 + $crate::commands::sync_disconnect,
244 + $crate::commands::sync_now,
245 + $crate::commands::sync_setup_encryption_new,
246 + $crate::commands::sync_setup_encryption_existing,
247 + $crate::commands::sync_update_settings,
248 + $crate::commands::sync_account_info,
249 + $crate::commands::sync_subscription_status,
250 + $crate::commands::sync_subscribe,
251 + // Themes
252 + $crate::commands::list_themes,
253 + $crate::commands::get_theme,
254 + $crate::commands::get_custom_themes_dir,
255 + $crate::commands::import_theme,
256 + $crate::commands::export_theme,
257 + // Plugins
258 + $crate::commands::list_import_plugins,
259 + $crate::commands::list_enabled_import_plugins,
260 + $crate::commands::get_plugins_for_extension,
261 + $crate::commands::preview_import,
262 + $crate::commands::execute_import,
263 + $crate::commands::enable_plugin,
264 + $crate::commands::disable_plugin,
265 + $crate::commands::reload_plugin,
266 + // Import (VCF/ICS)
267 + $crate::commands::preview_vcf,
268 + $crate::commands::import_vcf,
269 + $crate::commands::preview_ics,
270 + $crate::commands::import_ics,
271 + // Time Tracking
272 + $crate::commands::start_timer,
273 + $crate::commands::stop_timer,
274 + $crate::commands::discard_timer,
275 + $crate::commands::get_active_timer,
276 + $crate::commands::list_time_sessions,
277 + $crate::commands::log_manual_time,
278 + $crate::commands::get_time_summary,
279 + // Preferences
280 + $crate::commands::get_preferences,
281 + $crate::commands::set_update_check_on_launch,
282 + ]
283 + };
284 + }
285 +
30 286 /// Build the Tauri app with all commands registered.
31 287 /// Shared between desktop `main()` and mobile entry point.
32 288 pub fn build_mobile_app() -> tauri::Builder<tauri::Wry> {
@@ -99,201 +355,7 @@ pub fn build_mobile_app() -> tauri::Builder<tauri::Wry> {
99 355
100 356 Ok(())
101 357 })
102 - .invoke_handler(tauri::generate_handler![
103 - commands::add_attachment,
104 - commands::list_attachments,
105 - commands::delete_attachment,
106 - commands::open_attachment,
107 - commands::save_attachment,
108 - commands::convert_email_attachments,
109 - commands::open_email_blob,
110 - commands::save_email_blob,
111 - commands::get_file_size,
112 - commands::list_projects,
113 - commands::get_project,
114 - commands::create_project,
115 - commands::update_project,
116 - commands::delete_project,
117 - commands::list_tasks,
118 - commands::list_tasks_filtered,
119 - commands::get_task,
120 - commands::create_task,
121 - commands::quick_add_task,
122 - commands::update_task,
123 - commands::delete_task,
124 - commands::start_task,
125 - commands::complete_task,
126 - commands::list_snoozed_tasks,
127 - commands::snooze_task,
128 - commands::unsnooze_task,
129 - commands::list_waiting_tasks,
130 - commands::mark_task_waiting,
131 - commands::clear_task_waiting,
132 - commands::list_annotations,
133 - commands::add_annotation,
134 - commands::delete_annotation,
135 - commands::list_subtasks,
136 - commands::add_subtask,
137 - commands::add_subtask_link,
138 - commands::toggle_subtask,
139 - commands::update_subtask,
140 - commands::delete_subtask,
141 - commands::list_milestones,
142 - commands::create_milestone,
143 - commands::update_milestone,
144 - commands::delete_milestone,
145 - commands::reorder_milestones,
146 - commands::list_events,
147 - commands::get_event,
148 - commands::create_event,
149 - commands::update_event,
150 - commands::delete_event,
151 - commands::list_upcoming_events,
152 - commands::get_event_status_indicator,
153 - commands::list_snoozed_events,
154 - commands::snooze_event,
155 - commands::unsnooze_event,
156 - commands::list_emails,
157 - commands::list_emails_threaded,
158 - commands::get_email,
159 - commands::open_email_in_browser,
160 - commands::create_email,
161 - commands::send_email,
162 - commands::save_email_draft,
163 - commands::list_email_drafts,
164 - commands::send_email_draft,
165 - commands::set_email_labels,
166 - commands::list_email_folders,
167 - commands::list_email_labels,
168 - commands::move_email_to_folder,
169 - commands::delete_email,
170 - commands::mark_email_read,
171 - commands::mark_email_unread,
172 - commands::archive_email,
173 - commands::unarchive_email,
174 - commands::mark_all_emails_read,
175 - commands::link_email_to_project,
176 - commands::get_unread_email_count,
177 - commands::list_snoozed_emails,
178 - commands::snooze_email,
179 - commands::unsnooze_email,
180 - commands::list_waiting_emails,
181 - commands::mark_email_waiting,
182 - commands::clear_email_waiting,
183 - commands::list_contacts,
184 - commands::get_contact,
185 - commands::create_contact,
186 - commands::update_contact,
187 - commands::delete_contact,
188 - commands::add_contact_email,
189 - commands::remove_contact_email,
190 - commands::add_contact_phone,
191 - commands::remove_contact_phone,
192 - commands::add_contact_social_handle,
193 - commands::remove_contact_social_handle,
194 - commands::add_contact_custom_field,
195 - commands::remove_contact_custom_field,
196 - commands::update_contact_email,
197 - commands::update_contact_phone,
198 - commands::update_contact_social_handle,
199 - commands::update_contact_custom_field,
200 - commands::find_contact_by_email,
201 - commands::list_contacts_filtered,
202 - commands::get_snooze_options,
203 - commands::list_email_accounts,
204 - commands::get_email_account,
205 - commands::create_email_account,
206 - commands::update_email_account,
207 - commands::update_email_sync_interval,
208 - commands::update_email_signature,
209 - commands::update_email_notify,
210 - commands::delete_email_account,
211 - commands::test_email_account,
212 - commands::sync_email_account,
213 - commands::list_tasks_for_project,
214 - commands::list_events_for_project,
215 - commands::list_emails_for_project,
216 - commands::list_unlinked_emails,
217 - commands::list_emails_by_thread,
218 - commands::get_dashboard_stats,
219 - commands::get_changelog,
220 - commands::open_compose_window,
221 - commands::set_window_title,
222 - commands::search,
223 - commands::get_day_planning,
224 - commands::schedule_task,
225 - commands::unschedule_task,
226 - commands::list_saved_views,
227 - commands::list_pinned_views,
228 - commands::get_saved_view,
229 - commands::create_saved_view,
230 - commands::update_saved_view,
231 - commands::delete_saved_view,
232 - commands::toggle_view_pinned,
233 - commands::list_oauth_providers,
234 - commands::start_oauth,
235 - commands::complete_oauth,
236 - commands::refresh_oauth_tokens,
237 - commands::disconnect_oauth,
238 - commands::reconnect_oauth,
239 - commands::get_export_summary,
240 - commands::export_json,
241 - commands::export_tasks_csv,
242 - commands::export_events_ics,
243 - commands::create_backup,
244 - commands::list_backups,
245 - commands::restore_backup,
246 - commands::delete_backup,
247 - commands::get_backup_settings,
248 - commands::save_backup_settings,
249 - commands::get_weekly_review,
250 - commands::complete_weekly_review,
251 - commands::set_task_focus,
252 - commands::clear_all_focus,
253 - commands::set_vacation_days,
254 - commands::check_weekly_review_nudge,
255 - commands::get_monthly_review,
256 - commands::upsert_monthly_goal,
257 - commands::update_monthly_goal_status,
258 - commands::delete_monthly_goal,
259 - commands::save_monthly_reflection,
260 - commands::sync_get_tiers,
261 - commands::sync_status,
262 - commands::sync_start_auth,
263 - commands::sync_complete_auth,
264 - commands::sync_disconnect,
265 - commands::sync_now,
266 - commands::sync_setup_encryption_new,
267 - commands::sync_setup_encryption_existing,
268 - commands::sync_update_settings,
269 - commands::sync_account_info,
270 - commands::sync_subscription_status,
271 - commands::sync_subscribe,
272 - commands::list_themes,
273 - commands::get_theme,
274 - commands::get_custom_themes_dir,
275 - commands::import_theme,
276 - commands::export_theme,
277 - commands::list_import_plugins,
278 - commands::list_enabled_import_plugins,
279 - commands::get_plugins_for_extension,
280 - commands::preview_import,
281 - commands::execute_import,
282 - commands::enable_plugin,
283 - commands::disable_plugin,
284 - commands::reload_plugin,
285 - commands::preview_vcf,
286 - commands::import_vcf,
287 - commands::preview_ics,
288 - commands::import_ics,
289 - commands::start_timer,
290 - commands::stop_timer,
291 - commands::discard_timer,
292 - commands::get_active_timer,
293 - commands::list_time_sessions,
294 - commands::log_manual_time,
295 - commands::get_time_summary,
296 - ])
358 + .invoke_handler(crate::all_commands!())
297 359 }
298 360
299 361 /// Mobile entry point for iOS/Android.
@@ -386,246 +386,7 @@ fn main() {
386 386
387 387 Ok(())
388 388 })
389 - .invoke_handler(tauri::generate_handler![
390 - // Attachments
391 - commands::add_attachment,
392 - commands::list_attachments,
393 - commands::delete_attachment,
394 - commands::open_attachment,
395 - commands::save_attachment,
396 - commands::convert_email_attachments,
397 - commands::open_email_blob,
398 - commands::save_email_blob,
399 - commands::get_file_size,
400 - // Projects
401 - commands::list_projects,
402 - commands::get_project,
403 - commands::create_project,
404 - commands::update_project,
405 - commands::delete_project,
406 - // Tasks
407 - commands::list_tasks,
408 - commands::list_tasks_filtered,
409 - commands::get_task,
410 - commands::create_task,
411 - commands::quick_add_task,
412 - commands::update_task,
413 - commands::delete_task,
414 - commands::start_task,
415 - commands::complete_task,
416 - commands::list_snoozed_tasks,
417 - commands::snooze_task,
418 - commands::unsnooze_task,
419 - commands::list_waiting_tasks,
420 - commands::mark_task_waiting,
421 - commands::clear_task_waiting,
422 - // Task Overview
423 - commands::get_task_overview,
424 - // Annotations
425 - commands::list_annotations,
426 - commands::add_annotation,
427 - commands::delete_annotation,
428 - // Subtasks
429 - commands::list_subtasks,
430 - commands::add_subtask,
431 - commands::add_subtask_link,
432 - commands::toggle_subtask,
433 - commands::update_subtask,
434 - commands::delete_subtask,
435 - // Milestones
436 - commands::list_milestones,
437 - commands::create_milestone,
438 - commands::update_milestone,
439 - commands::delete_milestone,
440 - commands::reorder_milestones,
441 - // Events
442 - commands::list_events,
443 - commands::get_event,
444 - commands::create_event,
445 - commands::update_event,
446 - commands::delete_event,
447 - commands::bulk_delete_events,
448 - commands::list_events_between,
449 - commands::list_upcoming_events,
450 - commands::get_event_status_indicator,
451 - commands::list_snoozed_events,
452 - commands::snooze_event,
453 - commands::unsnooze_event,
454 - // Emails
455 - commands::list_emails,
456 - commands::list_emails_threaded,
457 - commands::get_email,
458 - commands::open_email_in_browser,
459 - commands::create_email,
460 - commands::send_email,
461 - commands::save_email_draft,
462 - commands::list_email_drafts,
463 - commands::send_email_draft,
464 - commands::set_email_labels,
465 - commands::list_email_folders,
466 - commands::list_email_labels,
467 - commands::move_email_to_folder,
468 - commands::delete_email,
469 - commands::mark_email_read,
470 - commands::mark_email_unread,
471 - commands::archive_email,
472 - commands::unarchive_email,
473 - commands::mark_all_emails_read,
474 - commands::link_email_to_project,
475 - commands::get_unread_email_count,
476 - commands::list_snoozed_emails,
477 - commands::snooze_email,
478 - commands::unsnooze_email,
479 - commands::list_waiting_emails,
480 - commands::mark_email_waiting,
481 - commands::clear_email_waiting,
482 - // Contacts
483 - commands::list_contacts,
484 - commands::get_contact,
485 - commands::create_contact,
486 - commands::update_contact,
487 - commands::delete_contact,
488 - commands::add_contact_email,
489 - commands::remove_contact_email,
490 - commands::add_contact_phone,
491 - commands::remove_contact_phone,
492 - commands::add_contact_social_handle,
493 - commands::remove_contact_social_handle,
494 - commands::add_contact_custom_field,
495 - commands::remove_contact_custom_field,
496 - commands::update_contact_email,
497 - commands::update_contact_phone,
498 - commands::update_contact_social_handle,
499 - commands::update_contact_custom_field,
500 - commands::find_contact_by_email,
501 - commands::validate_email_addresses,
502 - commands::promote_contact,
503 - commands::list_tasks_for_contact,
504 - commands::list_events_for_contact,
505 - commands::list_emails_for_contact,
506 - commands::list_contacts_filtered,
507 - commands::bulk_delete_contacts,
508 - commands::bulk_tag_contacts,
509 - // Snooze Options
510 - commands::get_snooze_options,
511 - // Email Accounts
512 - commands::list_email_accounts,
513 - commands::get_email_account,
514 - commands::create_email_account,
515 - commands::update_email_account,
516 - commands::update_email_sync_interval,
517 - commands::update_email_signature,
518 - commands::update_email_notify,
519 - commands::delete_email_account,
520 - commands::test_email_account,
521 - commands::sync_email_account,
522 - // Project Dashboard
523 - commands::list_tasks_for_project,
524 - commands::list_events_for_project,
525 - commands::list_emails_for_project,
526 - commands::list_unlinked_emails,
527 - // Email Threading
528 - commands::list_emails_by_thread,
529 - // Stats
530 - commands::get_dashboard_stats,
531 - // App info
532 - commands::get_changelog,
533 - // Window
534 - commands::open_compose_window,
535 - commands::set_window_title,
536 - // Search
537 - commands::search,
538 - // Daily Notes
539 - commands::get_daily_note,
540 - commands::upsert_daily_note,
541 - // Day Planning
542 - commands::get_day_planning,
543 - commands::schedule_task,
544 - commands::unschedule_task,
545 - // Saved Views
546 - commands::list_saved_views,
547 - commands::list_pinned_views,
548 - commands::get_saved_view,
549 - commands::create_saved_view,
550 - commands::update_saved_view,
551 - commands::delete_saved_view,
552 - commands::toggle_view_pinned,
553 - // OAuth
554 - commands::list_oauth_providers,
555 - commands::start_oauth,
556 - commands::complete_oauth,
557 - commands::refresh_oauth_tokens,
558 - commands::disconnect_oauth,
559 - commands::reconnect_oauth,
560 - // Export/Backup
561 - commands::get_export_summary,
562 - commands::export_json,
563 - commands::export_tasks_csv,
564 - commands::export_events_ics,
565 - commands::create_backup,
566 - commands::list_backups,
567 - commands::restore_backup,
568 - commands::delete_backup,
569 - commands::get_backup_settings,
570 - commands::save_backup_settings,
571 - // Monthly Review
572 - commands::get_monthly_review,
573 - commands::upsert_monthly_goal,
574 - commands::update_monthly_goal_status,
575 - commands::delete_monthly_goal,
576 - commands::save_monthly_reflection,
577 - // Weekly Review
578 - commands::get_weekly_review,
579 - commands::complete_weekly_review,
580 - commands::set_task_focus,
581 - commands::clear_all_focus,
582 - commands::set_vacation_days,
583 - commands::check_weekly_review_nudge,
584 - // Sync
585 - commands::sync_get_tiers,
586 - commands::sync_status,
587 - commands::sync_start_auth,
588 - commands::sync_complete_auth,
589 - commands::sync_disconnect,
590 - commands::sync_now,
591 - commands::sync_setup_encryption_new,
592 - commands::sync_setup_encryption_existing,
593 - commands::sync_update_settings,
594 - commands::sync_account_info,
595 - commands::sync_subscription_status,
596 - commands::sync_subscribe,
597 - // Themes
598 - commands::list_themes,
599 - commands::get_theme,
600 - commands::get_custom_themes_dir,
601 - commands::import_theme,
602 - commands::export_theme,
603 - // Plugins
604 - commands::list_import_plugins,
605 - commands::list_enabled_import_plugins,
606 - commands::get_plugins_for_extension,
607 - commands::preview_import,
608 - commands::execute_import,
609 - commands::enable_plugin,
610 - commands::disable_plugin,
611 - commands::reload_plugin,
612 - // Import (VCF/ICS)
613 - commands::preview_vcf,
614 - commands::import_vcf,
615 - commands::preview_ics,
616 - commands::import_ics,
617 - // Time Tracking
618 - commands::start_timer,
619 - commands::stop_timer,
620 - commands::discard_timer,
621 - commands::get_active_timer,
622 - commands::list_time_sessions,
623 - commands::log_manual_time,
624 - commands::get_time_summary,
625 - // Preferences
626 - commands::get_preferences,
627 - commands::set_update_check_on_launch,
628 - ])
389 + .invoke_handler(goingson_desktop::all_commands!())
629 390 .build(tauri::generate_context!())
630 391 .expect("error while building tauri application")
631 392 .run(|app_handle, event| {