|
|
|
@ -5,7 +5,7 @@ use log::{error, info, warn}; |
|
|
|
use solstice_proto::{server, User};
|
|
|
|
use thiserror::Error;
|
|
|
|
|
|
|
|
use crate::room::{RoomMembership, RoomState, Visibility};
|
|
|
|
use crate::room::{RoomMembership, RoomState, RoomVisibility};
|
|
|
|
|
|
|
|
/// The error returned by RoomMap functions.
|
|
|
|
#[derive(Debug, Error)]
|
|
|
|
@ -70,12 +70,12 @@ impl RoomMap { |
|
|
|
fn update_one(
|
|
|
|
&mut self,
|
|
|
|
name: String,
|
|
|
|
visibility: Visibility,
|
|
|
|
visibility: RoomVisibility,
|
|
|
|
user_count: u32,
|
|
|
|
old_map: &mut HashMap<String, RoomState>,
|
|
|
|
) {
|
|
|
|
let room = match old_map.remove(&name) {
|
|
|
|
None => RoomState::new(Visibility::Public, user_count as usize),
|
|
|
|
None => RoomState::new(RoomVisibility::Public, user_count as usize),
|
|
|
|
Some(mut room) => {
|
|
|
|
room.visibility = visibility;
|
|
|
|
room.user_count = user_count as usize;
|
|
|
|
@ -95,17 +95,27 @@ impl RoomMap { |
|
|
|
|
|
|
|
// Add all public rooms.
|
|
|
|
for (name, user_count) in response.rooms.drain(..) {
|
|
|
|
self.update_one(name, Visibility::Public, user_count, &mut old_map);
|
|
|
|
self.update_one(name, RoomVisibility::Public, user_count, &mut old_map);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Add all private, owned, rooms.
|
|
|
|
for (name, user_count) in response.owned_private_rooms.drain(..) {
|
|
|
|
self.update_one(name, Visibility::PrivateOwned, user_count, &mut old_map);
|
|
|
|
self.update_one(
|
|
|
|
name,
|
|
|
|
RoomVisibility::PrivateOwned,
|
|
|
|
user_count,
|
|
|
|
&mut old_map,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Add all private, unowned, rooms.
|
|
|
|
for (name, user_count) in response.other_private_rooms.drain(..) {
|
|
|
|
self.update_one(name, Visibility::PrivateOther, user_count, &mut old_map);
|
|
|
|
self.update_one(
|
|
|
|
name,
|
|
|
|
RoomVisibility::PrivateOther,
|
|
|
|
user_count,
|
|
|
|
&mut old_map,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Mark all operated rooms as necessary.
|
|
|
|
@ -268,7 +278,7 @@ mod tests { |
|
|
|
use solstice_proto::server::RoomListResponse;
|
|
|
|
|
|
|
|
use crate::room::{
|
|
|
|
Message, MessageHistory, RoomMembership, RoomState, Visibility,
|
|
|
|
Message, MessageHistory, RoomMembership, RoomState, RoomVisibility,
|
|
|
|
};
|
|
|
|
|
|
|
|
use super::RoomMap;
|
|
|
|
@ -284,8 +294,8 @@ mod tests { |
|
|
|
#[test]
|
|
|
|
fn deserialize_visibility() {
|
|
|
|
assert_eq!(
|
|
|
|
serde_json::from_str::<Visibility>(r#""Public""#).unwrap(),
|
|
|
|
Visibility::Public
|
|
|
|
serde_json::from_str::<RoomVisibility>(r#""Public""#).unwrap(),
|
|
|
|
RoomVisibility::Public
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
@ -340,7 +350,7 @@ mod tests { |
|
|
|
.unwrap(),
|
|
|
|
RoomState {
|
|
|
|
membership: RoomMembership::Joining,
|
|
|
|
visibility: Visibility::PrivateOwned,
|
|
|
|
visibility: RoomVisibility::PrivateOwned,
|
|
|
|
operated: false,
|
|
|
|
user_count: 3,
|
|
|
|
owner: None,
|
|
|
|
@ -389,7 +399,7 @@ mod tests { |
|
|
|
|
|
|
|
assert_eq!(
|
|
|
|
rooms.get_strict("room a").unwrap(),
|
|
|
|
&RoomState::new(Visibility::Public, 42)
|
|
|
|
&RoomState::new(RoomVisibility::Public, 42)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|