mirror of
https://github.com/matrix-org/matrix-rust-sdk.git
synced 2026-05-04 14:04:40 -04:00
refactor(base): Create the room::sync_v2::update_knocked_room response processor.
This patch creates the `update_knocked_room` processor, extracted from the sync v2 flow.
This commit is contained in:
@@ -610,28 +610,14 @@ impl BaseClient {
|
||||
new_rooms.invite.insert(room_id, invited_room_update);
|
||||
}
|
||||
|
||||
for (room_id, new_info) in response.rooms.knock {
|
||||
let room = self.state_store.get_or_create_room(
|
||||
for (room_id, knocked_room) in response.rooms.knock {
|
||||
let knocked_room_update = processors::room::sync_v2::update_knocked_room(
|
||||
&mut context,
|
||||
&room_id,
|
||||
RoomState::Knocked,
|
||||
knocked_room,
|
||||
&self.state_store,
|
||||
self.room_info_notable_update_sender.clone(),
|
||||
);
|
||||
|
||||
let (raw_events, events) = processors::state_events::stripped::collect(
|
||||
&mut context,
|
||||
&new_info.knock_state.events,
|
||||
);
|
||||
|
||||
let mut room_info = room.clone_info();
|
||||
room_info.mark_as_knocked();
|
||||
room_info.mark_state_fully_synced();
|
||||
|
||||
processors::state_events::stripped::dispatch_invite_or_knock(
|
||||
&mut context,
|
||||
(&raw_events, &events),
|
||||
&room,
|
||||
&mut room_info,
|
||||
processors::notification::Notification::new(
|
||||
processors::timeline::builder::Notification::new(
|
||||
&push_rules,
|
||||
&mut notifications,
|
||||
&self.state_store,
|
||||
@@ -639,8 +625,7 @@ impl BaseClient {
|
||||
)
|
||||
.await?;
|
||||
|
||||
context.state_changes.add_room(room_info);
|
||||
new_rooms.knocked.insert(room_id, new_info);
|
||||
new_rooms.knocked.insert(room_id, knocked_room_update);
|
||||
}
|
||||
|
||||
global_account_data_processor.apply(&mut context, &self.state_store).await;
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
use std::collections::{BTreeMap, BTreeSet};
|
||||
|
||||
use ruma::{
|
||||
api::client::sync::sync_events::v3::{InvitedRoom, JoinedRoom, LeftRoom},
|
||||
api::client::sync::sync_events::v3::{InvitedRoom, JoinedRoom, KnockedRoom, LeftRoom},
|
||||
OwnedRoomId, OwnedUserId, RoomId,
|
||||
};
|
||||
use tokio::sync::broadcast::Sender;
|
||||
@@ -25,7 +25,7 @@ use super::super::e2ee;
|
||||
use super::super::{account_data, ephemeral_events, state_events, timeline, Context};
|
||||
use crate::{
|
||||
store::{ambiguity_map::AmbiguityCache, BaseStateStore},
|
||||
sync::{InvitedRoomUpdate, JoinedRoomUpdate, LeftRoomUpdate},
|
||||
sync::{InvitedRoomUpdate, JoinedRoomUpdate, KnockedRoomUpdate, LeftRoomUpdate},
|
||||
RequestedRequiredStates, Result, RoomInfoNotableUpdate, RoomState,
|
||||
};
|
||||
|
||||
@@ -246,3 +246,39 @@ pub async fn update_invited_room(
|
||||
|
||||
Ok(invited_room)
|
||||
}
|
||||
|
||||
/// Process updates of a knocked room.
|
||||
pub async fn update_knocked_room(
|
||||
context: &mut Context,
|
||||
room_id: &RoomId,
|
||||
knocked_room: KnockedRoom,
|
||||
state_store: &BaseStateStore,
|
||||
room_info_notable_update_sender: Sender<RoomInfoNotableUpdate>,
|
||||
notification: timeline::builder::Notification<'_>,
|
||||
) -> Result<KnockedRoomUpdate> {
|
||||
let room = state_store.get_or_create_room(
|
||||
room_id,
|
||||
RoomState::Knocked,
|
||||
room_info_notable_update_sender,
|
||||
);
|
||||
|
||||
let (raw_events, events) =
|
||||
state_events::stripped::collect(context, &knocked_room.knock_state.events);
|
||||
|
||||
let mut room_info = room.clone_info();
|
||||
room_info.mark_as_knocked();
|
||||
room_info.mark_state_fully_synced();
|
||||
|
||||
state_events::stripped::dispatch_invite_or_knock(
|
||||
context,
|
||||
(&raw_events, &events),
|
||||
&room,
|
||||
&mut room_info,
|
||||
notification,
|
||||
)
|
||||
.await?;
|
||||
|
||||
context.state_changes.add_room(room_info);
|
||||
|
||||
Ok(knocked_room)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user