mirror of
https://forgejo.ellis.link/continuwuation/continuwuity.git
synced 2026-05-26 20:49:55 +00:00
fix: Include target user's membership when building stripped state
This commit is contained in:
@@ -163,7 +163,11 @@ pub(crate) async fn invite_helper(
|
|||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
let invite_room_state = services.rooms.state.summary_stripped(&pdu, room_id).await;
|
let invite_room_state = services
|
||||||
|
.rooms
|
||||||
|
.state
|
||||||
|
.summary_stripped(&pdu, room_id, recipient_user)
|
||||||
|
.await;
|
||||||
|
|
||||||
drop(state_lock);
|
drop(state_lock);
|
||||||
|
|
||||||
|
|||||||
@@ -183,7 +183,7 @@ pub(crate) async fn create_knock_event_v1_route(
|
|||||||
let knock_room_state = services
|
let knock_room_state = services
|
||||||
.rooms
|
.rooms
|
||||||
.state
|
.state
|
||||||
.summary_stripped(&pdu, &body.room_id)
|
.summary_stripped(&pdu, &body.room_id, &sender)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
Ok(create_knock_event::v1::Response::new(knock_room_state))
|
Ok(create_knock_event::v1::Response::new(knock_room_state))
|
||||||
|
|||||||
@@ -802,7 +802,7 @@ async fn fix_local_invite_state(services: &Services) -> Result {
|
|||||||
&& services.globals.user_is_local(&membership_event.sender) {
|
&& services.globals.user_is_local(&membership_event.sender) {
|
||||||
|
|
||||||
// build and save stripped state for their invite in the database
|
// build and save stripped state for their invite in the database
|
||||||
let stripped_state = services.rooms.state.summary_stripped(&membership_event, &room_id).await;
|
let stripped_state = services.rooms.state.summary_stripped(&membership_event, &room_id, &user_id).await;
|
||||||
userroomid_invitestate.put((&user_id, &room_id), Json(stripped_state));
|
userroomid_invitestate.put((&user_id, &room_id), Json(stripped_state));
|
||||||
fixed = fixed.saturating_add(1);
|
fixed = fixed.saturating_add(1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -300,12 +300,13 @@ impl Service {
|
|||||||
&self,
|
&self,
|
||||||
event: &'a E,
|
event: &'a E,
|
||||||
room_id: &RoomId,
|
room_id: &RoomId,
|
||||||
|
target_user: &UserId,
|
||||||
) -> Vec<RawStrippedState>
|
) -> Vec<RawStrippedState>
|
||||||
where
|
where
|
||||||
E: Event + Send + Sync,
|
E: Event + Send + Sync,
|
||||||
&'a E: Event + Send,
|
&'a E: Event + Send,
|
||||||
{
|
{
|
||||||
let cells = [
|
let mut state_events = [
|
||||||
(&StateEventType::RoomCreate, ""),
|
(&StateEventType::RoomCreate, ""),
|
||||||
(&StateEventType::RoomJoinRules, ""),
|
(&StateEventType::RoomJoinRules, ""),
|
||||||
(&StateEventType::RoomCanonicalAlias, ""),
|
(&StateEventType::RoomCanonicalAlias, ""),
|
||||||
@@ -314,9 +315,14 @@ impl Service {
|
|||||||
(&StateEventType::RoomMember, event.sender().as_str()), // Add recommended events
|
(&StateEventType::RoomMember, event.sender().as_str()), // Add recommended events
|
||||||
(&StateEventType::RoomEncryption, ""),
|
(&StateEventType::RoomEncryption, ""),
|
||||||
(&StateEventType::RoomTopic, ""),
|
(&StateEventType::RoomTopic, ""),
|
||||||
];
|
]
|
||||||
|
.to_vec();
|
||||||
|
|
||||||
let fetches = cells.into_iter().map(|(event_type, state_key)| {
|
if target_user != event.sender() {
|
||||||
|
state_events.push((&StateEventType::RoomMember, target_user.as_str()));
|
||||||
|
}
|
||||||
|
|
||||||
|
let fetches = state_events.into_iter().map(|(event_type, state_key)| {
|
||||||
self.services
|
self.services
|
||||||
.state_accessor
|
.state_accessor
|
||||||
.room_state_get(room_id, event_type, state_key)
|
.room_state_get(room_id, event_type, state_key)
|
||||||
|
|||||||
@@ -119,7 +119,11 @@ pub async fn update_membership(
|
|||||||
self.mark_as_joined(user_id, room_id);
|
self.mark_as_joined(user_id, room_id);
|
||||||
},
|
},
|
||||||
| MembershipState::Invite => {
|
| MembershipState::Invite => {
|
||||||
let last_state = self.services.state.summary_stripped(pdu, room_id).await;
|
let last_state = self
|
||||||
|
.services
|
||||||
|
.state
|
||||||
|
.summary_stripped(pdu, room_id, user_id)
|
||||||
|
.await;
|
||||||
|
|
||||||
self.mark_as_invited(user_id, room_id, pdu.sender(), last_state, None)
|
self.mark_as_invited(user_id, room_id, pdu.sender(), last_state, None)
|
||||||
.await?;
|
.await?;
|
||||||
|
|||||||
Reference in New Issue
Block a user