[fractal] API: Remove join_to_room from BackendData
- From: Daniel Garcia Moreno <danigm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [fractal] API: Remove join_to_room from BackendData
- Date: Tue, 23 Jun 2020 08:26:56 +0000 (UTC)
commit aa56bd4cc52c100cda6efba27fbfc6af68dab629
Author: Alejandro DomÃnguez <adomu net-c com>
Date: Tue Jun 2 02:01:50 2020 +0200
API: Remove join_to_room from BackendData
fractal-gtk/src/app/backend_loop.rs | 7 +++---
fractal-gtk/src/appop/invite.rs | 24 ++++++++++++++-------
fractal-gtk/src/appop/mod.rs | 2 ++
fractal-gtk/src/appop/room.rs | 38 ++++++++++++++++++---------------
fractal-gtk/src/appop/sync.rs | 1 +
fractal-gtk/src/widgets/room.rs | 34 +++++++++++++++++++++--------
fractal-matrix-api/src/backend/mod.rs | 10 ++-------
fractal-matrix-api/src/backend/room.rs | 23 ++++----------------
fractal-matrix-api/src/backend/sync.rs | 20 ++++++++---------
fractal-matrix-api/src/backend/types.rs | 15 ++++++++-----
10 files changed, 93 insertions(+), 81 deletions(-)
---
diff --git a/fractal-gtk/src/app/backend_loop.rs b/fractal-gtk/src/app/backend_loop.rs
index 47b39c20..07a4b95e 100644
--- a/fractal-gtk/src/app/backend_loop.rs
+++ b/fractal-gtk/src/app/backend_loop.rs
@@ -32,6 +32,8 @@ pub fn backend_loop(rx: Receiver<BKResponse>) {
let clear_room_list = true;
APPOP!(set_rooms, (rooms, clear_room_list));
// Open the newly joined room
+ let jtr = default.as_ref().map(|r| r.id.clone());
+ APPOP!(set_join_to_room, (jtr));
if let Some(room) = default {
let room_id = room.id;
APPOP!(set_active_room_by_id, (room_id));
@@ -61,9 +63,6 @@ pub fn backend_loop(rx: Receiver<BKResponse>) {
APPOP!(append_directory_rooms, (rooms));
}
- BKResponse::JoinRoom(Ok(_)) => {
- APPOP!(reload_rooms);
- }
BKResponse::RemoveMessage(Ok((room, msg))) => {
APPOP!(remove_message, (room, msg));
}
@@ -168,7 +167,7 @@ pub fn backend_loop(rx: Receiver<BKResponse>) {
APPOP!(show_error, (error));
APPOP!(set_state, (state));
}
- BKResponse::JoinRoom(Err(err)) => {
+ BKResponse::JoinRoomError(err) => {
let err_str = format!("{:?}", err);
error!(
"{}",
diff --git a/fractal-gtk/src/appop/invite.rs b/fractal-gtk/src/appop/invite.rs
index 550184db..5ead6d6b 100644
--- a/fractal-gtk/src/appop/invite.rs
+++ b/fractal-gtk/src/appop/invite.rs
@@ -7,6 +7,7 @@ use gtk;
use gtk::prelude::*;
use std::thread;
+use crate::app::App;
use crate::appop::member::SearchType;
use crate::appop::AppOp;
@@ -225,16 +226,23 @@ impl AppOp {
pub fn accept_inv(&mut self, accept: bool) {
let login_data = unwrap_or_unit_return!(self.login_data.clone());
if let Some(rid) = self.invitation_roomid.take() {
+ let room_id = rid.clone();
if accept {
- self.backend
- .send(BKCommand::AcceptInv(
- login_data.server_url,
- login_data.access_token,
- rid.clone(),
- ))
- .unwrap();
+ let tx = self.backend.clone();
+ thread::spawn(move || {
+ match room::join_room(login_data.server_url, login_data.access_token, room_id) {
+ Ok(jtr) => {
+ let jtr = Some(jtr);
+ APPOP!(set_join_to_room, (jtr));
+ APPOP!(reload_rooms);
+ }
+ Err(err) => {
+ tx.send(BKCommand::SendBKResponse(BKResponse::JoinRoomError(err)))
+ .expect_log("Connection closed");
+ }
+ }
+ });
} else {
- let room_id = rid.clone();
let tx = self.backend.clone();
thread::spawn(move || {
let query =
diff --git a/fractal-gtk/src/appop/mod.rs b/fractal-gtk/src/appop/mod.rs
index 740520f1..3d48cecf 100644
--- a/fractal-gtk/src/appop/mod.rs
+++ b/fractal-gtk/src/appop/mod.rs
@@ -71,6 +71,7 @@ pub struct AppOp {
pub device_id: Option<String>,
pub active_room: Option<RoomId>,
+ pub join_to_room: Option<RoomId>,
pub rooms: RoomList,
pub room_settings: Option<widgets::RoomSettings>,
pub history: Option<widgets::RoomHistory>,
@@ -107,6 +108,7 @@ impl AppOp {
ui: ui,
backend: tx,
active_room: None,
+ join_to_room: None,
rooms: HashMap::new(),
room_settings: None,
history: None,
diff --git a/fractal-gtk/src/appop/room.rs b/fractal-gtk/src/appop/room.rs
index e58add62..057eb210 100644
--- a/fractal-gtk/src/appop/room.rs
+++ b/fractal-gtk/src/appop/room.rs
@@ -180,6 +180,10 @@ impl AppOp {
self.set_state(AppState::NoRoom);
}
+ pub fn set_join_to_room(&mut self, jtr: Option<RoomId>) {
+ self.join_to_room = jtr;
+ }
+
pub fn set_active_room_by_id(&mut self, id: RoomId) {
let login_data = unwrap_or_unit_return!(self.login_data.clone());
if let Some(room) = self.rooms.get(&id) {
@@ -541,24 +545,24 @@ impl AppOp {
.get_text()
.map_or(String::new(), |gstr| gstr.to_string());
- match RoomId::try_from(name.trim()) {
- Ok(room_id) => {
- self.backend
- .send(BKCommand::JoinRoom(
- login_data.server_url,
- login_data.access_token,
- room_id,
- ))
- .unwrap();
- }
- Err(err) => {
- self.backend
- .send(BKCommand::SendBKResponse(BKResponse::JoinRoom(Err(
- err.into()
- ))))
- .unwrap();
+ let tx = self.backend.clone();
+ thread::spawn(move || {
+ match RoomId::try_from(name.trim())
+ .map_err(Into::into)
+ .and_then(|room_id| {
+ room::join_room(login_data.server_url, login_data.access_token, room_id)
+ }) {
+ Ok(jtr) => {
+ let jtr = Some(jtr);
+ APPOP!(set_join_to_room, (jtr));
+ APPOP!(reload_rooms);
+ }
+ Err(err) => {
+ tx.send(BKCommand::SendBKResponse(BKResponse::JoinRoomError(err)))
+ .expect_log("Connection closed");
+ }
}
- }
+ });
}
pub fn new_room(&mut self, r: Room, internal_id: Option<RoomId>) {
diff --git a/fractal-gtk/src/appop/sync.rs b/fractal-gtk/src/appop/sync.rs
index ed6b0d56..80730dc0 100644
--- a/fractal-gtk/src/appop/sync.rs
+++ b/fractal-gtk/src/appop/sync.rs
@@ -26,6 +26,7 @@ impl AppOp {
login_data.server_url,
login_data.access_token,
login_data.uid,
+ self.join_to_room.clone(),
since,
initial,
number_tries,
diff --git a/fractal-gtk/src/widgets/room.rs b/fractal-gtk/src/widgets/room.rs
index daac0982..1dfb8f8f 100644
--- a/fractal-gtk/src/widgets/room.rs
+++ b/fractal-gtk/src/widgets/room.rs
@@ -1,15 +1,19 @@
use crate::i18n::i18n;
+use fractal_api::backend::room;
+use fractal_api::util::ResultExpectLog;
use gtk;
use gtk::prelude::*;
use pango;
+use std::thread;
use crate::types::Room;
-use crate::backend::BKCommand;
+use crate::backend::{BKCommand, BKResponse};
use crate::util::markup_text;
+use crate::app::App;
use crate::appop::AppOp;
use crate::widgets;
@@ -125,15 +129,27 @@ impl<'a> RoomBox<'a> {
let join_button = gtk::Button::new_with_label(i18n("Join").as_str());
let room_id = room.id.clone();
- let backend = self.op.backend.clone();
+ let tx = self.op.backend.clone();
join_button.connect_clicked(move |_| {
- backend
- .send(BKCommand::JoinRoom(
- login_data.server_url.clone(),
- login_data.access_token.clone(),
- room_id.clone(),
- ))
- .unwrap();
+ let server_url = login_data.server_url.clone();
+ let access_token = login_data.access_token.clone();
+ let room_id = room_id.clone();
+ let tx = tx.clone();
+ thread::spawn(move || {
+ match room::join_room(server_url, access_token, room_id.clone()) {
+ Ok(jtr) => {
+ let jtr = Some(jtr);
+ APPOP!(set_join_to_room, (jtr));
+ APPOP!(reload_rooms);
+ }
+ Err(err) => {
+ tx.send(BKCommand::SendBKResponse(BKResponse::JoinRoomError(
+ err.into(),
+ )))
+ .expect_log("Connection closed");
+ }
+ }
+ });
});
join_button.set_property_width_request(JOIN_BUTTON_WIDTH);
diff --git a/fractal-matrix-api/src/backend/mod.rs b/fractal-matrix-api/src/backend/mod.rs
index 4ca9df3f..a3c84aa7 100644
--- a/fractal-matrix-api/src/backend/mod.rs
+++ b/fractal-matrix-api/src/backend/mod.rs
@@ -29,7 +29,6 @@ impl Backend {
pub fn new(tx: Sender<BKResponse>) -> Backend {
let data = BackendData {
rooms_since: String::new(),
- join_to_room: None,
m_direct: HashMap::new(),
};
Backend {
@@ -75,12 +74,13 @@ impl Backend {
}
// Sync module
- Ok(BKCommand::Sync(server, access_token, uid, since, initial, number_tries)) => {
+ Ok(BKCommand::Sync(server, access_token, uid, jtr, since, initial, number_tries)) => {
sync::sync(
self,
server,
access_token,
uid,
+ jtr,
since,
initial,
number_tries,
@@ -91,9 +91,6 @@ impl Backend {
Ok(BKCommand::SetRoom(server, access_token, room_id)) => {
room::set_room(self, server, access_token, room_id)
}
- Ok(BKCommand::JoinRoom(server, access_token, room_id)) => {
- room::join_room(self, server, access_token, room_id)
- }
Ok(BKCommand::AttachFile(server, access_token, msg)) => {
let r = room::attach_file(self, server, access_token, msg);
bkerror!(r, tx, BKResponse::AttachedFile);
@@ -107,9 +104,6 @@ impl Backend {
.expect_log("Connection closed");
});
}
- Ok(BKCommand::AcceptInv(server, access_token, room_id)) => {
- room::join_room(self, server, access_token, room_id)
- }
// Media module
Ok(BKCommand::GetThumbAsync(server, media, ctx)) => {
diff --git a/fractal-matrix-api/src/backend/room.rs b/fractal-matrix-api/src/backend/room.rs
index f6193d86..2d2a98bf 100644
--- a/fractal-matrix-api/src/backend/room.rs
+++ b/fractal-matrix-api/src/backend/room.rs
@@ -311,10 +311,7 @@ pub fn redact_msg(
.or(Err(Error::SendMsgRedactionError(event_id)))
}
-pub fn join_room(bk: &Backend, base: Url, access_token: AccessToken, room_id: RoomId) {
- let tx = bk.tx.clone();
- let data = bk.data.clone();
-
+pub fn join_room(base: Url, access_token: AccessToken, room_id: RoomId) -> Result<RoomId, Error> {
let room_id_or_alias_id = room_id.clone().into();
let params = JoinRoomParameters {
@@ -322,22 +319,10 @@ pub fn join_room(bk: &Backend, base: Url, access_token: AccessToken, room_id: Ro
server_name: Default::default(),
};
- thread::spawn(move || {
- let query = join_room_req(base, &room_id_or_alias_id, ¶ms)
- .map_err(Into::into)
- .and_then(|request| {
- let _ = HTTP_CLIENT.get_client()?.execute(request)?;
-
- Ok(())
- });
-
- if let Ok(_) = query {
- data.lock().unwrap().join_to_room = Some(room_id);
- }
+ let request = join_room_req(base, &room_id_or_alias_id, ¶ms)?;
+ HTTP_CLIENT.get_client()?.execute(request)?;
- tx.send(BKResponse::JoinRoom(query))
- .expect_log("Connection closed");
- });
+ Ok(room_id)
}
pub fn leave_room(base: Url, access_token: AccessToken, room_id: RoomId) -> Result<(), Error> {
diff --git a/fractal-matrix-api/src/backend/sync.rs b/fractal-matrix-api/src/backend/sync.rs
index 3077c226..5dccccec 100644
--- a/fractal-matrix-api/src/backend/sync.rs
+++ b/fractal-matrix-api/src/backend/sync.rs
@@ -25,7 +25,7 @@ use crate::util::ResultExpectLog;
use log::error;
use reqwest::blocking::Client;
-use ruma_identifiers::UserId;
+use ruma_identifiers::{RoomId, UserId};
use serde_json::value::from_value;
use std::{
convert::{TryFrom, TryInto},
@@ -39,6 +39,7 @@ pub fn sync(
base: Url,
access_token: AccessToken,
user_id: UserId,
+ join_to_room: Option<RoomId>,
since: Option<String>,
initial: bool,
number_tries: u64,
@@ -247,16 +248,13 @@ pub fn sync(
} else {
data.lock().unwrap().m_direct = parse_m_direct(&response.account_data.events);
- let rooms_def =
- Room::from_sync_response(&response, user_id, base)
- .map(|rooms| {
- let def =
- data.lock().unwrap().join_to_room.as_ref().and_then(|jtr| {
- rooms.iter().find(|x| x.id == *jtr).cloned()
- });
- (rooms, def)
- })
- .map_err(Into::into);
+ let rooms_def = Room::from_sync_response(&response, user_id, base)
+ .map(|rooms| {
+ let def = join_to_room
+ .and_then(|jtr| rooms.iter().find(|x| x.id == jtr).cloned());
+ (rooms, def)
+ })
+ .map_err(Into::into);
tx.send(BKResponse::Rooms(rooms_def))
.expect_log("Connection closed");
}
diff --git a/fractal-matrix-api/src/backend/types.rs b/fractal-matrix-api/src/backend/types.rs
index f47ce1b4..3f3993f6 100644
--- a/fractal-matrix-api/src/backend/types.rs
+++ b/fractal-matrix-api/src/backend/types.rs
@@ -20,7 +20,15 @@ pub enum BKCommand {
Login(String, String, Url, Url),
Register(String, String, Url, Url),
Guest(Url, Url),
- Sync(Url, AccessToken, UserId, Option<String>, bool, u64),
+ Sync(
+ Url,
+ AccessToken,
+ UserId,
+ Option<RoomId>,
+ Option<String>,
+ bool,
+ u64,
+ ),
GetThumbAsync(Url, String, Sender<Result<String, Error>>),
GetMediaAsync(Url, String, Sender<Result<String, Error>>),
GetMediaListAsync(
@@ -36,10 +44,8 @@ pub enum BKCommand {
SetRoom(Url, AccessToken, RoomId),
ShutDown,
DirectorySearch(Url, AccessToken, String, String, String, bool),
- JoinRoom(Url, AccessToken, RoomId),
AttachFile(Url, AccessToken, Message),
DirectChat(Url, AccessToken, UserId, Member, RoomId),
- AcceptInv(Url, AccessToken, RoomId),
SendBKResponse(BKResponse),
}
@@ -58,7 +64,6 @@ pub enum BKResponse {
RoomMessagesInit(Vec<Message>),
SentMsg(Result<(String, Option<EventId>), Error>),
DirectorySearch(Result<Vec<Room>, Error>),
- JoinRoom(Result<(), Error>),
RemoveMessage(Result<(RoomId, EventId), Error>),
RoomName(RoomId, String),
RoomTopic(RoomId, String),
@@ -99,6 +104,7 @@ pub enum BKResponse {
RoomMessagesToError(Error),
MediaError(Error),
SentMsgRedactionError(Error),
+ JoinRoomError(Error),
}
#[derive(Debug, Clone, Copy)]
@@ -151,7 +157,6 @@ impl ThreadPool {
pub struct BackendData {
pub rooms_since: String,
- pub join_to_room: Option<RoomId>,
pub m_direct: HashMap<UserId, Vec<RoomId>>,
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]