@@ -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;
@@ -218,7 +219,7 @@ impl WidgetMachine {
218219 Err ( e) => {
219220 return vec ! [ Self :: send_from_widget_err_response(
220221 raw_request,
221- FromWidgetErrorResponse :: from_error( crate :: Error :: SerdeJson ( e) ) ,
222+ FromWidgetErrorResponse :: from_error( Error :: SerdeJson ( e) ) ,
222223 ) ]
223224 }
224225 } ;
@@ -317,6 +318,33 @@ impl WidgetMachine {
317318 }
318319 }
319320
321+ /// Send a response to a request to read message-like events.
322+ ///
323+ /// `events` represents the message-like events provided by the
324+ /// [`crate::widget::MatrixDriver`].
325+ fn send_read_message_like_event_response (
326+ & self ,
327+ request : Raw < FromWidgetRequest > ,
328+ events : Result < Vec < Raw < AnyTimelineEvent > > , Error > ,
329+ ) -> Vec < Action > {
330+ let response = match & self . capabilities {
331+ CapabilitiesState :: Unset => Err ( FromWidgetErrorResponse :: from_string (
332+ "Received read event request before capabilities negotiation" ,
333+ ) ) ,
334+ CapabilitiesState :: Negotiating => Err ( FromWidgetErrorResponse :: from_string (
335+ "Received read event request while capabilities were negotiating" ,
336+ ) ) ,
337+ CapabilitiesState :: Negotiated ( capabilities) => events
338+ . map ( |mut events| {
339+ events. retain ( |e| capabilities. allow_reading ( e) ) ;
340+ ReadEventResponse { events }
341+ } )
342+ . map_err ( FromWidgetErrorResponse :: from_error) ,
343+ } ;
344+
345+ vec ! [ WidgetMachine :: send_from_widget_response( request, response) ]
346+ }
347+
320348 fn process_read_event_request (
321349 & mut self ,
322350 request : ReadEventRequest ,
@@ -344,26 +372,8 @@ impl WidgetMachine {
344372
345373 self . send_matrix_driver_request ( request) . map ( |( request, action) | {
346374 request. add_response_handler ( |result, machine| {
347- let response = match & machine. capabilities {
348- CapabilitiesState :: Unset => Err ( FromWidgetErrorResponse :: from_string (
349- "Received read event request before capabilities negotiation" ,
350- ) ) ,
351- CapabilitiesState :: Negotiating => {
352- Err ( FromWidgetErrorResponse :: from_string (
353- "Received read event request while capabilities were negotiating" ,
354- ) )
355- }
356- CapabilitiesState :: Negotiated ( capabilities) => result
357- . map ( |mut events| {
358- events. retain ( |e| capabilities. allow_reading ( e) ) ;
359- ReadEventResponse { events }
360- } )
361- . map_err ( FromWidgetErrorResponse :: from_error) ,
362- } ;
363-
364- vec ! [ Self :: send_from_widget_response( raw_request, response) ]
375+ machine. send_read_message_like_event_response ( raw_request, result)
365376 } ) ;
366-
367377 action
368378 } )
369379 }
0 commit comments