@@ -1042,17 +1042,16 @@ pub struct EventTimelineItem {
1042
1042
content : TimelineItemContent ,
1043
1043
timestamp : u64 ,
1044
1044
reactions : Vec < Reaction > ,
1045
- debug_info_provider : Arc < EventTimelineItemDebugInfoProvider > ,
1046
1045
local_send_state : Option < EventSendState > ,
1047
1046
read_receipts : HashMap < String , Receipt > ,
1048
1047
origin : Option < EventItemOrigin > ,
1049
1048
can_be_replied_to : bool ,
1050
- shields_provider : Arc < EventShieldsProvider > ,
1049
+ lazy_provider : Arc < LazyTimelineItemProvider > ,
1051
1050
}
1052
1051
1053
1052
impl From < matrix_sdk_ui:: timeline:: EventTimelineItem > for EventTimelineItem {
1054
- fn from ( value : matrix_sdk_ui:: timeline:: EventTimelineItem ) -> Self {
1055
- let reactions = value
1053
+ fn from ( item : matrix_sdk_ui:: timeline:: EventTimelineItem ) -> Self {
1054
+ let reactions = item
1056
1055
. reactions ( )
1057
1056
. iter ( )
1058
1057
. map ( |( k, v) | Reaction {
@@ -1066,27 +1065,25 @@ impl From<matrix_sdk_ui::timeline::EventTimelineItem> for EventTimelineItem {
1066
1065
. collect ( ) ,
1067
1066
} )
1068
1067
. collect ( ) ;
1069
- let value = Arc :: new ( value) ;
1070
- let debug_info_provider = Arc :: new ( EventTimelineItemDebugInfoProvider ( value. clone ( ) ) ) ;
1071
- let shields_provider = Arc :: new ( EventShieldsProvider ( value. clone ( ) ) ) ;
1068
+ let item = Arc :: new ( item) ;
1069
+ let lazy_provider = Arc :: new ( LazyTimelineItemProvider ( item. clone ( ) ) ) ;
1072
1070
let read_receipts =
1073
- value . read_receipts ( ) . iter ( ) . map ( |( k, v) | ( k. to_string ( ) , v. clone ( ) . into ( ) ) ) . collect ( ) ;
1071
+ item . read_receipts ( ) . iter ( ) . map ( |( k, v) | ( k. to_string ( ) , v. clone ( ) . into ( ) ) ) . collect ( ) ;
1074
1072
Self {
1075
- is_remote : !value . is_local_echo ( ) ,
1076
- event_or_transaction_id : value . identifier ( ) . into ( ) ,
1077
- sender : value . sender ( ) . to_string ( ) ,
1078
- sender_profile : value . sender_profile ( ) . into ( ) ,
1079
- is_own : value . is_own ( ) ,
1080
- is_editable : value . is_editable ( ) ,
1081
- content : value . content ( ) . clone ( ) . into ( ) ,
1082
- timestamp : value . timestamp ( ) . 0 . into ( ) ,
1073
+ is_remote : !item . is_local_echo ( ) ,
1074
+ event_or_transaction_id : item . identifier ( ) . into ( ) ,
1075
+ sender : item . sender ( ) . to_string ( ) ,
1076
+ sender_profile : item . sender_profile ( ) . into ( ) ,
1077
+ is_own : item . is_own ( ) ,
1078
+ is_editable : item . is_editable ( ) ,
1079
+ content : item . content ( ) . clone ( ) . into ( ) ,
1080
+ timestamp : item . timestamp ( ) . 0 . into ( ) ,
1083
1081
reactions,
1084
- debug_info_provider,
1085
- local_send_state : value. send_state ( ) . map ( |s| s. into ( ) ) ,
1082
+ local_send_state : item. send_state ( ) . map ( |s| s. into ( ) ) ,
1086
1083
read_receipts,
1087
- origin : value . origin ( ) ,
1088
- can_be_replied_to : value . can_be_replied_to ( ) ,
1089
- shields_provider ,
1084
+ origin : item . origin ( ) ,
1085
+ can_be_replied_to : item . can_be_replied_to ( ) ,
1086
+ lazy_provider ,
1090
1087
}
1091
1088
}
1092
1089
}
@@ -1102,22 +1099,6 @@ impl From<ruma::events::receipt::Receipt> for Receipt {
1102
1099
}
1103
1100
}
1104
1101
1105
- /// Wrapper to retrieve the debug info lazily instead of immediately
1106
- /// transforming it for each timeline event.
1107
- #[ derive( uniffi:: Object ) ]
1108
- pub struct EventTimelineItemDebugInfoProvider ( Arc < matrix_sdk_ui:: timeline:: EventTimelineItem > ) ;
1109
-
1110
- #[ matrix_sdk_ffi_macros:: export]
1111
- impl EventTimelineItemDebugInfoProvider {
1112
- fn get ( & self ) -> EventTimelineItemDebugInfo {
1113
- EventTimelineItemDebugInfo {
1114
- model : format ! ( "{:#?}" , self . 0 ) ,
1115
- original_json : self . 0 . original_json ( ) . map ( |raw| raw. json ( ) . get ( ) . to_owned ( ) ) ,
1116
- latest_edit_json : self . 0 . latest_edit_json ( ) . map ( |raw| raw. json ( ) . get ( ) . to_owned ( ) ) ,
1117
- }
1118
- }
1119
- }
1120
-
1121
1102
#[ derive( Clone , uniffi:: Record ) ]
1122
1103
pub struct EventTimelineItemDebugInfo {
1123
1104
model : String ,
@@ -1269,13 +1250,23 @@ impl TryFrom<EditedContent> for SdkEditedContent {
1269
1250
}
1270
1251
}
1271
1252
1272
- /// Wrapper to retrieve the shields info lazily.
1253
+ /// Wrapper to retrieve some timeline item info lazily.
1273
1254
#[ derive( Clone , uniffi:: Object ) ]
1274
- pub struct EventShieldsProvider ( Arc < matrix_sdk_ui:: timeline:: EventTimelineItem > ) ;
1255
+ pub struct LazyTimelineItemProvider ( Arc < matrix_sdk_ui:: timeline:: EventTimelineItem > ) ;
1275
1256
1276
1257
#[ matrix_sdk_ffi_macros:: export]
1277
- impl EventShieldsProvider {
1258
+ impl LazyTimelineItemProvider {
1259
+ /// Returns the shields for this event timeline item.
1278
1260
fn get_shields ( & self , strict : bool ) -> Option < ShieldState > {
1279
1261
self . 0 . get_shield ( strict) . map ( Into :: into)
1280
1262
}
1263
+
1264
+ /// Returns some debug information for this event timeline item.
1265
+ fn debug_info ( & self ) -> EventTimelineItemDebugInfo {
1266
+ EventTimelineItemDebugInfo {
1267
+ model : format ! ( "{:#?}" , self . 0 ) ,
1268
+ original_json : self . 0 . original_json ( ) . map ( |raw| raw. json ( ) . get ( ) . to_owned ( ) ) ,
1269
+ latest_edit_json : self . 0 . latest_edit_json ( ) . map ( |raw| raw. json ( ) . get ( ) . to_owned ( ) ) ,
1270
+ }
1271
+ }
1281
1272
}
0 commit comments