Fix room-leave conditions for rooms without joined users or remote servers.
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
|
|
||||||
use futures::{FutureExt, StreamExt, TryFutureExt, pin_mut};
|
use futures::{FutureExt, StreamExt, TryFutureExt, future::ready, pin_mut};
|
||||||
use ruma::{
|
use ruma::{
|
||||||
CanonicalJsonObject, CanonicalJsonValue, OwnedServerName, RoomId, UserId,
|
CanonicalJsonObject, CanonicalJsonValue, OwnedServerName, RoomId, UserId,
|
||||||
api::federation,
|
api::federation,
|
||||||
@@ -70,11 +70,22 @@ pub async fn leave(
|
|||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let member_event = self
|
||||||
|
.services
|
||||||
|
.state_accessor
|
||||||
|
.room_state_get_content::<RoomMemberEventContent>(
|
||||||
|
room_id,
|
||||||
|
&StateEventType::RoomMember,
|
||||||
|
user_id.as_str(),
|
||||||
|
)
|
||||||
|
.await;
|
||||||
|
|
||||||
let dont_have_room = self
|
let dont_have_room = self
|
||||||
.services
|
.services
|
||||||
.state_cache
|
.state_cache
|
||||||
.server_in_room(self.services.globals.server_name(), room_id)
|
.server_in_room(self.services.globals.server_name(), room_id)
|
||||||
.is_false();
|
.is_false()
|
||||||
|
.and(ready(member_event.as_ref().is_err()));
|
||||||
|
|
||||||
let not_knocked = self
|
let not_knocked = self
|
||||||
.services
|
.services
|
||||||
@@ -122,16 +133,7 @@ pub async fn leave(
|
|||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
} else {
|
} else {
|
||||||
let Ok(event) = self
|
let Ok(event) = member_event else {
|
||||||
.services
|
|
||||||
.state_accessor
|
|
||||||
.room_state_get_content::<RoomMemberEventContent>(
|
|
||||||
room_id,
|
|
||||||
&StateEventType::RoomMember,
|
|
||||||
user_id.as_str(),
|
|
||||||
)
|
|
||||||
.await
|
|
||||||
else {
|
|
||||||
debug_warn!(
|
debug_warn!(
|
||||||
"Trying to leave a room you are not a member of, marking room as left locally."
|
"Trying to leave a room you are not a member of, marking room as left locally."
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user