@@ -20,6 +20,7 @@ use driver_req::UpdateDelayedEventRequest;
2020use from_widget:: { SendToDeviceEventResponse , UpdateDelayedEventResponse } ;
2121use indexmap:: IndexMap ;
2222use ruma:: {
23+ events:: AnyTimelineEvent ,
2324 serde:: { JsonObject , Raw } ,
2425 OwnedRoomId ,
2526} ;
@@ -53,7 +54,7 @@ use super::{
5354 filter:: FilterInput ,
5455 Capabilities , StateKeySelector ,
5556} ;
56- use crate :: Result ;
57+ use crate :: { Error , Result } ;
5758
5859mod driver_req;
5960mod from_widget;
@@ -236,7 +237,7 @@ impl WidgetMachine {
236237 Err ( e) => {
237238 return vec ! [ Self :: send_from_widget_err_response(
238239 raw_request,
239- FromWidgetErrorResponse :: from_error( crate :: Error :: SerdeJson ( e) ) ,
240+ FromWidgetErrorResponse :: from_error( Error :: SerdeJson ( e) ) ,
240241 ) ]
241242 }
242243 } ;
@@ -340,6 +341,33 @@ impl WidgetMachine {
340341 }
341342 }
342343
344+ /// Send a response to a request to read message-like events.
345+ ///
346+ /// `events` represents the message-like events provided by the
347+ /// [`crate::widget::MatrixDriver`].
348+ fn send_read_message_like_event_response (
349+ & self ,
350+ request : Raw < FromWidgetRequest > ,
351+ events : Result < Vec < Raw < AnyTimelineEvent > > , Error > ,
352+ ) -> Vec < Action > {
353+ let response = match & self . capabilities {
354+ CapabilitiesState :: Unset => Err ( FromWidgetErrorResponse :: from_string (
355+ "Received read event request before capabilities negotiation" ,
356+ ) ) ,
357+ CapabilitiesState :: Negotiating => Err ( FromWidgetErrorResponse :: from_string (
358+ "Received read event request while capabilities were negotiating" ,
359+ ) ) ,
360+ CapabilitiesState :: Negotiated ( capabilities) => events
361+ . map ( |mut events| {
362+ events. retain ( |e| capabilities. allow_reading ( e) ) ;
363+ ReadEventResponse { events }
364+ } )
365+ . map_err ( FromWidgetErrorResponse :: from_error) ,
366+ } ;
367+
368+ vec ! [ WidgetMachine :: send_from_widget_response( request, response) ]
369+ }
370+
343371 fn process_read_event_request (
344372 & mut self ,
345373 request : ReadEventRequest ,
@@ -367,26 +395,8 @@ impl WidgetMachine {
367395
368396 self . send_matrix_driver_request ( request) . map ( |( request, action) | {
369397 request. add_response_handler ( |result, machine| {
370- let response = match & machine. capabilities {
371- CapabilitiesState :: Unset => Err ( FromWidgetErrorResponse :: from_string (
372- "Received read event request before capabilities negotiation" ,
373- ) ) ,
374- CapabilitiesState :: Negotiating => {
375- Err ( FromWidgetErrorResponse :: from_string (
376- "Received read event request while capabilities were negotiating" ,
377- ) )
378- }
379- CapabilitiesState :: Negotiated ( capabilities) => result
380- . map ( |mut events| {
381- events. retain ( |e| capabilities. allow_reading ( e) ) ;
382- ReadEventResponse { events }
383- } )
384- . map_err ( FromWidgetErrorResponse :: from_error) ,
385- } ;
386-
387- vec ! [ Self :: send_from_widget_response( raw_request, response) ]
398+ machine. send_read_message_like_event_response ( raw_request, result)
388399 } ) ;
389-
390400 action
391401 } )
392402 }
0 commit comments