[fractal] API, user: Call functions directly instead of using the loop
- From: Daniel Garcia Moreno <danigm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [fractal] API, user: Call functions directly instead of using the loop
- Date: Fri, 24 Apr 2020 06:48:04 +0000 (UTC)
commit de1c9ecd713e35278dad4528df96024aa83b78b8
Author: Alejandro DomĂnguez <adomu net-c com>
Date: Fri Apr 17 08:08:12 2020 +0200
API, user: Call functions directly instead of using the loop
fractal-gtk/src/actions/account_settings.rs | 30 +++---
fractal-gtk/src/app/backend_loop.rs | 6 +-
fractal-gtk/src/app/connect/account.rs | 2 +-
fractal-gtk/src/app/connect/direct.rs | 9 +-
fractal-gtk/src/app/connect/invite.rs | 8 +-
fractal-gtk/src/appop/account.rs | 137 ++++++++++++++++++----------
fractal-gtk/src/appop/member.rs | 23 ++---
fractal-gtk/src/appop/mod.rs | 3 +-
fractal-gtk/src/appop/user.rs | 35 ++++---
fractal-gtk/src/cache/mod.rs | 23 +++--
fractal-gtk/src/widgets/address.rs | 94 +++++++++----------
fractal-gtk/src/widgets/message.rs | 2 -
fractal-matrix-api/src/backend/mod.rs | 114 +----------------------
fractal-matrix-api/src/backend/types.rs | 22 +----
fractal-matrix-api/src/backend/user.rs | 9 +-
15 files changed, 215 insertions(+), 302 deletions(-)
---
diff --git a/fractal-gtk/src/actions/account_settings.rs b/fractal-gtk/src/actions/account_settings.rs
index 5add2060..0a128cf8 100644
--- a/fractal-gtk/src/actions/account_settings.rs
+++ b/fractal-gtk/src/actions/account_settings.rs
@@ -1,16 +1,18 @@
use crate::i18n::i18n;
+use fractal_api::backend::user;
use fractal_api::identifiers::UserId;
use fractal_api::r0::AccessToken;
use fractal_api::url::Url;
+use fractal_api::util::ResultExpectLog;
use gio::prelude::*;
use gio::SimpleAction;
use gio::SimpleActionGroup;
use gtk;
use std::sync::mpsc::Sender;
+use std::thread;
-use crate::backend::BKCommand;
+use crate::backend::{BKCommand, BKResponse};
-use crate::widgets::ErrorDialog;
use crate::widgets::FileDialog::open;
use crate::actions::ButtonState;
@@ -18,7 +20,7 @@ use crate::actions::ButtonState;
// This creates all actions a user can perform in the account settings
pub fn new(
window: >k::Window,
- backend: &Sender<BKCommand>,
+ tx: Sender<BKCommand>,
server_url: Url,
access_token: AccessToken,
uid: UserId,
@@ -31,24 +33,22 @@ pub fn new(
actions.add_action(&change_avatar);
let window_weak = window.downgrade();
- let backend = backend.clone();
change_avatar.connect_activate(move |a, _| {
let window = upgrade_weak!(window_weak);
let filter = gtk::FileFilter::new();
filter.add_mime_type("image/*");
filter.set_name(Some(i18n("Images").as_str()));
if let Some(path) = open(&window, i18n("Select a new avatar").as_str(), &[filter]) {
- if let Some(file) = path.to_str() {
- a.change_state(&ButtonState::Insensitive.into());
- let _ = backend.send(BKCommand::SetUserAvatar(
- server_url.clone(),
- access_token.clone(),
- uid.clone(),
- file.to_string(),
- ));
- } else {
- ErrorDialog::new(false, &i18n("Couldn’t open file"));
- }
+ a.change_state(&ButtonState::Insensitive.into());
+ let tx = tx.clone();
+ let server_url = server_url.clone();
+ let access_token = access_token.clone();
+ let uid = uid.clone();
+ thread::spawn(move || {
+ let query = user::set_user_avatar(server_url, access_token, uid, path);
+ tx.send(BKCommand::SendBKResponse(BKResponse::SetUserAvatar(query)))
+ .expect_log("Connection closed");
+ });
}
});
diff --git a/fractal-gtk/src/app/backend_loop.rs b/fractal-gtk/src/app/backend_loop.rs
index 45385047..326c9e65 100644
--- a/fractal-gtk/src/app/backend_loop.rs
+++ b/fractal-gtk/src/app/backend_loop.rs
@@ -83,12 +83,10 @@ pub fn backend_loop(rx: Receiver<BKResponse>) {
APPOP!(account_destruction_logoff);
}
BKResponse::Avatar(Ok(path)) => {
- let av = Some(path);
- APPOP!(set_avatar, (av));
+ APPOP!(set_avatar, (path));
}
BKResponse::SetUserAvatar(Ok(path)) => {
- let av = Some(path);
- APPOP!(show_new_avatar, (av));
+ APPOP!(show_new_avatar, (path));
}
BKResponse::Sync(Ok(since)) => {
info!("SYNC");
diff --git a/fractal-gtk/src/app/connect/account.rs b/fractal-gtk/src/app/connect/account.rs
index 0daeb2f9..a759e65c 100644
--- a/fractal-gtk/src/app/connect/account.rs
+++ b/fractal-gtk/src/app/connect/account.rs
@@ -79,7 +79,7 @@ impl App {
let window = self.main_window.upcast_ref::<gtk::Window>();
let actions = AccountSettings::new(
&window,
- &backend,
+ backend,
login_data.server_url,
login_data.access_token,
login_data.uid,
diff --git a/fractal-gtk/src/app/connect/direct.rs b/fractal-gtk/src/app/connect/direct.rs
index 2a19bbd9..c55789fa 100644
--- a/fractal-gtk/src/app/connect/direct.rs
+++ b/fractal-gtk/src/app/connect/direct.rs
@@ -70,10 +70,11 @@ impl App {
let start = buffer.get_start_iter();
let end = buffer.get_end_iter();
- let text = buffer.get_text(&start, &end, false)
- .map_or(None, |gstr| Some(gstr.to_string()));
-
- op.lock().unwrap().search_invite_user(text);
+ if let Some(text) =
+ buffer.get_text(&start, &end, false).map(|gstr| gstr.to_string())
+ {
+ op.lock().unwrap().search_invite_user(text);
+ }
}
*(source_id.lock().unwrap()) = None;
diff --git a/fractal-gtk/src/app/connect/invite.rs b/fractal-gtk/src/app/connect/invite.rs
index 4ddb2110..4f64b208 100644
--- a/fractal-gtk/src/app/connect/invite.rs
+++ b/fractal-gtk/src/app/connect/invite.rs
@@ -104,11 +104,9 @@ impl App {
let start = buffer.get_start_iter();
let end = buffer.get_end_iter();
- let text = buffer.get_text(&start, &end, false);
-
- op.lock().unwrap().search_invite_user(
- text.map_or(None, |gstr| Some(gstr.to_string()))
- );
+ if let Some(text) = buffer.get_text(&start, &end, false).map(|gstr| gstr.to_string()) {
+ op.lock().unwrap().search_invite_user(text);
+ }
}
*(source_id.lock().unwrap()) = None;
diff --git a/fractal-gtk/src/appop/account.rs b/fractal-gtk/src/appop/account.rs
index c5b102e8..778b856b 100644
--- a/fractal-gtk/src/appop/account.rs
+++ b/fractal-gtk/src/appop/account.rs
@@ -1,11 +1,15 @@
+use fractal_api::backend::user;
+use fractal_api::util::ResultExpectLog;
use gtk;
use gtk::prelude::*;
use log::info;
+use std::path::PathBuf;
+use std::thread;
use crate::appop::AppOp;
use crate::appop::AppState;
-use crate::backend::BKCommand;
+use crate::backend::{BKCommand, BKResponse};
use crate::i18n::i18n;
use crate::widgets;
use crate::widgets::AvatarExt;
@@ -23,12 +27,12 @@ impl AppOp {
pub fn get_three_pid(&self) {
let login_data = unwrap_or_unit_return!(self.login_data.clone());
- self.backend
- .send(BKCommand::GetThreePID(
- login_data.server_url,
- login_data.access_token,
- ))
- .unwrap();
+ let tx = self.backend.clone();
+ thread::spawn(move || {
+ let query = user::get_threepid(login_data.server_url, login_data.access_token);
+ tx.send(BKCommand::SendBKResponse(BKResponse::GetThreePID(query)))
+ .expect_log("Connection closed");
+ });
}
pub fn added_three_pid(&self) {
@@ -39,13 +43,18 @@ impl AppOp {
let login_data = unwrap_or_unit_return!(self.login_data.clone());
if let Some(sid) = sid {
if let Some(secret) = secret {
- let _ = self.backend.send(BKCommand::AddThreePID(
- login_data.server_url,
- login_data.access_token,
- login_data.identity_url,
- secret.clone(),
- sid.clone(),
- ));
+ let tx = self.backend.clone();
+ thread::spawn(move || {
+ let query = user::add_threepid(
+ login_data.server_url,
+ login_data.access_token,
+ login_data.identity_url,
+ secret,
+ sid,
+ );
+ tx.send(BKCommand::SendBKResponse(BKResponse::AddThreePID(query)))
+ .expect_log("Connection closed");
+ });
}
} else {
self.show_error_dialog_in_settings(i18n("The validation code is not correct."));
@@ -100,13 +109,18 @@ impl AppOp {
dialog.connect_response(move |w, r| {
match gtk::ResponseType::from(r) {
gtk::ResponseType::Ok => {
- if let Some(token) = value.get_text() {
- let _ = backend.send(BKCommand::SubmitPhoneToken(
- login_data.server_url.clone(),
- secret.clone(),
- sid.clone(),
- token.to_string(),
- ));
+ if let Some(token) = value.get_text().map(|gstr| gstr.to_string()) {
+ let server_url = login_data.server_url.clone();
+ let secret = secret.clone();
+ let sid = sid.clone();
+ let tx = backend.clone();
+ thread::spawn(move || {
+ let query = user::submit_phone_token(server_url, secret, sid, token);
+ tx.send(BKCommand::SendBKResponse(BKResponse::SubmitPhoneToken(
+ query,
+ )))
+ .expect_log("Connection closed");
+ });
}
}
_ => {}
@@ -140,13 +154,21 @@ impl AppOp {
dialog.connect_response(move |w, r| {
match gtk::ResponseType::from(r) {
gtk::ResponseType::Ok => {
- let _ = backend.send(BKCommand::AddThreePID(
- login_data.server_url.clone(),
- login_data.access_token.clone(),
- login_data.identity_url.clone(),
- secret.clone(),
- sid.clone(),
- ));
+ let login_data = login_data.clone();
+ let secret = secret.clone();
+ let sid = sid.clone();
+ let tx = backend.clone();
+ thread::spawn(move || {
+ let query = user::add_threepid(
+ login_data.server_url,
+ login_data.access_token,
+ login_data.identity_url,
+ secret,
+ sid,
+ );
+ tx.send(BKCommand::SendBKResponse(BKResponse::AddThreePID(query)))
+ .expect_log("Connection closed");
+ });
}
_ => {}
}
@@ -452,7 +474,7 @@ impl AppOp {
dialog.present();
}
- pub fn show_new_avatar(&mut self, path: Option<String>) {
+ pub fn show_new_avatar(&mut self, path: PathBuf) {
let login_data = unwrap_or_unit_return!(self.login_data.clone());
let avatar_spinner = self
.ui
@@ -467,7 +489,7 @@ impl AppOp {
info!("Request finished");
self.set_login_data(LoginData {
- avatar: path,
+ avatar: Some(path),
..login_data
});
avatar_spinner.hide();
@@ -553,6 +575,7 @@ impl AppOp {
pub fn update_username_account_settings(&self) {
let login_data = unwrap_or_unit_return!(self.login_data.clone());
+ let tx = self.backend.clone();
let name = self
.ui
.builder
@@ -564,7 +587,7 @@ impl AppOp {
.get_object::<gtk::Button>("account_settings_name_button")
.expect("Can't find account_settings_name_button in ui file.");
- let old_username = login_data.username.unwrap_or_default();
+ let old_username = login_data.username.clone().unwrap_or_default();
let username = name
.get_text()
.map_or(String::new(), |gstr| gstr.to_string());
@@ -575,14 +598,16 @@ impl AppOp {
button.set_image(Some(&spinner));
button.set_sensitive(false);
name.set_editable(false);
- self.backend
- .send(BKCommand::SetUserName(
+ thread::spawn(move || {
+ let query = user::set_username(
login_data.server_url,
login_data.access_token,
login_data.uid,
username,
- ))
- .unwrap();
+ );
+ tx.send(BKCommand::SendBKResponse(BKResponse::SetUserName(query)))
+ .expect_log("Connection closed");
+ });
} else {
button.hide();
}
@@ -638,13 +663,18 @@ impl AppOp {
if old != "" && new != "" {
password_btn.set_sensitive(false);
password_btn_stack.set_visible_child_name("spinner");
- let _ = self.backend.send(BKCommand::ChangePassword(
- login_data.server_url,
- login_data.access_token,
- login_data.uid.localpart().into(),
- old.to_string(),
- new.to_string(),
- ));
+ let tx = self.backend.clone();
+ thread::spawn(move || {
+ let query = user::change_password(
+ login_data.server_url,
+ login_data.access_token,
+ login_data.uid.localpart().into(),
+ old.to_string(),
+ new.to_string(),
+ );
+ tx.send(BKCommand::SendBKResponse(BKResponse::ChangePassword(query)))
+ .expect_log("Connection closed");
+ });
}
}
}
@@ -741,17 +771,26 @@ impl AppOp {
dialog.add_button("Cancel", gtk::ResponseType::Cancel.into());
let _flag = mark.get_active(); // TODO: This is not used, remove from UI?
- if let Some(password) = entry.get_text() {
+ if let Some(password) = entry.get_text().map(|gstr| gstr.to_string()) {
let backend = self.backend.clone();
dialog.connect_response(move |w, r| {
match gtk::ResponseType::from(r) {
gtk::ResponseType::Ok => {
- let _ = backend.send(BKCommand::AccountDestruction(
- login_data.server_url.clone(),
- login_data.access_token.clone(),
- login_data.uid.localpart().into(),
- password.to_string(),
- ));
+ let tx = backend.clone();
+ let password = password.clone();
+ let login_data = login_data.clone();
+ thread::spawn(move || {
+ let query = user::account_destruction(
+ login_data.server_url.clone(),
+ login_data.access_token.clone(),
+ login_data.uid.localpart().into(),
+ password,
+ );
+ tx.send(BKCommand::SendBKResponse(BKResponse::AccountDestruction(
+ query,
+ )))
+ .expect_log("Connection closed");
+ });
}
_ => {}
}
diff --git a/fractal-gtk/src/appop/member.rs b/fractal-gtk/src/appop/member.rs
index 91104d67..3528b69b 100644
--- a/fractal-gtk/src/appop/member.rs
+++ b/fractal-gtk/src/appop/member.rs
@@ -1,14 +1,17 @@
+use fractal_api::backend::user;
use fractal_api::clone;
use fractal_api::identifiers::{RoomId, UserId};
+use fractal_api::util::ResultExpectLog;
use gtk;
use gtk::prelude::*;
use std::collections::HashMap;
use std::convert::TryFrom;
+use std::thread;
use crate::actions::AppState;
use crate::appop::AppOp;
-use crate::backend::BKCommand;
+use crate::backend::{BKCommand, BKResponse};
use crate::widgets;
use crate::App;
use glib;
@@ -188,15 +191,13 @@ impl AppOp {
}
}
- pub fn search_invite_user(&self, term: Option<String>) {
- if let (Some(t), Some(login_data)) = (term, self.login_data.clone()) {
- self.backend
- .send(BKCommand::UserSearch(
- login_data.server_url,
- login_data.access_token,
- t,
- ))
- .unwrap();
- }
+ pub fn search_invite_user(&self, term: String) {
+ let login_data = unwrap_or_unit_return!(self.login_data.clone());
+ let tx = self.backend.clone();
+ thread::spawn(move || {
+ let query = user::search(login_data.server_url, login_data.access_token, term);
+ tx.send(BKCommand::SendBKResponse(BKResponse::UserSearch(query)))
+ .expect_log("Connection closed");
+ });
}
}
diff --git a/fractal-gtk/src/appop/mod.rs b/fractal-gtk/src/appop/mod.rs
index 18d7b32b..63f57c1a 100644
--- a/fractal-gtk/src/appop/mod.rs
+++ b/fractal-gtk/src/appop/mod.rs
@@ -1,5 +1,6 @@
use std::cell::RefCell;
use std::collections::HashMap;
+use std::path::PathBuf;
use std::rc::Rc;
use std::sync::mpsc::Sender;
@@ -53,7 +54,7 @@ pub struct LoginData {
pub access_token: AccessToken,
pub uid: UserId,
pub username: Option<String>,
- pub avatar: Option<String>,
+ pub avatar: Option<PathBuf>,
pub server_url: Url,
pub identity_url: Url,
}
diff --git a/fractal-gtk/src/appop/user.rs b/fractal-gtk/src/appop/user.rs
index 766bc332..9a1f2ae6 100644
--- a/fractal-gtk/src/appop/user.rs
+++ b/fractal-gtk/src/appop/user.rs
@@ -1,11 +1,18 @@
use gtk;
use gtk::prelude::*;
+use fractal_api::backend::user;
+use fractal_api::clone;
+use fractal_api::util::ResultExpectLog;
+
+use std::path::PathBuf;
+use std::thread;
+
use crate::appop::AppOp;
use crate::cache::download_to_cache;
-use crate::backend::BKCommand;
+use crate::backend::{BKCommand, BKResponse};
use crate::widgets;
use crate::widgets::AvatarExt;
@@ -14,15 +21,19 @@ use super::LoginData;
impl AppOp {
pub fn get_username(&self) {
let login_data = unwrap_or_unit_return!(self.login_data.clone());
- self.backend
- .send(BKCommand::GetUsername(
- login_data.server_url.clone(),
- login_data.uid.clone(),
- ))
- .unwrap();
- self.backend
- .send(BKCommand::GetAvatar(login_data.server_url, login_data.uid))
- .unwrap();
+ let tx = self.backend.clone();
+
+ thread::spawn(clone!(login_data, tx => move || {
+ let query = user::get_username(login_data.server_url, login_data.uid);
+ tx.send(BKCommand::SendBKResponse(BKResponse::Name(query)))
+ .expect_log("Connection closed");
+ }));
+
+ thread::spawn(clone!(login_data, tx => move || {
+ let query = user::get_avatar(login_data.server_url, login_data.uid);
+ tx.send(BKCommand::SendBKResponse(BKResponse::Avatar(query)))
+ .expect_log("Connection closed");
+ }));
}
pub fn show_user_info(&self) {
@@ -126,10 +137,10 @@ impl AppOp {
});
}
- pub fn set_avatar(&mut self, fname: Option<String>) {
+ pub fn set_avatar(&mut self, path: PathBuf) {
let login_data = unwrap_or_unit_return!(self.login_data.clone());
self.set_login_data(LoginData {
- avatar: fname,
+ avatar: Some(path),
..login_data
});
}
diff --git a/fractal-gtk/src/cache/mod.rs b/fractal-gtk/src/cache/mod.rs
index 412227ab..b25563ff 100644
--- a/fractal-gtk/src/cache/mod.rs
+++ b/fractal-gtk/src/cache/mod.rs
@@ -1,8 +1,11 @@
+use fractal_api::backend::user;
use fractal_api::url::Url;
+use fractal_api::util::ResultExpectLog;
use glib::source::Continue;
use gtk;
use gtk::LabelExt;
use serde::{Deserialize, Serialize};
+use std::thread;
use crate::types::Room;
use crate::types::RoomList;
@@ -120,16 +123,16 @@ pub fn download_to_cache(
/* Get username based on the MXID, we should cache the username */
pub fn download_to_cache_username(
- backend: Sender<BKCommand>,
server_url: Url,
uid: UserId,
label: gtk::Label,
avatar: Option<Rc<RefCell<AvatarData>>>,
) {
- let (tx, rx): (Sender<String>, Receiver<String>) = channel();
- backend
- .send(BKCommand::GetUserNameAsync(server_url, uid, tx))
- .unwrap();
+ let (ctx, rx): (Sender<String>, Receiver<String>) = channel();
+ thread::spawn(move || {
+ let query = user::get_username_async(server_url, uid);
+ ctx.send(query).expect_log("Connection closed");
+ });
gtk::timeout_add(50, move || match rx.try_recv() {
Err(TryRecvError::Empty) => Continue(true),
Err(TryRecvError::Disconnected) => Continue(false),
@@ -148,17 +151,17 @@ pub fn download_to_cache_username(
/* Download username for a given MXID and update a emote message
* FIXME: We should cache this request and do it before we need to display the username in an emote*/
pub fn download_to_cache_username_emote(
- backend: Sender<BKCommand>,
server_url: Url,
uid: UserId,
text: &str,
label: gtk::Label,
avatar: Option<Rc<RefCell<AvatarData>>>,
) {
- let (tx, rx): (Sender<String>, Receiver<String>) = channel();
- backend
- .send(BKCommand::GetUserNameAsync(server_url, uid, tx))
- .unwrap();
+ let (ctx, rx): (Sender<String>, Receiver<String>) = channel();
+ thread::spawn(move || {
+ let query = user::get_username_async(server_url, uid);
+ ctx.send(query).expect_log("Connection closed");
+ });
let text = text.to_string();
gtk::timeout_add(50, move || match rx.try_recv() {
Err(TryRecvError::Empty) => Continue(true),
diff --git a/fractal-gtk/src/widgets/address.rs b/fractal-gtk/src/widgets/address.rs
index b7b7e60c..bda3cd5a 100644
--- a/fractal-gtk/src/widgets/address.rs
+++ b/fractal-gtk/src/widgets/address.rs
@@ -1,15 +1,18 @@
+use fractal_api::backend::user;
use fractal_api::r0::AccessToken;
use fractal_api::r0::Medium;
use fractal_api::url::Url;
+use fractal_api::util::ResultExpectLog;
use glib::signal;
use gtk;
use gtk::prelude::*;
use rand::distributions::Alphanumeric;
use rand::{thread_rng, Rng};
use std::sync::mpsc::Sender;
+use std::thread;
use crate::appop::AppOp;
-use crate::backend::BKCommand;
+use crate::backend::{BKCommand, BKResponse};
#[derive(Debug, Clone)]
pub enum AddressType {
@@ -184,23 +187,27 @@ impl<'a> Address<'a> {
match action {
Some(AddressAction::Delete) => {
- delete_address(
- &backend,
- medium,
- address.clone(),
- server_url.clone(),
- access_token.clone(),
- );
+ if let Some(address) = address.clone() {
+ delete_address(
+ backend.clone(),
+ medium,
+ address,
+ server_url.clone(),
+ access_token.clone(),
+ );
+ }
}
Some(AddressAction::Add) => {
- add_address(
- &backend,
- medium,
- id_server.clone(),
- entry.get_text().map_or(None, |gstr| Some(gstr.to_string())),
- server_url.clone(),
- access_token.clone(),
- );
+ if let Some(address) = entry.get_text().map(|gstr| gstr.to_string()) {
+ add_address(
+ backend.clone(),
+ medium,
+ id_server.clone(),
+ address,
+ server_url.clone(),
+ access_token.clone(),
+ );
+ }
}
_ => {}
}
@@ -209,55 +216,38 @@ impl<'a> Address<'a> {
}
fn delete_address(
- backend: &Sender<BKCommand>,
+ tx: Sender<BKCommand>,
medium: Medium,
- address: Option<String>,
+ address: String,
server_url: Url,
access_token: AccessToken,
-) -> Option<String> {
- backend
- .send(BKCommand::DeleteThreePID(
- server_url,
- access_token,
- medium,
- address?,
- ))
- .unwrap();
- None
+) {
+ thread::spawn(move || {
+ let query = user::delete_three_pid(server_url, access_token, medium, address);
+ tx.send(BKCommand::SendBKResponse(BKResponse::DeleteThreePID(query)))
+ .expect_log("Connection closed");
+ });
}
fn add_address(
- backend: &Sender<BKCommand>,
+ tx: Sender<BKCommand>,
medium: Medium,
id_server: Url,
- address: Option<String>,
+ address: String,
server_url: Url,
access_token: AccessToken,
-) -> Option<String> {
+) {
let secret: String = thread_rng().sample_iter(&Alphanumeric).take(36).collect();
- match medium {
+ thread::spawn(move || match medium {
Medium::MsIsdn => {
- backend
- .send(BKCommand::GetTokenPhone(
- server_url,
- access_token,
- id_server,
- address?,
- secret,
- ))
- .unwrap();
+ let query = user::get_phone_token(server_url, access_token, id_server, address, secret);
+ tx.send(BKCommand::SendBKResponse(BKResponse::GetTokenPhone(query)))
+ .expect_log("Connection closed");
}
Medium::Email => {
- backend
- .send(BKCommand::GetTokenEmail(
- server_url,
- access_token,
- id_server,
- address?,
- secret,
- ))
- .unwrap();
+ let query = user::get_email_token(server_url, access_token, id_server, address, secret);
+ tx.send(BKCommand::SendBKResponse(BKResponse::GetTokenEmail(query)))
+ .expect_log("Connection closed");
}
- }
- None
+ });
}
diff --git a/fractal-gtk/src/widgets/message.rs b/fractal-gtk/src/widgets/message.rs
index bf8093e9..95fce8f8 100644
--- a/fractal-gtk/src/widgets/message.rs
+++ b/fractal-gtk/src/widgets/message.rs
@@ -236,7 +236,6 @@ impl MessageBox {
data.clone(),
);
download_to_cache_username(
- self.backend.clone(),
self.server_url.clone(),
uid,
self.username.clone(),
@@ -594,7 +593,6 @@ impl MessageBox {
let markup = markup_text(body);
download_to_cache_username_emote(
- self.backend.clone(),
self.server_url.clone(),
msg.sender.clone(),
&markup,
diff --git a/fractal-matrix-api/src/backend/mod.rs b/fractal-matrix-api/src/backend/mod.rs
index 1f9c62c3..4bbba84a 100644
--- a/fractal-matrix-api/src/backend/mod.rs
+++ b/fractal-matrix-api/src/backend/mod.rs
@@ -21,7 +21,7 @@ pub mod register;
mod room;
mod sync;
mod types;
-mod user;
+pub mod user;
pub use self::types::BKCommand;
pub use self::types::BKResponse;
@@ -78,124 +78,12 @@ impl Backend {
Ok(BKCommand::Guest(server, id_url)) => register::guest(self, server, id_url),
// User module
- Ok(BKCommand::GetUsername(server, uid)) => {
- thread::spawn(move || {
- let query = user::get_username(server, uid);
- tx.send(BKResponse::Name(query))
- .expect_log("Connection closed");
- });
- }
- Ok(BKCommand::SetUserName(server, access_token, uid, username)) => {
- thread::spawn(move || {
- let query = user::set_username(server, access_token, uid, username);
- tx.send(BKResponse::SetUserName(query))
- .expect_log("Connection closed");
- });
- }
- Ok(BKCommand::GetThreePID(server, access_token)) => {
- thread::spawn(move || {
- let query = user::get_threepid(server, access_token);
- tx.send(BKResponse::GetThreePID(query))
- .expect_log("Connection closed");
- });
- }
- Ok(BKCommand::GetTokenEmail(server, access_token, identity, email, client_secret)) => {
- thread::spawn(move || {
- let query =
- user::get_email_token(server, access_token, identity, email, client_secret);
- tx.send(BKResponse::GetTokenEmail(query))
- .expect_log("Connection closed");
- });
- }
- Ok(BKCommand::GetTokenPhone(server, access_token, identity, phone, client_secret)) => {
- thread::spawn(move || {
- let query =
- user::get_phone_token(server, access_token, identity, phone, client_secret);
- tx.send(BKResponse::GetTokenPhone(query))
- .expect_log("Connection closed");
- });
- }
- Ok(BKCommand::SubmitPhoneToken(server, client_secret, sid, token)) => {
- thread::spawn(move || {
- let query = user::submit_phone_token(server, client_secret, sid, token);
- tx.send(BKResponse::SubmitPhoneToken(query))
- .expect_log("Connection closed");
- });
- }
- Ok(BKCommand::AddThreePID(server, access_token, identity, client_secret, sid)) => {
- thread::spawn(move || {
- let query =
- user::add_threepid(server, access_token, identity, client_secret, sid);
- tx.send(BKResponse::AddThreePID(query))
- .expect_log("Connection closed");
- });
- }
- Ok(BKCommand::DeleteThreePID(server, access_token, medium, address)) => {
- thread::spawn(move || {
- let query = user::delete_three_pid(server, access_token, medium, address);
- tx.send(BKResponse::DeleteThreePID(query))
- .expect_log("Connection closed");
- });
- }
- Ok(BKCommand::ChangePassword(
- server,
- access_token,
- user,
- old_password,
- new_password,
- )) => {
- thread::spawn(move || {
- let query = user::change_password(
- server,
- access_token,
- user,
- old_password,
- new_password,
- );
- tx.send(BKResponse::ChangePassword(query))
- .expect_log("Connection closed");
- });
- }
- Ok(BKCommand::AccountDestruction(server, access_token, user, password)) => {
- thread::spawn(move || {
- let query = user::account_destruction(server, access_token, user, password);
- tx.send(BKResponse::AccountDestruction(query))
- .expect_log("Connection closed");
- });
- }
- Ok(BKCommand::GetAvatar(server, uid)) => {
- thread::spawn(move || {
- let query = user::get_avatar(server, uid);
- tx.send(BKResponse::Avatar(query))
- .expect_log("Connection closed");
- });
- }
- Ok(BKCommand::SetUserAvatar(server, access_token, uid, file)) => {
- thread::spawn(move || {
- let query = user::set_user_avatar(server, access_token, uid, file);
- tx.send(BKResponse::SetUserAvatar(query))
- .expect_log("Connection closed");
- });
- }
Ok(BKCommand::GetAvatarAsync(server, member, ctx)) => {
user::get_avatar_async(self, server, member, ctx)
}
Ok(BKCommand::GetUserInfoAsync(server, sender, ctx)) => {
user::get_user_info_async(self, server, sender, ctx)
}
- Ok(BKCommand::GetUserNameAsync(server, sender, ctx)) => {
- thread::spawn(move || {
- let query = user::get_username_async(server, sender);
- ctx.send(query).expect_log("Connection closed");
- });
- }
- Ok(BKCommand::UserSearch(server, access_token, term)) => {
- thread::spawn(move || {
- let query = user::search(server, access_token, term);
- tx.send(BKResponse::UserSearch(query))
- .expect_log("Connection closed");
- });
- }
// Sync module
Ok(BKCommand::Sync(server, access_token, uid, since, initial)) => {
diff --git a/fractal-matrix-api/src/backend/types.rs b/fractal-matrix-api/src/backend/types.rs
index 8b8b5397..242cd731 100644
--- a/fractal-matrix-api/src/backend/types.rs
+++ b/fractal-matrix-api/src/backend/types.rs
@@ -1,5 +1,6 @@
use ruma_identifiers::{RoomId, UserId};
use std::collections::HashMap;
+use std::path::PathBuf;
use std::sync::mpsc::Sender;
use std::sync::{Arc, Condvar, Mutex};
use std::thread;
@@ -9,7 +10,6 @@ use crate::error::Error;
use crate::r0::contact::get_identifiers::ThirdPartyIdentifier;
use crate::r0::thirdparty::get_supported_protocols::ProtocolInstance;
use crate::r0::AccessToken;
-use crate::r0::Medium;
use crate::types::Event;
use crate::types::Member;
use crate::types::Message;
@@ -22,22 +22,8 @@ use url::Url;
pub enum BKCommand {
Login(String, String, Url, Url),
Logout(Url, AccessToken),
- #[allow(dead_code)]
Register(String, String, Url, Url),
- #[allow(dead_code)]
Guest(Url, Url),
- GetUsername(Url, UserId),
- SetUserName(Url, AccessToken, UserId, String),
- GetThreePID(Url, AccessToken),
- GetTokenEmail(Url, AccessToken, Url, String, String),
- GetTokenPhone(Url, AccessToken, Url, String, String),
- SubmitPhoneToken(Url, String, String, String),
- AddThreePID(Url, AccessToken, Url, String, String),
- DeleteThreePID(Url, AccessToken, Medium, String),
- ChangePassword(Url, AccessToken, String, String, String),
- AccountDestruction(Url, AccessToken, String, String),
- GetAvatar(Url, UserId),
- SetUserAvatar(Url, AccessToken, UserId, String),
Sync(Url, AccessToken, UserId, Option<String>, bool),
GetRoomMembers(Url, AccessToken, RoomId),
GetRoomMessages(Url, AccessToken, RoomId, String),
@@ -57,7 +43,6 @@ pub enum BKCommand {
GetAvatarAsync(Url, Option<Member>, Sender<String>),
GetMedia(Url, String),
GetUserInfoAsync(Url, UserId, Option<Sender<(String, String)>>),
- GetUserNameAsync(Url, UserId, Sender<String>),
SendMsg(Url, AccessToken, Message),
SendMsgRedaction(Url, AccessToken, Message),
SendTyping(Url, AccessToken, UserId, RoomId),
@@ -77,7 +62,6 @@ pub enum BKCommand {
AddToFav(Url, AccessToken, UserId, RoomId, bool),
AcceptInv(Url, AccessToken, RoomId),
RejectInv(Url, AccessToken, RoomId),
- UserSearch(Url, AccessToken, String),
Invite(Url, AccessToken, RoomId, UserId),
ChangeLanguage(AccessToken, Url, UserId, RoomId, String),
SendBKResponse(BKResponse),
@@ -98,8 +82,8 @@ pub enum BKResponse {
DeleteThreePID(Result<(), Error>),
ChangePassword(Result<(), Error>),
AccountDestruction(Result<(), Error>),
- Avatar(Result<String, Error>),
- SetUserAvatar(Result<String, Error>),
+ Avatar(Result<PathBuf, Error>),
+ SetUserAvatar(Result<PathBuf, Error>),
Sync(Result<String, Error>),
Rooms(Result<(Vec<Room>, Option<Room>), Error>),
UpdateRooms(Result<Vec<Room>, Error>),
diff --git a/fractal-matrix-api/src/backend/user.rs b/fractal-matrix-api/src/backend/user.rs
index ad175896..ba08ae6c 100644
--- a/fractal-matrix-api/src/backend/user.rs
+++ b/fractal-matrix-api/src/backend/user.rs
@@ -11,6 +11,7 @@ use crate::util::ContentType;
use crate::util::ResultExpectLog;
use crate::util::HTTP_CLIENT;
use std::convert::TryInto;
+use std::path::PathBuf;
use std::sync::mpsc::Sender;
use std::sync::{Arc, Mutex};
use std::thread;
@@ -338,8 +339,8 @@ pub fn account_destruction(
.and(Ok(()))
}
-pub fn get_avatar(base: Url, userid: UserId) -> Result<String, Error> {
- get_user_avatar(base, &userid).map(|(_, fname)| fname)
+pub fn get_avatar(base: Url, userid: UserId) -> Result<PathBuf, Error> {
+ get_user_avatar(base, &userid).map(|(_, fname)| fname.into())
}
pub fn get_avatar_async(bk: &Backend, base: Url, member: Option<Member>, tx: Sender<String>) {
@@ -360,8 +361,8 @@ pub fn set_user_avatar(
base: Url,
access_token: AccessToken,
uid: UserId,
- avatar: String,
-) -> Result<String, Error> {
+ avatar: PathBuf,
+) -> Result<PathBuf, Error> {
let params_upload = CreateContentParameters {
access_token: access_token.clone(),
filename: None,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]