@@ -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;
@@ -234,7 +235,7 @@ impl WidgetMachine {
234235 Err ( e) => {
235236 return vec ! [ Self :: send_from_widget_err_response(
236237 raw_request,
237- FromWidgetErrorResponse :: from_error( crate :: Error :: SerdeJson ( e) ) ,
238+ FromWidgetErrorResponse :: from_error( Error :: SerdeJson ( e) ) ,
238239 ) ]
239240 }
240241 } ;
@@ -338,6 +339,33 @@ impl WidgetMachine {
338339 }
339340 }
340341
342+ /// Send a response to a request to read message-like events.
343+ ///
344+ /// `events` represents the message-like events provided by the
345+ /// [`crate::widget::MatrixDriver`].
346+ fn send_read_message_like_event_response (
347+ & self ,
348+ request : Raw < FromWidgetRequest > ,
349+ events : Result < Vec < Raw < AnyTimelineEvent > > , Error > ,
350+ ) -> Vec < Action > {
351+ let response = match & self . capabilities {
352+ CapabilitiesState :: Unset => Err ( FromWidgetErrorResponse :: from_string (
353+ "Received read event request before capabilities negotiation" ,
354+ ) ) ,
355+ CapabilitiesState :: Negotiating => Err ( FromWidgetErrorResponse :: from_string (
356+ "Received read event request while capabilities were negotiating" ,
357+ ) ) ,
358+ CapabilitiesState :: Negotiated ( capabilities) => events
359+ . map ( |mut events| {
360+ events. retain ( |e| capabilities. allow_reading ( e) ) ;
361+ ReadEventResponse { events }
362+ } )
363+ . map_err ( FromWidgetErrorResponse :: from_error) ,
364+ } ;
365+
366+ vec ! [ WidgetMachine :: send_from_widget_response( request, response) ]
367+ }
368+
341369 fn process_read_event_request (
342370 & mut self ,
343371 request : ReadEventRequest ,
@@ -365,26 +393,8 @@ impl WidgetMachine {
365393
366394 self . send_matrix_driver_request ( request) . map ( |( request, action) | {
367395 request. add_response_handler ( |result, machine| {
368- let response = match & machine. capabilities {
369- CapabilitiesState :: Unset => Err ( FromWidgetErrorResponse :: from_string (
370- "Received read event request before capabilities negotiation" ,
371- ) ) ,
372- CapabilitiesState :: Negotiating => {
373- Err ( FromWidgetErrorResponse :: from_string (
374- "Received read event request while capabilities were negotiating" ,
375- ) )
376- }
377- CapabilitiesState :: Negotiated ( capabilities) => result
378- . map ( |mut events| {
379- events. retain ( |e| capabilities. allow_reading ( e) ) ;
380- ReadEventResponse { events }
381- } )
382- . map_err ( FromWidgetErrorResponse :: from_error) ,
383- } ;
384-
385- vec ! [ Self :: send_from_widget_response( raw_request, response) ]
396+ machine. send_read_message_like_event_response ( raw_request, result)
386397 } ) ;
387-
388398 action
389399 } )
390400 }
0 commit comments