fix deletions on readreceipt update

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk 2024-11-22 03:57:29 +00:00
parent 3968d03868
commit b94eeb9580

View file

@ -42,16 +42,14 @@ impl Data {
} }
pub(super) async fn readreceipt_update(&self, user_id: &UserId, room_id: &RoomId, event: &ReceiptEvent) { pub(super) async fn readreceipt_update(&self, user_id: &UserId, room_id: &RoomId, event: &ReceiptEvent) {
type KeyVal<'a> = (&'a RoomId, u64, &'a UserId);
// Remove old entry // Remove old entry
let last_possible_key = (room_id, u64::MAX); let last_possible_key = (room_id, u64::MAX);
self.readreceiptid_readreceipt self.readreceiptid_readreceipt
.rev_keys_from(&last_possible_key) .rev_keys_from_raw(&last_possible_key)
.ignore_err() .ignore_err()
.ready_take_while(|(r, ..): &KeyVal<'_>| *r == room_id) .ready_take_while(|key| key.starts_with(room_id.as_bytes()))
.ready_filter_map(|(r, c, u): KeyVal<'_>| (u == user_id).then_some((r, c, u))) .ready_filter_map(|key| key.ends_with(user_id.as_bytes()).then_some(key))
.ready_for_each(|old: KeyVal<'_>| self.readreceiptid_readreceipt.del(old)) .ready_for_each(|key| self.readreceiptid_readreceipt.del(key))
.await; .await;
let count = self.services.globals.next_count().unwrap(); let count = self.services.globals.next_count().unwrap();