@@ -865,49 +865,53 @@ impl<'a, 'o> TimelineEventHandler<'a, 'o> {
865
865
. or ( pending_edit)
866
866
. unzip ( ) ;
867
867
868
- let mut poll_state = PollState :: new ( c, edit_content) ;
868
+ let poll_state = PollState :: new ( c, edit_content) ;
869
+ let mut content = TimelineItemContent :: Poll ( poll_state) ;
869
870
870
871
if let Some ( event_id) = self . ctx . flow . event_id ( ) {
871
872
// Applying the cache to remote events only because local echoes
872
873
// don't have an event ID that could be referenced by responses yet.
873
- if let Err ( err) = self . meta . aggregations . apply_poll ( event_id, & mut poll_state ) {
874
+ if let Err ( err) = self . meta . aggregations . apply ( event_id, & mut content ) {
874
875
warn ! ( "discarding poll aggregations: {err}" ) ;
875
876
}
876
877
}
877
878
878
879
let edit_json = edit_json. flatten ( ) ;
879
880
880
- self . add_item ( TimelineItemContent :: Poll ( poll_state ) , edit_json) ;
881
+ self . add_item ( content , edit_json) ;
881
882
}
882
883
883
884
fn handle_poll_response ( & mut self , c : UnstablePollResponseEventContent ) {
884
885
let start_event_id = c. relates_to . event_id ;
885
886
886
- self . meta . aggregations . add (
887
- start_event_id. clone ( ) ,
888
- Aggregation :: PollResponse {
889
- sender : self . ctx . sender . clone ( ) ,
890
- timestamp : self . ctx . timestamp ,
891
- answers : c. poll_response . answers . clone ( ) ,
892
- } ,
893
- ) ;
894
-
895
- let Some ( ( item_pos, item) ) = rfind_event_by_id ( self . items , & start_event_id) else {
896
- return ;
887
+ let aggregation = Aggregation :: PollResponse {
888
+ sender : self . ctx . sender . clone ( ) ,
889
+ timestamp : self . ctx . timestamp ,
890
+ answers : c. poll_response . answers ,
897
891
} ;
892
+ self . meta . aggregations . add ( start_event_id. clone ( ) , aggregation. clone ( ) ) ;
898
893
899
- let TimelineItemContent :: Poll ( poll_state ) = item . content ( ) else {
894
+ let Some ( ( item_pos , item ) ) = rfind_event_by_id ( self . items , & start_event_id ) else {
900
895
return ;
901
896
} ;
902
897
903
- let mut new_poll = poll_state. clone ( ) ;
904
- new_poll. add_response ( self . ctx . sender . clone ( ) , self . ctx . timestamp , c. poll_response . answers ) ;
905
-
906
- let new_item = item. with_content ( TimelineItemContent :: Poll ( new_poll) , None ) ;
907
-
908
- trace ! ( "Adding poll response." ) ;
909
- self . items . replace ( item_pos, TimelineItem :: new ( new_item, item. internal_id . to_owned ( ) ) ) ;
910
- self . result . items_updated += 1 ;
898
+ let mut new_content = item. content ( ) . clone ( ) ;
899
+ match aggregation. apply ( & mut new_content) {
900
+ Ok ( ( ) ) => {
901
+ trace ! ( "adding poll response." ) ;
902
+ self . items . replace (
903
+ item_pos,
904
+ TimelineItem :: new (
905
+ item. with_content ( new_content, None ) ,
906
+ item. internal_id . clone ( ) ,
907
+ ) ,
908
+ ) ;
909
+ self . result . items_updated += 1 ;
910
+ }
911
+ Err ( err) => {
912
+ warn ! ( "discarding poll response: {err}" ) ;
913
+ }
914
+ }
911
915
}
912
916
913
917
fn handle_poll_end ( & mut self , c : UnstablePollEndEventContent ) {
@@ -920,21 +924,15 @@ impl<'a, 'o> TimelineEventHandler<'a, 'o> {
920
924
return ;
921
925
} ;
922
926
923
- let TimelineItemContent :: Poll ( poll_state) = item. content ( ) else {
924
- return ;
925
- } ;
926
-
927
- let mut poll_state = poll_state. clone ( ) ;
928
-
929
- match aggregation. apply_poll ( & mut poll_state) {
927
+ let mut new_content = item. content ( ) . clone ( ) ;
928
+ match aggregation. apply ( & mut new_content) {
930
929
Ok ( ( ) ) => {
931
930
trace ! ( "Ending poll." ) ;
932
- let new_item = item. with_content ( TimelineItemContent :: Poll ( poll_state ) , None ) ;
931
+ let new_item = item. with_content ( new_content , None ) ;
933
932
self . items
934
933
. replace ( item_pos, TimelineItem :: new ( new_item, item. internal_id . to_owned ( ) ) ) ;
935
934
self . result . items_updated += 1 ;
936
935
}
937
-
938
936
Err ( err) => {
939
937
warn ! ( "discarding poll end: {err}" ) ;
940
938
}
0 commit comments