improvement: load aliases from database
This commit is contained in:
parent
18bf67748c
commit
9c26e22ad7
2 changed files with 18 additions and 6 deletions
|
@ -1272,17 +1272,17 @@ pub fn join_room_by_id_or_alias_route(
|
||||||
) -> MatrixResult<join_room_by_id_or_alias::Response> {
|
) -> MatrixResult<join_room_by_id_or_alias::Response> {
|
||||||
let room_id = match RoomId::try_from(body.room_id_or_alias.clone()) {
|
let room_id = match RoomId::try_from(body.room_id_or_alias.clone()) {
|
||||||
Ok(room_id) => room_id,
|
Ok(room_id) => room_id,
|
||||||
Err(room_alias) => {
|
Err(_) => {
|
||||||
if room_alias.server_name() == db.globals.server_name() {
|
if let Some(room_id) = db.rooms.id_from_alias(body.room_id_or_alias.as_ref()).unwrap() {
|
||||||
|
room_id
|
||||||
|
} else {
|
||||||
|
// Ask creator server of the room to join TODO ask someone else when not available
|
||||||
|
//server_server::send_request(data, destination, request)
|
||||||
return MatrixResult(Err(Error {
|
return MatrixResult(Err(Error {
|
||||||
kind: ErrorKind::NotFound,
|
kind: ErrorKind::NotFound,
|
||||||
message: "Room alias not found.".to_owned(),
|
message: "Room alias not found.".to_owned(),
|
||||||
status_code: http::StatusCode::BAD_REQUEST,
|
status_code: http::StatusCode::BAD_REQUEST,
|
||||||
}));
|
}));
|
||||||
} else {
|
|
||||||
// Ask creator server of the room to join TODO ask someone else when not available
|
|
||||||
//server_server::send_request(data, destination, request)
|
|
||||||
todo!();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -26,6 +26,8 @@ pub struct Rooms {
|
||||||
pub(super) roomid_pduleaves: sled::Tree,
|
pub(super) roomid_pduleaves: sled::Tree,
|
||||||
pub(super) roomstateid_pdu: sled::Tree, // RoomStateId = Room + StateType + StateKey
|
pub(super) roomstateid_pdu: sled::Tree, // RoomStateId = Room + StateType + StateKey
|
||||||
|
|
||||||
|
pub(super) alias_roomid: sled::Tree,
|
||||||
|
|
||||||
pub(super) userroomid_joined: sled::Tree,
|
pub(super) userroomid_joined: sled::Tree,
|
||||||
pub(super) roomuserid_joined: sled::Tree,
|
pub(super) roomuserid_joined: sled::Tree,
|
||||||
pub(super) userroomid_invited: sled::Tree,
|
pub(super) userroomid_invited: sled::Tree,
|
||||||
|
@ -646,6 +648,16 @@ impl Rooms {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn id_from_alias(&self, alias: &str) -> Result<Option<RoomId>> {
|
||||||
|
if !alias.starts_with('#') {
|
||||||
|
return Err(Error::BadRequest("room alias does not start with #"));
|
||||||
|
}
|
||||||
|
|
||||||
|
self.alias_roomid.get(alias)?.map_or(Ok(None), |bytes| {
|
||||||
|
Ok(Some(RoomId::try_from(utils::string_from_bytes(&bytes)?)?))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns an iterator over all rooms a user joined.
|
/// Returns an iterator over all rooms a user joined.
|
||||||
pub fn room_members(&self, room_id: &RoomId) -> impl Iterator<Item = Result<UserId>> {
|
pub fn room_members(&self, room_id: &RoomId) -> impl Iterator<Item = Result<UserId>> {
|
||||||
self.roomuserid_joined
|
self.roomuserid_joined
|
||||||
|
|
Loading…
Reference in a new issue