@@ -173,8 +173,9 @@ impl WidgetMachine {
173173 capabilities
174174 . raw_event_matches_read_filter ( & event)
175175 . then ( || {
176- let action = self . send_to_widget_request ( NotifyNewMatrixEvent ( event) ) . 1 ;
177- action. map ( |a| vec ! [ a] ) . unwrap_or_default ( )
176+ self . send_to_widget_request ( NotifyNewMatrixEvent ( event) )
177+ . map ( |( _request, action) | vec ! [ action] )
178+ . unwrap_or_default ( )
178179 } )
179180 . unwrap_or_default ( )
180181 }
@@ -260,9 +261,10 @@ impl WidgetMachine {
260261 }
261262 } ;
262263
263- let action =
264- machine. send_to_widget_request ( NotifyOpenIdChanged ( response) ) . 1 ;
265- action. map ( |a| vec ! [ a] ) . unwrap_or_default ( )
264+ machine
265+ . send_to_widget_request ( NotifyOpenIdChanged ( response) )
266+ . map ( |( _request, action) | vec ! [ action] )
267+ . unwrap_or_default ( )
266268 } ) ;
267269
268270 request_action
@@ -562,7 +564,7 @@ impl WidgetMachine {
562564 fn send_to_widget_request < T : ToWidgetRequest > (
563565 & mut self ,
564566 to_widget_request : T ,
565- ) -> ( ToWidgetRequestHandle < ' _ , T :: ResponseData > , Option < Action > ) {
567+ ) -> Option < ( ToWidgetRequestHandle < ' _ , T :: ResponseData > , Action ) > {
566568 #[ derive( Serialize ) ]
567569 #[ serde( tag = "api" , rename = "toWidget" , rename_all = "camelCase" ) ]
568570 struct ToWidgetRequestSerdeHelper < ' a , T > {
@@ -583,11 +585,11 @@ impl WidgetMachine {
583585 let request_meta = ToWidgetRequestMeta :: new ( T :: ACTION ) ;
584586 let Some ( meta) = self . pending_to_widget_requests . insert ( request_id, request_meta) else {
585587 warn ! ( "Reached limits of pending requests for toWidget requests" ) ;
586- return ( ToWidgetRequestHandle :: null ( ) , None ) ;
588+ return None ;
587589 } ;
588590
589591 let serialized = serde_json:: to_string ( & full_request) . expect ( "Failed to serialize request" ) ;
590- ( ToWidgetRequestHandle :: new ( meta) , Some ( Action :: SendToWidget ( serialized) ) )
592+ Some ( ( ToWidgetRequestHandle :: new ( meta) , Action :: SendToWidget ( serialized) ) )
591593 }
592594
593595 #[ instrument( skip_all) ]
@@ -615,40 +617,46 @@ impl WidgetMachine {
615617 matches ! ( & self . capabilities, CapabilitiesState :: Negotiated ( c) if !c. read. is_empty( ) ) ;
616618 self . capabilities = CapabilitiesState :: Negotiating ;
617619
618- let ( request, action) = self . send_to_widget_request ( RequestCapabilities { } ) ;
619-
620- request. then ( |response, machine| {
621- let requested = response. capabilities ;
622-
623- if let Some ( ( request, action) ) =
624- machine. send_matrix_driver_request ( AcquireCapabilities {
625- desired_capabilities : requested. clone ( ) ,
626- } )
627- {
628- request. then ( |result, machine| {
629- let approved = result. unwrap_or_else ( |e| {
630- error ! ( "Acquiring capabilities failed: {e}" ) ;
631- Capabilities :: default ( )
632- } ) ;
633-
634- let subscribe_required = !approved. read . is_empty ( ) ;
635- machine. capabilities = CapabilitiesState :: Negotiated ( approved. clone ( ) ) ;
636-
637- let update = NotifyCapabilitiesChanged { approved, requested } ;
638- let ( _request, action) = machine. send_to_widget_request ( update) ;
620+ let action =
621+ self . send_to_widget_request ( RequestCapabilities { } ) . map ( |( request, action) | {
622+ request. then ( |response, machine| {
623+ let requested = response. capabilities ;
624+
625+ if let Some ( ( request, action) ) =
626+ machine. send_matrix_driver_request ( AcquireCapabilities {
627+ desired_capabilities : requested. clone ( ) ,
628+ } )
629+ {
630+ request. then ( |result, machine| {
631+ let approved = result. unwrap_or_else ( |e| {
632+ error ! ( "Acquiring capabilities failed: {e}" ) ;
633+ Capabilities :: default ( )
634+ } ) ;
635+
636+ let subscribe_required = !approved. read . is_empty ( ) ;
637+ machine. capabilities = CapabilitiesState :: Negotiated ( approved. clone ( ) ) ;
638+
639+ let update = NotifyCapabilitiesChanged { approved, requested } ;
640+
641+ let action = machine
642+ . send_to_widget_request ( update)
643+ . map ( |( _request, action) | action) ;
644+
645+ subscribe_required
646+ . then_some ( Action :: Subscribe )
647+ . into_iter ( )
648+ . chain ( action)
649+ . collect ( )
650+ } ) ;
639651
640- subscribe_required
641- . then_some ( Action :: Subscribe )
642- . into_iter ( )
643- . chain ( action)
644- . collect ( )
652+ vec ! [ action]
653+ } else {
654+ Vec :: new ( )
655+ }
645656 } ) ;
646657
647- vec ! [ action]
648- } else {
649- Vec :: new ( )
650- }
651- } ) ;
658+ action
659+ } ) ;
652660
653661 unsubscribe_required. then_some ( Action :: Unsubscribe ) . into_iter ( ) . chain ( action) . collect ( )
654662 }
0 commit comments