@@ -846,6 +846,121 @@ impl SledStore {
846
846
847
847
Ok ( self . media . apply_batch ( batch) ?)
848
848
}
849
+
850
+ async fn remove_room ( & self , room_id : & RoomId ) -> Result < ( ) > {
851
+ let room_key = room_id. encode ( ) ;
852
+
853
+ let mut members_batch = sled:: Batch :: default ( ) ;
854
+ for key in self . members . scan_prefix ( room_key. as_slice ( ) ) . keys ( ) {
855
+ members_batch. remove ( key?)
856
+ }
857
+
858
+ let mut profiles_batch = sled:: Batch :: default ( ) ;
859
+ for key in self . profiles . scan_prefix ( room_key. as_slice ( ) ) . keys ( ) {
860
+ profiles_batch. remove ( key?)
861
+ }
862
+
863
+ let mut display_names_batch = sled:: Batch :: default ( ) ;
864
+ for key in self . display_names . scan_prefix ( room_key. as_slice ( ) ) . keys ( ) {
865
+ display_names_batch. remove ( key?)
866
+ }
867
+
868
+ let mut joined_user_ids_batch = sled:: Batch :: default ( ) ;
869
+ for key in self . joined_user_ids . scan_prefix ( room_key. as_slice ( ) ) . keys ( ) {
870
+ joined_user_ids_batch. remove ( key?)
871
+ }
872
+
873
+ let mut invited_user_ids_batch = sled:: Batch :: default ( ) ;
874
+ for key in self . invited_user_ids . scan_prefix ( room_key. as_slice ( ) ) . keys ( ) {
875
+ invited_user_ids_batch. remove ( key?)
876
+ }
877
+
878
+ let mut room_state_batch = sled:: Batch :: default ( ) ;
879
+ for key in self . room_state . scan_prefix ( room_key. as_slice ( ) ) . keys ( ) {
880
+ room_state_batch. remove ( key?)
881
+ }
882
+
883
+ let mut room_account_data_batch = sled:: Batch :: default ( ) ;
884
+ for key in self . room_account_data . scan_prefix ( room_key. as_slice ( ) ) . keys ( ) {
885
+ room_account_data_batch. remove ( key?)
886
+ }
887
+
888
+ let mut stripped_members_batch = sled:: Batch :: default ( ) ;
889
+ for key in self . stripped_members . scan_prefix ( room_key. as_slice ( ) ) . keys ( ) {
890
+ stripped_members_batch. remove ( key?)
891
+ }
892
+
893
+ let mut stripped_room_state_batch = sled:: Batch :: default ( ) ;
894
+ for key in self . stripped_room_state . scan_prefix ( room_key. as_slice ( ) ) . keys ( ) {
895
+ stripped_room_state_batch. remove ( key?)
896
+ }
897
+
898
+ let mut room_user_receipts_batch = sled:: Batch :: default ( ) ;
899
+ for key in self . room_user_receipts . scan_prefix ( room_key. as_slice ( ) ) . keys ( ) {
900
+ room_user_receipts_batch. remove ( key?)
901
+ }
902
+
903
+ let mut room_event_receipts_batch = sled:: Batch :: default ( ) ;
904
+ for key in self . room_event_receipts . scan_prefix ( room_key. as_slice ( ) ) . keys ( ) {
905
+ room_event_receipts_batch. remove ( key?)
906
+ }
907
+
908
+ let ret: Result < ( ) , TransactionError < SerializationError > > = (
909
+ & self . members ,
910
+ & self . profiles ,
911
+ & self . display_names ,
912
+ & self . joined_user_ids ,
913
+ & self . invited_user_ids ,
914
+ & self . room_info ,
915
+ & self . room_state ,
916
+ & self . room_account_data ,
917
+ & self . stripped_room_info ,
918
+ & self . stripped_members ,
919
+ & self . stripped_room_state ,
920
+ & self . room_user_receipts ,
921
+ & self . room_event_receipts ,
922
+ )
923
+ . transaction (
924
+ |(
925
+ members,
926
+ profiles,
927
+ display_names,
928
+ joined,
929
+ invited,
930
+ rooms,
931
+ state,
932
+ room_account_data,
933
+ stripped_rooms,
934
+ stripped_members,
935
+ stripped_state,
936
+ room_user_receipts,
937
+ room_event_receipts,
938
+ ) | {
939
+ rooms. remove ( room_key. as_slice ( ) ) ?;
940
+ stripped_rooms. remove ( room_key. as_slice ( ) ) ?;
941
+
942
+ members. apply_batch ( & members_batch) ?;
943
+ profiles. apply_batch ( & profiles_batch) ?;
944
+ display_names. apply_batch ( & display_names_batch) ?;
945
+ joined. apply_batch ( & joined_user_ids_batch) ?;
946
+ invited. apply_batch ( & invited_user_ids_batch) ?;
947
+ state. apply_batch ( & room_state_batch) ?;
948
+ room_account_data. apply_batch ( & room_account_data_batch) ?;
949
+ stripped_members. apply_batch ( & stripped_members_batch) ?;
950
+ stripped_state. apply_batch ( & stripped_room_state_batch) ?;
951
+ room_user_receipts. apply_batch ( & room_user_receipts_batch) ?;
952
+ room_event_receipts. apply_batch ( & room_event_receipts_batch) ?;
953
+
954
+ Ok ( ( ) )
955
+ } ,
956
+ ) ;
957
+
958
+ ret?;
959
+
960
+ self . inner . flush_async ( ) . await ?;
961
+
962
+ Ok ( ( ) )
963
+ }
849
964
}
850
965
851
966
#[ async_trait]
@@ -987,6 +1102,10 @@ impl StateStore for SledStore {
987
1102
async fn remove_media_content_for_uri ( & self , uri : & MxcUri ) -> Result < ( ) > {
988
1103
self . remove_media_content_for_uri ( uri) . await
989
1104
}
1105
+
1106
+ async fn remove_room ( & self , room_id : & RoomId ) -> Result < ( ) > {
1107
+ self . remove_room ( room_id) . await
1108
+ }
990
1109
}
991
1110
992
1111
#[ cfg( test) ]
0 commit comments