@@ -383,6 +383,12 @@ impl RoomEventCache {
383
383
origin : EventsOrigin :: Cache ,
384
384
} ) ;
385
385
386
+ // Notify observers about the generic update.
387
+ let _ = self
388
+ . inner
389
+ . generic_update_sender
390
+ . send ( RoomEventCacheGenericUpdate :: Cleared { room_id : self . inner . room_id . clone ( ) } ) ;
391
+
386
392
Ok ( ( ) )
387
393
}
388
394
@@ -2444,6 +2450,7 @@ mod timed_tests {
2444
2450
let ( room_event_cache, _drop_handles) = room. event_cache ( ) . await . unwrap ( ) ;
2445
2451
2446
2452
let ( items, mut stream) = room_event_cache. subscribe ( ) . await ;
2453
+ let mut generic_stream = event_cache. subscribe_to_room_generic_updates ( ) ;
2447
2454
2448
2455
// The rooms knows about all cached events.
2449
2456
{
@@ -2486,6 +2493,18 @@ mod timed_tests {
2486
2493
assert_eq ! ( diffs. len( ) , 1 ) ;
2487
2494
assert_let ! ( VectorDiff :: Clear = & diffs[ 0 ] ) ;
2488
2495
2496
+ // … same with a generic update.
2497
+ assert_let_timeout ! (
2498
+ Ok ( RoomEventCacheGenericUpdate :: TimelineUpdated { room_id: received_room_id } ) =
2499
+ generic_stream. recv( )
2500
+ ) ;
2501
+ assert_eq ! ( received_room_id, room_id) ;
2502
+ assert_let_timeout ! (
2503
+ Ok ( RoomEventCacheGenericUpdate :: Cleared { room_id: received_room_id } ) =
2504
+ generic_stream. recv( )
2505
+ ) ;
2506
+ assert_eq ! ( received_room_id, room_id) ;
2507
+
2489
2508
// Events individually are not forgotten by the event cache, after clearing a
2490
2509
// room.
2491
2510
assert ! ( room_event_cache. find_event( event_id1) . await . is_some( ) ) ;
@@ -2896,6 +2915,8 @@ mod timed_tests {
2896
2915
assert_eq ! ( events[ 0 ] . event_id( ) . as_deref( ) , Some ( evid2) ) ;
2897
2916
assert ! ( stream. is_empty( ) ) ;
2898
2917
2918
+ let mut generic_stream = event_cache. subscribe_to_room_generic_updates ( ) ;
2919
+
2899
2920
// Force loading the full linked chunk by back-paginating.
2900
2921
let outcome = room_event_cache. pagination ( ) . run_backwards_once ( 20 ) . await . unwrap ( ) ;
2901
2922
assert_eq ! ( outcome. events. len( ) , 1 ) ;
@@ -2913,6 +2934,13 @@ mod timed_tests {
2913
2934
2914
2935
assert ! ( stream. is_empty( ) ) ;
2915
2936
2937
+ // Same for the generic update.
2938
+ assert_let_timeout ! (
2939
+ Ok ( RoomEventCacheGenericUpdate :: TimelineUpdated { room_id: received_room_id } ) =
2940
+ generic_stream. recv( )
2941
+ ) ;
2942
+ assert_eq ! ( received_room_id, room_id) ;
2943
+
2916
2944
// Shrink the linked chunk to the last chunk.
2917
2945
let diffs = room_event_cache
2918
2946
. inner
@@ -2933,6 +2961,9 @@ mod timed_tests {
2933
2961
2934
2962
assert ! ( stream. is_empty( ) ) ;
2935
2963
2964
+ // No generic update is sent in this case.
2965
+ assert ! ( generic_stream. is_empty( ) ) ;
2966
+
2936
2967
// When reading the events, we do get only the last one.
2937
2968
let events = room_event_cache. events ( ) . await ;
2938
2969
assert_eq ! ( events. len( ) , 1 ) ;
0 commit comments