@@ -28,6 +28,8 @@ pub enum DebugNotificationKind {
2828 MeetingReminder ,
2929 SystemError ,
3030 Test ,
31+ MeetingDetected ,
32+ MeetingEnded ,
3133}
3234
3335/// Initialize the notification manager (called during app setup)
@@ -338,6 +340,13 @@ pub async fn debug_show_notification(
338340 None => Err ( anyhow:: anyhow!( "Notification manager not initialized" ) ) ,
339341 }
340342 }
343+ DebugNotificationKind :: MeetingDetected => {
344+ show_meeting_detected_notification ( & app, manager_state. inner ( ) , "Zoom" . to_string ( ) )
345+ . await
346+ }
347+ DebugNotificationKind :: MeetingEnded => {
348+ show_meeting_ended_notification ( & app, manager_state. inner ( ) , "Zoom" . to_string ( ) ) . await
349+ }
341350 } ;
342351
343352 result. map_err ( |e| format ! ( "Failed to show debug notification: {}" , e) )
@@ -563,4 +572,69 @@ pub async fn show_meeting_reminder_notification(
563572 log_error ! ( "Cannot show meeting reminder notification: manager not initialized" ) ;
564573 Ok ( ( ) )
565574 }
575+ }
576+
577+ /// Show "Meeting detected" notification. Lazy-initializes the manager on
578+ /// first call, matching `show_recording_started_notification`.
579+ pub async fn show_meeting_detected_notification < R : Runtime > (
580+ app_handle : & tauri:: AppHandle < R > ,
581+ manager_state : & NotificationManagerState < R > ,
582+ app_name : String ,
583+ ) -> Result < ( ) > {
584+ log_info ! ( "Attempting to show meeting-detected notification for: {}" , app_name) ;
585+
586+ let manager_lock = manager_state. read ( ) . await ;
587+ if let Some ( manager) = manager_lock. as_ref ( ) {
588+ return manager. show_meeting_detected ( app_name) . await ;
589+ }
590+ drop ( manager_lock) ;
591+
592+ match initialize_notification_manager ( app_handle. clone ( ) ) . await {
593+ Ok ( manager) => {
594+ let mut state_lock = manager_state. write ( ) . await ;
595+ * state_lock = Some ( manager) ;
596+ drop ( state_lock) ;
597+ let manager_lock = manager_state. read ( ) . await ;
598+ match manager_lock. as_ref ( ) {
599+ Some ( manager) => manager. show_meeting_detected ( app_name) . await ,
600+ None => Ok ( ( ) ) ,
601+ }
602+ }
603+ Err ( e) => {
604+ log_error ! ( "Failed to init notification manager for meeting-detected: {}" , e) ;
605+ Ok ( ( ) )
606+ }
607+ }
608+ }
609+
610+ /// Show "Meeting ended" notification. Same pattern as meeting-detected.
611+ pub async fn show_meeting_ended_notification < R : Runtime > (
612+ app_handle : & tauri:: AppHandle < R > ,
613+ manager_state : & NotificationManagerState < R > ,
614+ app_name : String ,
615+ ) -> Result < ( ) > {
616+ log_info ! ( "Attempting to show meeting-ended notification for: {}" , app_name) ;
617+
618+ let manager_lock = manager_state. read ( ) . await ;
619+ if let Some ( manager) = manager_lock. as_ref ( ) {
620+ return manager. show_meeting_ended ( app_name) . await ;
621+ }
622+ drop ( manager_lock) ;
623+
624+ match initialize_notification_manager ( app_handle. clone ( ) ) . await {
625+ Ok ( manager) => {
626+ let mut state_lock = manager_state. write ( ) . await ;
627+ * state_lock = Some ( manager) ;
628+ drop ( state_lock) ;
629+ let manager_lock = manager_state. read ( ) . await ;
630+ match manager_lock. as_ref ( ) {
631+ Some ( manager) => manager. show_meeting_ended ( app_name) . await ,
632+ None => Ok ( ( ) ) ,
633+ }
634+ }
635+ Err ( e) => {
636+ log_error ! ( "Failed to init notification manager for meeting-ended: {}" , e) ;
637+ Ok ( ( ) )
638+ }
639+ }
566640}
0 commit comments