[fractal] API: Remove m_direct from BackendData and BackendData itself
- From: Daniel Garcia Moreno <danigm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [fractal] API: Remove m_direct from BackendData and BackendData itself
- Date: Tue, 23 Jun 2020 08:27:11 +0000 (UTC)
commit 7c177a3adc28d1c6890af184095cab362656d6b4
Author: Alejandro DomÃnguez <adomu net-c com>
Date: Sat Jun 6 03:08:25 2020 +0200
API: Remove m_direct from BackendData and BackendData itself
fractal-gtk/src/app/backend_loop.rs | 6 +--
fractal-gtk/src/appop/room.rs | 8 ++-
fractal-gtk/src/appop/start_chat.rs | 33 +++++++++---
fractal-matrix-api/src/backend/mod.rs | 16 ------
fractal-matrix-api/src/backend/room.rs | 93 +++++++++++++--------------------
fractal-matrix-api/src/backend/sync.rs | 4 --
fractal-matrix-api/src/backend/types.rs | 9 +---
7 files changed, 67 insertions(+), 102 deletions(-)
---
diff --git a/fractal-gtk/src/app/backend_loop.rs b/fractal-gtk/src/app/backend_loop.rs
index e67270bb..fb35823e 100644
--- a/fractal-gtk/src/app/backend_loop.rs
+++ b/fractal-gtk/src/app/backend_loop.rs
@@ -83,10 +83,6 @@ pub fn backend_loop(rx: Receiver<BKResponse>) {
BKResponse::AttachedFile(Ok(msg)) => {
APPOP!(attached_file, (msg));
}
- BKResponse::NewRoom(Ok(r), internal_id) => {
- let id = Some(internal_id);
- APPOP!(new_room, (r, id));
- }
// errors
BKResponse::AccountDestructionError(err) => {
@@ -151,7 +147,7 @@ pub fn backend_loop(rx: Receiver<BKResponse>) {
);
APPOP!(show_error_dialog_in_settings, (error));
}
- BKResponse::NewRoom(Err(err), internal_id) => {
+ BKResponse::NewRoomError(err, internal_id) => {
let err_str = format!("{:?}", err);
error!(
"{}",
diff --git a/fractal-gtk/src/appop/room.rs b/fractal-gtk/src/appop/room.rs
index 057eb210..5c8d381c 100644
--- a/fractal-gtk/src/appop/room.rs
+++ b/fractal-gtk/src/appop/room.rs
@@ -16,8 +16,7 @@ use crate::app::App;
use crate::appop::AppOp;
use crate::backend;
-use crate::backend::BKCommand;
-use crate::backend::BKResponse;
+use crate::backend::{BKCommand, BKResponse};
use fractal_api::util::cache_dir_path;
use crate::actions;
@@ -400,9 +399,8 @@ impl AppOp {
APPOP!(new_room, (r, id));
}
Err(err) => {
- tx.send(BKCommand::SendBKResponse(BKResponse::NewRoom(
- Err(err),
- int_id,
+ tx.send(BKCommand::SendBKResponse(BKResponse::NewRoomError(
+ err, int_id,
)))
.expect_log("Connection closed");
}
diff --git a/fractal-gtk/src/appop/start_chat.rs b/fractal-gtk/src/appop/start_chat.rs
index 3cba7936..148e5fd3 100644
--- a/fractal-gtk/src/appop/start_chat.rs
+++ b/fractal-gtk/src/appop/start_chat.rs
@@ -1,12 +1,16 @@
+use fractal_api::backend::room;
use fractal_api::identifiers::RoomId;
+use fractal_api::util::ResultExpectLog;
use gtk;
use gtk::prelude::*;
+use std::thread;
use crate::actions::AppState;
+use crate::app::App;
use crate::appop::AppOp;
use crate::appop::SearchType;
-use crate::backend::BKCommand;
+use crate::backend::{BKCommand, BKResponse};
use crate::types::{Room, RoomMembership, RoomTag};
impl AppOp {
@@ -20,15 +24,30 @@ impl AppOp {
let internal_id = RoomId::new(&login_data.server_url.to_string())
.expect("The server domain should have been validated");
- self.backend
- .send(BKCommand::DirectChat(
+
+ let int_id = internal_id.clone();
+ let member = user.0.clone();
+ let tx = self.backend.clone();
+ thread::spawn(move || {
+ match room::direct_chat(
login_data.server_url,
login_data.access_token,
login_data.uid,
- user.0.clone(),
- internal_id.clone(),
- ))
- .unwrap();
+ member,
+ ) {
+ Ok(r) => {
+ let id = Some(int_id);
+ APPOP!(new_room, (r, id));
+ }
+ Err(err) => {
+ tx.send(BKCommand::SendBKResponse(BKResponse::NewRoomError(
+ err, int_id,
+ )))
+ .expect_log("Connection closed");
+ }
+ }
+ });
+
self.close_direct_chat_dialog();
let fakeroom = Room {
diff --git a/fractal-matrix-api/src/backend/mod.rs b/fractal-matrix-api/src/backend/mod.rs
index 07b9515c..ed99aae0 100644
--- a/fractal-matrix-api/src/backend/mod.rs
+++ b/fractal-matrix-api/src/backend/mod.rs
@@ -1,8 +1,6 @@
-use std::collections::HashMap;
use std::sync::mpsc::channel;
use std::sync::mpsc::RecvError;
use std::sync::mpsc::{Receiver, Sender};
-use std::sync::{Arc, Mutex};
use std::thread;
use crate::util::ResultExpectLog;
@@ -22,17 +20,12 @@ pub mod user;
pub use self::types::BKCommand;
pub use self::types::BKResponse;
pub use self::types::Backend;
-pub use self::types::BackendData;
pub use self::types::RoomType;
impl Backend {
pub fn new(tx: Sender<BKResponse>) -> Backend {
- let data = BackendData {
- m_direct: HashMap::new(),
- };
Backend {
tx,
- data: Arc::new(Mutex::new(data)),
user_info_cache: CacheMap::new().timeout(60 * 60),
thread_pool: ThreadPool::new(20),
}
@@ -94,15 +87,6 @@ impl Backend {
let r = room::attach_file(self, server, access_token, msg);
bkerror!(r, tx, BKResponse::AttachedFile);
}
- Ok(BKCommand::DirectChat(server, access_token, uid, user, internal_id)) => {
- let data = self.data.clone();
-
- thread::spawn(move || {
- let room_res = room::direct_chat(data, server, access_token, uid, user);
- tx.send(BKResponse::NewRoom(room_res, internal_id))
- .expect_log("Connection closed");
- });
- }
// 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 2d2a98bf..b1905572 100644
--- a/fractal-matrix-api/src/backend/room.rs
+++ b/fractal-matrix-api/src/backend/room.rs
@@ -7,7 +7,6 @@ use url::Url;
use std::collections::HashMap;
use std::convert::TryFrom;
-use std::sync::{Arc, Mutex};
use std::time::Duration;
use crate::error::Error;
@@ -23,7 +22,6 @@ use crate::util::HTTP_CLIENT;
use crate::backend::types::BKResponse;
use crate::backend::types::Backend;
-use crate::backend::types::BackendData;
use crate::backend::types::RoomType;
use crate::r0::config::get_global_account_data::request as get_global_account_data;
@@ -524,74 +522,51 @@ pub fn new_room(
}
fn update_direct_chats(
- data: Arc<Mutex<BackendData>>,
base: Url,
access_token: AccessToken,
user_id: UserId,
room_id: RoomId,
user: Member,
-) {
+) -> Result<(), Error> {
let params = GetGlobalAccountDataParameters {
access_token: access_token.clone(),
};
- let directs = get_global_account_data(base.clone(), ¶ms, &user_id, "m.direct")
- .map_err::<Error, _>(Into::into)
- .and_then(|request| {
- let response = HTTP_CLIENT
- .get_client()?
- .execute(request)?
- .json::<JsonValue>()?;
+ let request = get_global_account_data(base.clone(), ¶ms, &user_id, "m.direct")?;
+ let response: JsonValue = HTTP_CLIENT.get_client()?.execute(request)?.json()?;
- response
- .as_object()
- .into_iter()
- .flatten()
- .map(|(uid, rooms)| {
- let roomlist = rooms
- .as_array()
- .unwrap()
- .iter()
- .map(|x| RoomId::try_from(x.as_str().unwrap_or_default()))
- .collect::<Result<Vec<RoomId>, IdError>>()?;
- Ok((UserId::try_from(uid.as_str())?, roomlist))
- })
- .collect::<Result<HashMap<UserId, Vec<RoomId>>, IdError>>()
- .map_err(Into::into)
- });
+ let mut directs = response
+ .as_object()
+ .into_iter()
+ .flatten()
+ .map(|(uid, rooms)| {
+ let roomlist = rooms
+ .as_array()
+ .unwrap()
+ .iter()
+ .map(|x| RoomId::try_from(x.as_str().unwrap_or_default()))
+ .collect::<Result<Vec<RoomId>, IdError>>()?;
+ Ok((UserId::try_from(uid.as_str())?, roomlist))
+ })
+ .collect::<Result<HashMap<UserId, Vec<RoomId>>, IdError>>()?;
- match directs {
- Ok(mut directs) => {
- if let Some(v) = directs.get_mut(&user.uid) {
- v.push(room_id);
- } else {
- directs.insert(user.uid, vec![room_id]);
- }
- data.lock().unwrap().m_direct = directs.clone();
-
- let params = SetGlobalAccountDataParameters {
- access_token: access_token.clone(),
- };
-
- if let Err(err) =
- set_global_account_data(base, ¶ms, &json!(directs), &user_id, "m.direct")
- .map_err::<Error, _>(Into::into)
- .and_then(|request| {
- HTTP_CLIENT
- .get_client()?
- .execute(request)
- .map_err(Into::into)
- })
- {
- error!("{:?}", err);
- };
- }
- Err(err) => error!("Can't set m.direct: {:?}", err),
+ if let Some(v) = directs.get_mut(&user.uid) {
+ v.push(room_id);
+ } else {
+ directs.insert(user.uid, vec![room_id]);
+ }
+
+ let params = SetGlobalAccountDataParameters {
+ access_token: access_token.clone(),
};
+
+ let request = set_global_account_data(base, ¶ms, &json!(directs), &user_id, "m.direct")?;
+ HTTP_CLIENT.get_client()?.execute(request)?;
+
+ Ok(())
}
pub fn direct_chat(
- data: Arc<Mutex<BackendData>>,
base: Url,
access_token: AccessToken,
user_id: UserId,
@@ -618,8 +593,7 @@ pub fn direct_chat(
let request = create_room(base.clone(), ¶ms, &body)?;
let response: CreateRoomResponse = HTTP_CLIENT.get_client()?.execute(request)?.json()?;
- update_direct_chats(
- data,
+ let directs = update_direct_chats(
base,
access_token,
user_id,
@@ -627,6 +601,11 @@ pub fn direct_chat(
user.clone(),
);
+ if let Err(err) = directs {
+ error!("Can't set m.direct: {:?}", err);
+ return Err(err);
+ }
+
Ok(Room {
name: user.alias.clone(),
direct: true,
diff --git a/fractal-matrix-api/src/backend/sync.rs b/fractal-matrix-api/src/backend/sync.rs
index 5dccccec..ef66e4fb 100644
--- a/fractal-matrix-api/src/backend/sync.rs
+++ b/fractal-matrix-api/src/backend/sync.rs
@@ -20,7 +20,6 @@ use crate::types::Room;
use crate::types::RoomMembership;
use crate::types::RoomTag;
use crate::util::matrix_response;
-use crate::util::parse_m_direct;
use crate::util::ResultExpectLog;
use log::error;
@@ -45,7 +44,6 @@ pub fn sync(
number_tries: u64,
) {
let tx = bk.tx.clone();
- let data = bk.data.clone();
let (timeout, filter) = if !initial {
(time::Duration::from_secs(30), Default::default())
@@ -246,8 +244,6 @@ 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 = join_to_room
diff --git a/fractal-matrix-api/src/backend/types.rs b/fractal-matrix-api/src/backend/types.rs
index fea331c6..4f8e1e7d 100644
--- a/fractal-matrix-api/src/backend/types.rs
+++ b/fractal-matrix-api/src/backend/types.rs
@@ -1,5 +1,4 @@
use ruma_identifiers::{EventId, RoomId, UserId};
-use std::collections::HashMap;
use std::sync::mpsc::Sender;
use std::sync::{Arc, Condvar, Mutex};
use std::thread;
@@ -44,7 +43,6 @@ pub enum BKCommand {
SetRoom(Url, AccessToken, RoomId),
ShutDown,
AttachFile(Url, AccessToken, Message),
- DirectChat(Url, AccessToken, UserId, Member, RoomId),
SendBKResponse(BKResponse),
}
@@ -67,7 +65,6 @@ pub enum BKResponse {
RoomTopic(RoomId, String),
MediaUrl(Url),
AttachedFile(Result<Message, Error>),
- NewRoom(Result<Room, Error>, RoomId),
RoomNotifications(RoomId, i32, i32),
//errors
@@ -104,6 +101,7 @@ pub enum BKResponse {
SentMsgRedactionError(Error),
JoinRoomError(Error),
DirectorySearchError(Error),
+ NewRoomError(Error, RoomId),
}
#[derive(Debug, Clone, Copy)]
@@ -154,13 +152,8 @@ impl ThreadPool {
}
}
-pub struct BackendData {
- pub m_direct: HashMap<UserId, Vec<RoomId>>,
-}
-
pub struct Backend {
pub tx: Sender<BKResponse>,
- pub data: Arc<Mutex<BackendData>>,
// user info cache, uid -> (name, avatar)
pub user_info_cache: CacheMap<UserId, Arc<Mutex<(String, String)>>>,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]