@@ -20,6 +20,7 @@ use driver_req::UpdateDelayedEventRequest;
2020use from_widget:: UpdateDelayedEventResponse ;
2121use indexmap:: IndexMap ;
2222use ruma:: {
23+ events:: AnyTimelineEvent ,
2324 serde:: { JsonObject , Raw } ,
2425 OwnedRoomId ,
2526} ;
@@ -52,7 +53,7 @@ use super::{
5253 filter:: FilterInput ,
5354 Capabilities , StateKeySelector ,
5455} ;
55- use crate :: Result ;
56+ use crate :: { Error , Result } ;
5657
5758mod driver_req;
5859mod from_widget;
@@ -217,7 +218,7 @@ impl WidgetMachine {
217218 Err ( e) => {
218219 return vec ! [ Self :: send_from_widget_err_response(
219220 raw_request,
220- FromWidgetErrorResponse :: from_error( crate :: Error :: SerdeJson ( e) ) ,
221+ FromWidgetErrorResponse :: from_error( Error :: SerdeJson ( e) ) ,
221222 ) ]
222223 }
223224 } ;
@@ -316,6 +317,32 @@ impl WidgetMachine {
316317 }
317318 }
318319
320+ /// Send a response to a request to read message-like events.
321+ ///
322+ /// `events` represents the message-like events provided by the [`crate::widget::MatrixDriver`].
323+ fn send_read_message_like_event_response (
324+ & self ,
325+ request : Raw < FromWidgetRequest > ,
326+ events : Result < Vec < Raw < AnyTimelineEvent > > , Error > ,
327+ ) -> Vec < Action > {
328+ let response = match & self . capabilities {
329+ CapabilitiesState :: Unset => Err ( FromWidgetErrorResponse :: from_string (
330+ "Received read event request before capabilities negotiation" ,
331+ ) ) ,
332+ CapabilitiesState :: Negotiating => Err ( FromWidgetErrorResponse :: from_string (
333+ "Received read event request while capabilities were negotiating" ,
334+ ) ) ,
335+ CapabilitiesState :: Negotiated ( capabilities) => events
336+ . map ( |mut events| {
337+ events. retain ( |e| capabilities. allow_reading ( e) ) ;
338+ ReadEventResponse { events }
339+ } )
340+ . map_err ( FromWidgetErrorResponse :: from_error) ,
341+ } ;
342+
343+ vec ! [ WidgetMachine :: send_from_widget_response( request, response) ]
344+ }
345+
319346 fn process_read_event_request (
320347 & mut self ,
321348 request : ReadEventRequest ,
@@ -343,26 +370,8 @@ impl WidgetMachine {
343370
344371 self . send_matrix_driver_request ( request) . map ( |( request, action) | {
345372 request. then ( |result, machine| {
346- let response = match & machine. capabilities {
347- CapabilitiesState :: Unset => Err ( FromWidgetErrorResponse :: from_string (
348- "Received read event request before capabilities negotiation" ,
349- ) ) ,
350- CapabilitiesState :: Negotiating => {
351- Err ( FromWidgetErrorResponse :: from_string (
352- "Received read event request while capabilities were negotiating" ,
353- ) )
354- }
355- CapabilitiesState :: Negotiated ( capabilities) => result
356- . map ( |mut events| {
357- events. retain ( |e| capabilities. allow_reading ( e) ) ;
358- ReadEventResponse { events }
359- } )
360- . map_err ( FromWidgetErrorResponse :: from_error) ,
361- } ;
362-
363- vec ! [ Self :: send_from_widget_response( raw_request, response) ]
373+ machine. send_read_message_like_event_response ( raw_request, result)
364374 } ) ;
365-
366375 action
367376 } )
368377 }
0 commit comments