|
|
|
|
@ -35,8 +35,6 @@ impl Backend {
|
|
|
|
|
let data = BackendData { |
|
|
|
|
user_id: String::from("Guest"), |
|
|
|
|
access_token: String::new(), |
|
|
|
|
server_url: Url::parse("https://matrix.org") |
|
|
|
|
.expect("Wrong server_url value in BackendData"), |
|
|
|
|
scalar_token: None, |
|
|
|
|
scalar_url: Url::parse("https://scalar.vector.im") |
|
|
|
|
.expect("Wrong scalar_url value in BackendData"), |
|
|
|
|
@ -55,12 +53,7 @@ impl Backend {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fn get_base_url(&self) -> Url { |
|
|
|
|
self.data.lock().unwrap().server_url.clone() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fn url(&self, path: &str, mut params: Vec<(&str, String)>) -> Result<Url, Error> { |
|
|
|
|
let base = self.get_base_url(); |
|
|
|
|
fn url(&self, base: Url, path: &str, mut params: Vec<(&str, String)>) -> Result<Url, Error> { |
|
|
|
|
let tk = self.data.lock().unwrap().access_token.clone(); |
|
|
|
|
|
|
|
|
|
params.push(("access_token", tk)); |
|
|
|
|
@ -91,7 +84,7 @@ impl Backend {
|
|
|
|
|
let r = register::login(self, user, passwd, &server); |
|
|
|
|
bkerror!(r, tx, BKResponse::LoginError); |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::Logout) => register::logout(self), |
|
|
|
|
Ok(BKCommand::Logout(server)) => register::logout(self, server), |
|
|
|
|
Ok(BKCommand::Register(user, passwd, server)) => { |
|
|
|
|
let r = register::register(self, user, passwd, &server); |
|
|
|
|
bkerror!(r, tx, BKResponse::LoginError); |
|
|
|
|
@ -100,159 +93,161 @@ impl Backend {
|
|
|
|
|
let r = register::guest(self, &server); |
|
|
|
|
bkerror!(r, tx, BKResponse::GuestLoginError); |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::SetToken(token, uid, server)) => { |
|
|
|
|
let r = register::set_token(self, token, uid, &server); |
|
|
|
|
bkerror!(r, tx, BKResponse::LoginError); |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::SetToken(token, uid)) => register::set_token(self, token, uid), |
|
|
|
|
|
|
|
|
|
// User module
|
|
|
|
|
Ok(BKCommand::GetUsername) => user::get_username(self), |
|
|
|
|
Ok(BKCommand::SetUserName(name)) => user::set_username(self, name), |
|
|
|
|
Ok(BKCommand::GetThreePID) => user::get_threepid(self), |
|
|
|
|
Ok(BKCommand::GetTokenEmail(identity, email, client_secret)) => { |
|
|
|
|
let r = user::get_email_token(self, identity, email, client_secret); |
|
|
|
|
Ok(BKCommand::GetUsername(server)) => user::get_username(self, server), |
|
|
|
|
Ok(BKCommand::SetUserName(server, name)) => user::set_username(self, server, name), |
|
|
|
|
Ok(BKCommand::GetThreePID(server)) => user::get_threepid(self, server), |
|
|
|
|
Ok(BKCommand::GetTokenEmail(server, identity, email, client_secret)) => { |
|
|
|
|
let r = user::get_email_token(self, server, identity, email, client_secret); |
|
|
|
|
bkerror2!(r, tx, BKResponse::GetTokenEmail); |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::GetTokenPhone(identity, phone, client_secret)) => { |
|
|
|
|
let r = user::get_phone_token(self, identity, phone, client_secret); |
|
|
|
|
Ok(BKCommand::GetTokenPhone(server, identity, phone, client_secret)) => { |
|
|
|
|
let r = user::get_phone_token(self, server, identity, phone, client_secret); |
|
|
|
|
bkerror2!(r, tx, BKResponse::GetTokenPhone); |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::SubmitPhoneToken(_, client_secret, sid, token)) => { |
|
|
|
|
user::submit_phone_token(self, client_secret, sid, token) |
|
|
|
|
Ok(BKCommand::SubmitPhoneToken(server, client_secret, sid, token)) => { |
|
|
|
|
user::submit_phone_token(self, server, client_secret, sid, token) |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::AddThreePID(identity, client_secret, sid)) => { |
|
|
|
|
let r = user::add_threepid(self, identity, client_secret, sid); |
|
|
|
|
Ok(BKCommand::AddThreePID(server, identity, client_secret, sid)) => { |
|
|
|
|
let r = user::add_threepid(self, server, identity, client_secret, sid); |
|
|
|
|
bkerror2!(r, tx, BKResponse::AddThreePID); |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::DeleteThreePID(medium, address)) => { |
|
|
|
|
user::delete_three_pid(self, medium, address) |
|
|
|
|
Ok(BKCommand::DeleteThreePID(server, medium, address)) => { |
|
|
|
|
user::delete_three_pid(self, server, medium, address) |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::ChangePassword(username, old_password, new_password)) => { |
|
|
|
|
user::change_password(self, username, old_password, new_password) |
|
|
|
|
Ok(BKCommand::ChangePassword(server, username, old_password, new_password)) => { |
|
|
|
|
user::change_password(self, server, username, old_password, new_password) |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::AccountDestruction(username, password, _)) => { |
|
|
|
|
user::account_destruction(self, username, password) |
|
|
|
|
Ok(BKCommand::AccountDestruction(server, username, password)) => { |
|
|
|
|
user::account_destruction(self, server, username, password) |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::GetAvatar) => user::get_avatar(self), |
|
|
|
|
Ok(BKCommand::SetUserAvatar(file)) => user::set_user_avatar(self, file), |
|
|
|
|
Ok(BKCommand::GetAvatarAsync(member, ctx)) => user::get_avatar_async(self, member, ctx), |
|
|
|
|
Ok(BKCommand::GetUserInfoAsync(sender, ctx)) => { |
|
|
|
|
user::get_user_info_async(self, sender, ctx) |
|
|
|
|
Ok(BKCommand::GetAvatar(server)) => user::get_avatar(self, server), |
|
|
|
|
Ok(BKCommand::SetUserAvatar(server, file)) => user::set_user_avatar(self, server, file), |
|
|
|
|
Ok(BKCommand::GetAvatarAsync(server, member, ctx)) => { |
|
|
|
|
user::get_avatar_async(self, server, member, ctx) |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::GetUserNameAsync(sender, ctx)) => { |
|
|
|
|
user::get_username_async(self, sender, ctx) |
|
|
|
|
Ok(BKCommand::GetUserInfoAsync(server, sender, ctx)) => { |
|
|
|
|
user::get_user_info_async(self, server, sender, ctx) |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::UserSearch(term)) => user::search(self, term), |
|
|
|
|
Ok(BKCommand::GetUserNameAsync(server, sender, ctx)) => { |
|
|
|
|
user::get_username_async(server, sender, ctx) |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::UserSearch(server, term)) => user::search(self, server, term), |
|
|
|
|
|
|
|
|
|
// Sync module
|
|
|
|
|
Ok(BKCommand::Sync(since, initial)) => sync::sync(self, since, initial), |
|
|
|
|
Ok(BKCommand::SyncForced) => sync::force_sync(self), |
|
|
|
|
Ok(BKCommand::Sync(server, since, initial)) => sync::sync(self, server, since, initial), |
|
|
|
|
Ok(BKCommand::SyncForced(server)) => sync::force_sync(self, server), |
|
|
|
|
|
|
|
|
|
// Room module
|
|
|
|
|
Ok(BKCommand::GetRoomMembers(room)) => { |
|
|
|
|
let r = room::get_room_members(self, room); |
|
|
|
|
Ok(BKCommand::GetRoomMembers(server, room)) => { |
|
|
|
|
let r = room::get_room_members(self, server, room); |
|
|
|
|
bkerror2!(r, tx, BKResponse::RoomMembers); |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::GetRoomMessages(room, from)) => { |
|
|
|
|
let r = room::get_room_messages(self, room, from); |
|
|
|
|
Ok(BKCommand::GetRoomMessages(server, room, from)) => { |
|
|
|
|
let r = room::get_room_messages(self, server, room, from); |
|
|
|
|
bkerror2!(r, tx, BKResponse::RoomMessagesTo); |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::GetRoomMessagesFromMsg(room, from)) => { |
|
|
|
|
let r = room::get_room_messages_from_msg(self, room, from); |
|
|
|
|
bkerror2!(r, tx, BKResponse::RoomMessagesTo); |
|
|
|
|
Ok(BKCommand::GetRoomMessagesFromMsg(server, room, from)) => { |
|
|
|
|
room::get_room_messages_from_msg(self, server, room, from) |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::GetMessageContext(message)) => { |
|
|
|
|
let r = room::get_message_context(self, message); |
|
|
|
|
Ok(BKCommand::GetMessageContext(server, message)) => { |
|
|
|
|
let r = room::get_message_context(self, server, message); |
|
|
|
|
bkerror2!(r, tx, BKResponse::RoomMessagesTo); |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::SendMsg(msg)) => { |
|
|
|
|
let r = room::send_msg(self, msg); |
|
|
|
|
Ok(BKCommand::SendMsg(server, msg)) => { |
|
|
|
|
let r = room::send_msg(self, server, msg); |
|
|
|
|
bkerror2!(r, tx, BKResponse::SentMsg); |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::SendMsgRedaction(msg)) => { |
|
|
|
|
let r = room::redact_msg(self, &msg); |
|
|
|
|
Ok(BKCommand::SendMsgRedaction(server, msg)) => { |
|
|
|
|
let r = room::redact_msg(self, server, &msg); |
|
|
|
|
bkerror2!(r, tx, BKResponse::SentMsgRedaction); |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::SendTyping(room)) => { |
|
|
|
|
let r = room::send_typing(self, room); |
|
|
|
|
Ok(BKCommand::SendTyping(server, room)) => { |
|
|
|
|
let r = room::send_typing(self, server, room); |
|
|
|
|
bkerror!(r, tx, BKResponse::SendTypingError); |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::SetRoom(id)) => { |
|
|
|
|
let r = room::set_room(self, id); |
|
|
|
|
Ok(BKCommand::SetRoom(server, id)) => { |
|
|
|
|
let r = room::set_room(self, server, id); |
|
|
|
|
bkerror!(r, tx, BKResponse::SetRoomError); |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::GetRoomAvatar(room)) => { |
|
|
|
|
let r = room::get_room_avatar(self, room); |
|
|
|
|
Ok(BKCommand::GetRoomAvatar(server, room)) => { |
|
|
|
|
let r = room::get_room_avatar(self, server, room); |
|
|
|
|
bkerror2!(r, tx, BKResponse::RoomAvatar); |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::JoinRoom(roomid)) => { |
|
|
|
|
let r = room::join_room(self, roomid); |
|
|
|
|
Ok(BKCommand::JoinRoom(server, roomid)) => { |
|
|
|
|
let r = room::join_room(self, server, roomid); |
|
|
|
|
bkerror2!(r, tx, BKResponse::JoinRoom); |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::LeaveRoom(roomid)) => { |
|
|
|
|
let r = room::leave_room(self, &roomid); |
|
|
|
|
Ok(BKCommand::LeaveRoom(server, roomid)) => { |
|
|
|
|
let r = room::leave_room(self, server, &roomid); |
|
|
|
|
bkerror2!(r, tx, BKResponse::LeaveRoom); |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::MarkAsRead(roomid, evid)) => { |
|
|
|
|
let r = room::mark_as_read(self, &roomid, &evid); |
|
|
|
|
Ok(BKCommand::MarkAsRead(server, roomid, evid)) => { |
|
|
|
|
let r = room::mark_as_read(self, server, &roomid, &evid); |
|
|
|
|
bkerror2!(r, tx, BKResponse::MarkedAsRead); |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::SetRoomName(roomid, name)) => { |
|
|
|
|
let r = room::set_room_name(self, &roomid, &name); |
|
|
|
|
Ok(BKCommand::SetRoomName(server, roomid, name)) => { |
|
|
|
|
let r = room::set_room_name(self, server, &roomid, &name); |
|
|
|
|
bkerror2!(r, tx, BKResponse::SetRoomName); |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::SetRoomTopic(roomid, topic)) => { |
|
|
|
|
let r = room::set_room_topic(self, &roomid, &topic); |
|
|
|
|
Ok(BKCommand::SetRoomTopic(server, roomid, topic)) => { |
|
|
|
|
let r = room::set_room_topic(self, server, &roomid, &topic); |
|
|
|
|
bkerror2!(r, tx, BKResponse::SetRoomTopic); |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::SetRoomAvatar(roomid, fname)) => { |
|
|
|
|
let r = room::set_room_avatar(self, &roomid, &fname); |
|
|
|
|
Ok(BKCommand::SetRoomAvatar(server, roomid, fname)) => { |
|
|
|
|
let r = room::set_room_avatar(self, server, &roomid, &fname); |
|
|
|
|
bkerror2!(r, tx, BKResponse::SetRoomAvatar); |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::AttachFile(msg)) => { |
|
|
|
|
let r = room::attach_file(self, msg); |
|
|
|
|
Ok(BKCommand::AttachFile(server, msg)) => { |
|
|
|
|
let r = room::attach_file(self, server, msg); |
|
|
|
|
bkerror2!(r, tx, BKResponse::AttachedFile); |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::NewRoom(name, privacy, internalid)) => { |
|
|
|
|
let r = room::new_room(self, &name, privacy, internalid.clone()); |
|
|
|
|
Ok(BKCommand::NewRoom(server, name, privacy, internalid)) => { |
|
|
|
|
let r = room::new_room(self, server, &name, privacy, internalid.clone()); |
|
|
|
|
if let Err(e) = r { |
|
|
|
|
tx.send(BKResponse::NewRoom(Err(e), internalid)) |
|
|
|
|
.expect_log("Connection closed"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::DirectChat(user, internalid)) => { |
|
|
|
|
let r = room::direct_chat(self, &user, internalid.clone()); |
|
|
|
|
Ok(BKCommand::DirectChat(server, user, internalid)) => { |
|
|
|
|
let r = room::direct_chat(self, server, &user, internalid.clone()); |
|
|
|
|
if let Err(e) = r { |
|
|
|
|
tx.send(BKResponse::NewRoom(Err(e), internalid)) |
|
|
|
|
.expect_log("Connection closed"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::AddToFav(roomid, tofav)) => { |
|
|
|
|
let r = room::add_to_fav(self, roomid, tofav); |
|
|
|
|
Ok(BKCommand::AddToFav(server, roomid, tofav)) => { |
|
|
|
|
let r = room::add_to_fav(self, server, roomid, tofav); |
|
|
|
|
bkerror2!(r, tx, BKResponse::AddedToFav); |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::AcceptInv(roomid)) => { |
|
|
|
|
let r = room::join_room(self, roomid); |
|
|
|
|
Ok(BKCommand::AcceptInv(server, roomid)) => { |
|
|
|
|
let r = room::join_room(self, server, roomid); |
|
|
|
|
bkerror2!(r, tx, BKResponse::JoinRoom); |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::RejectInv(roomid)) => { |
|
|
|
|
let r = room::leave_room(self, &roomid); |
|
|
|
|
Ok(BKCommand::RejectInv(server, roomid)) => { |
|
|
|
|
let r = room::leave_room(self, server, &roomid); |
|
|
|
|
bkerror2!(r, tx, BKResponse::LeaveRoom); |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::Invite(room, userid)) => { |
|
|
|
|
let r = room::invite(self, &room, &userid); |
|
|
|
|
Ok(BKCommand::Invite(server, room, userid)) => { |
|
|
|
|
let r = room::invite(self, server, &room, &userid); |
|
|
|
|
bkerror!(r, tx, BKResponse::InviteError); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Media module
|
|
|
|
|
Ok(BKCommand::GetThumbAsync(media, ctx)) => media::get_thumb_async(self, media, ctx), |
|
|
|
|
Ok(BKCommand::GetMediaAsync(media, ctx)) => media::get_media_async(self, media, ctx), |
|
|
|
|
Ok(BKCommand::GetMediaListAsync(roomid, first_media_id, prev_batch, ctx)) => { |
|
|
|
|
media::get_media_list_async(self, &roomid, first_media_id, prev_batch, ctx) |
|
|
|
|
Ok(BKCommand::GetThumbAsync(server, media, ctx)) => { |
|
|
|
|
media::get_thumb_async(self, server, media, ctx) |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::GetMediaAsync(server, media, ctx)) => { |
|
|
|
|
media::get_media_async(self, server, media, ctx) |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::GetMediaListAsync(server, roomid, first_media_id, prev_batch, ctx)) => { |
|
|
|
|
media::get_media_list_async(self, server, &roomid, first_media_id, prev_batch, ctx) |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::GetMedia(media)) => media::get_media(self, media), |
|
|
|
|
Ok(BKCommand::GetMediaUrl(media, ctx)) => { |
|
|
|
|
media::get_media_url(self, media.to_string(), ctx) |
|
|
|
|
Ok(BKCommand::GetMedia(server, media)) => media::get_media(self, server, media), |
|
|
|
|
Ok(BKCommand::GetMediaUrl(server, media, ctx)) => { |
|
|
|
|
media::get_media_url(self, server, media, ctx) |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::GetFileAsync(url, ctx)) => { |
|
|
|
|
let r = media::get_file_async(url, ctx); |
|
|
|
|
@ -260,8 +255,8 @@ impl Backend {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Directory module
|
|
|
|
|
Ok(BKCommand::DirectoryProtocols) => directory::protocols(self), |
|
|
|
|
Ok(BKCommand::DirectorySearch(dhs, dq, dtp, more)) => { |
|
|
|
|
Ok(BKCommand::DirectoryProtocols(server)) => directory::protocols(self, server), |
|
|
|
|
Ok(BKCommand::DirectorySearch(server, dhs, dq, dtp, more)) => { |
|
|
|
|
let hs = match dhs { |
|
|
|
|
ref a if a.is_empty() => None, |
|
|
|
|
b => Some(b), |
|
|
|
|
@ -277,7 +272,7 @@ impl Backend {
|
|
|
|
|
b => Some(b), |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
let r = directory::room_search(self, hs, q, tp, more); |
|
|
|
|
let r = directory::room_search(self, server, hs, q, tp, more); |
|
|
|
|
bkerror2!(r, tx, BKResponse::DirectorySearch); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -286,8 +281,8 @@ impl Backend {
|
|
|
|
|
let r = stickers::list(self); |
|
|
|
|
bkerror2!(r, tx, BKResponse::Stickers); |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::SendSticker(room, sticker)) => { |
|
|
|
|
let r = stickers::send(self, &room, &sticker); |
|
|
|
|
Ok(BKCommand::SendSticker(server, room, sticker)) => { |
|
|
|
|
let r = stickers::send(self, server, &room, &sticker); |
|
|
|
|
bkerror2!(r, tx, BKResponse::Stickers); |
|
|
|
|
} |
|
|
|
|
Ok(BKCommand::PurchaseSticker(group)) => { |
|
|
|
|
|