diff --git a/src/api/client_server/alias.rs b/src/api/client_server/alias.rs index f4856639..fb57896d 100644 --- a/src/api/client_server/alias.rs +++ b/src/api/client_server/alias.rs @@ -117,14 +117,13 @@ pub(crate) async fn get_alias_helper(room_alias: OwnedRoomAliasId) -> Result Result = Vec::new(); - // find active servers in room state cache to suggest - for extra_servers in services() + let mut servers: Vec = services() .rooms .state_cache .room_servers(&room_id) .filter_map(Result::ok) - { - servers.push(extra_servers); - } + .collect(); servers.sort_unstable(); servers.dedup(); diff --git a/src/api/client_server/membership.rs b/src/api/client_server/membership.rs index f5e7c893..655dc0a4 100644 --- a/src/api/client_server/membership.rs +++ b/src/api/client_server/membership.rs @@ -55,26 +55,20 @@ pub async fn join_room_by_id_route(body: Ruma) -> )); } - let mut servers = Vec::new(); // There is no body.server_name for /roomId/join - servers.extend( - services() - .rooms - .state_cache - .invite_state(sender_user, &body.room_id)? - .unwrap_or_default() - .iter() - .filter_map(|event| serde_json::from_str(event.json().get()).ok()) - .filter_map(|event: serde_json::Value| event.get("sender").cloned()) - .filter_map(|sender| sender.as_str().map(ToOwned::to_owned)) - .filter_map(|sender| UserId::parse(sender).ok()) - .map(|user| user.server_name().to_owned()), - ); + // There is no body.server_name for /roomId/join + let mut servers = services() + .rooms + .state_cache + .invite_state(sender_user, &body.room_id)? + .unwrap_or_default() + .iter() + .filter_map(|event| serde_json::from_str(event.json().get()).ok()) + .filter_map(|event: serde_json::Value| event.get("sender").cloned()) + .filter_map(|sender| sender.as_str().map(ToOwned::to_owned)) + .filter_map(|sender| UserId::parse(sender).ok()) + .map(|user| user.server_name().to_owned()) + .collect::>(); - // server names being permanently attached to room IDs may be potentally removed - // in the future (see MSC4051). for future compatibility with this, and just - // because it makes sense, we shouldn't fail if the room ID doesn't have a - // server name with it and just use at least the server name from the initial - // invite above if let Some(server) = body.room_id.server_name() { servers.push(server.into()); } @@ -113,6 +107,7 @@ pub async fn join_room_by_id_or_alias_route( } let mut servers = body.server_name.clone(); + servers.extend( services() .rooms @@ -127,11 +122,6 @@ pub async fn join_room_by_id_or_alias_route( .map(|user| user.server_name().to_owned()), ); - // server names being permanently attached to room IDs may be potentally removed - // in the future (see MSC4051). for future compatibility with this, and just - // because it makes sense, we shouldn't fail if the room ID doesn't have a - // server name with it and just use at least the server name from the initial - // invite above if let Some(server) = room_id.server_name() { servers.push(server.into()); } diff --git a/src/api/server_server.rs b/src/api/server_server.rs index 83eeff8c..d5b60dbd 100644 --- a/src/api/server_server.rs +++ b/src/api/server_server.rs @@ -1429,7 +1429,7 @@ pub async fn get_room_information_route( .state_cache .room_servers(&room_id) .filter_map(Result::ok) - .collect::>(); + .collect(); servers.sort_unstable(); servers.dedup(); diff --git a/src/service/rooms/timeline/mod.rs b/src/service/rooms/timeline/mod.rs index 4e9d543e..ad6a10e6 100644 --- a/src/service/rooms/timeline/mod.rs +++ b/src/service/rooms/timeline/mod.rs @@ -1069,17 +1069,15 @@ impl Service { let mut servers: Vec = vec![]; // add server names of any trusted key servers if they're in the room - for server in services() - .rooms - .state_cache - .room_servers(room_id) - .filter_map(Result::ok) - .filter(|server| services().globals.trusted_servers().contains(server)) - { - if server != services().globals.server_name() { - servers.push(server); - } - } + servers.extend( + services() + .rooms + .state_cache + .room_servers(room_id) + .filter_map(Result::ok) + .filter(|server| services().globals.trusted_servers().contains(server)) + .filter(|server| server != services().globals.server_name()), + ); // add server names from room aliases on the room ID let room_aliases = services() @@ -1114,17 +1112,15 @@ impl Service { .unwrap_or_default(); // add server names of the list of admins in the room for backfill server - for server in power_levels - .users - .iter() - .filter(|(_, level)| **level > power_levels.users_default) - .map(|(user_id, _)| user_id.server_name()) - .collect::>() - { - if server != services().globals.server_name() { - servers.push(server.to_owned()); - } - } + servers.extend( + power_levels + .users + .iter() + .filter(|(_, level)| **level > power_levels.users_default) + .map(|(user_id, _)| user_id.server_name()) + .filter(|server| server != &services().globals.server_name()) + .map(ToOwned::to_owned), + ); // don't backfill from ourselves (might be noop if we checked it above already) if let Some(server_index) = servers