[fractal] Get user avatar through matrix-sdk
- From: Alexandre Franke <afranke src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [fractal] Get user avatar through matrix-sdk
- Date: Tue, 1 Dec 2020 20:22:00 +0000 (UTC)
commit 40d3ae176f9b029e45cf50c080d521d4ef8cd855
Author: Alejandro DomÃnguez <adomu net-c com>
Date: Sun Sep 6 18:56:42 2020 +0200
Get user avatar through matrix-sdk
fractal-gtk/src/appop/account.rs | 4 +-
fractal-gtk/src/appop/media_viewer.rs | 3 +-
fractal-gtk/src/appop/message.rs | 27 ++------
fractal-gtk/src/appop/mod.rs | 3 -
fractal-gtk/src/appop/notify.rs | 48 +++++---------
fractal-gtk/src/appop/room.rs | 1 -
fractal-gtk/src/appop/user.rs | 18 ++----
fractal-gtk/src/backend/mod.rs | 45 -------------
fractal-gtk/src/backend/sync.rs | 25 +++-----
fractal-gtk/src/backend/user.rs | 82 ++++++++++--------------
fractal-gtk/src/cache/mod.rs | 22 ++-----
fractal-gtk/src/model/room.rs | 19 +++---
fractal-gtk/src/widgets/media_viewer.rs | 39 ++++-------
fractal-gtk/src/widgets/member.rs | 22 ++++---
fractal-gtk/src/widgets/message.rs | 30 ++-------
fractal-gtk/src/widgets/room_history.rs | 41 ++----------
fractal-matrix-api/src/meson.build | 1 -
fractal-matrix-api/src/r0/profile.rs | 1 -
fractal-matrix-api/src/r0/profile/get_profile.rs | 26 --------
19 files changed, 122 insertions(+), 335 deletions(-)
---
diff --git a/fractal-gtk/src/appop/account.rs b/fractal-gtk/src/appop/account.rs
index c8ba7411..1dc28dbe 100644
--- a/fractal-gtk/src/appop/account.rs
+++ b/fractal-gtk/src/appop/account.rs
@@ -543,10 +543,8 @@ impl AppOp {
None,
);
download_to_cache(
- login_data.session_client.clone(),
- self.thread_pool.clone(),
+ login_data.session_client,
self.user_info_cache.clone(),
- login_data.access_token,
login_data.uid,
data,
);
diff --git a/fractal-gtk/src/appop/media_viewer.rs b/fractal-gtk/src/appop/media_viewer.rs
index 728529d4..6c7ba658 100644
--- a/fractal-gtk/src/appop/media_viewer.rs
+++ b/fractal-gtk/src/appop/media_viewer.rs
@@ -39,8 +39,7 @@ impl AppOp {
login_data.uid,
);
panel.display_media_viewer(login_data.session_client.clone(), msg);
- let (body, header) =
- panel.create(login_data.session_client.clone(), self.thread_pool.clone())?;
+ let (body, header) = panel.create(login_data.session_client.clone())?;
*self.media_viewer.borrow_mut() = Some(panel);
if let Some(login_data) = self.login_data.clone() {
diff --git a/fractal-gtk/src/appop/message.rs b/fractal-gtk/src/appop/message.rs
index a8623257..c2f9f1ea 100644
--- a/fractal-gtk/src/appop/message.rs
+++ b/fractal-gtk/src/appop/message.rs
@@ -50,12 +50,7 @@ impl AppOp {
let session_client = self.login_data.as_ref()?.session_client.clone();
if let Some(ui_msg) = self.create_new_room_message(msg) {
if let Some(ref mut history) = self.history {
- history.add_new_message(
- session_client,
- self.thread_pool.clone(),
- self.user_info_cache.clone(),
- ui_msg,
- );
+ history.add_new_message(session_client, self.user_info_cache.clone(), ui_msg);
}
}
None
@@ -66,12 +61,7 @@ impl AppOp {
unwrap_or_unit_return!(self.login_data.as_ref().map(|ld| ld.session_client.clone()));
if let Some(ui_msg) = self.create_new_room_message(msg) {
if let Some(ref mut history) = self.history {
- history.remove_message(
- session_client,
- self.thread_pool.clone(),
- self.user_info_cache.clone(),
- ui_msg,
- );
+ history.remove_message(session_client, self.user_info_cache.clone(), ui_msg);
}
}
}
@@ -86,7 +76,6 @@ impl AppOp {
)
.tmpwidget(
login_data.session_client.clone(),
- self.thread_pool.clone(),
self.user_info_cache.clone(),
&ui_msg,
);
@@ -131,7 +120,6 @@ impl AppOp {
)
.tmpwidget(
login_data.session_client.clone(),
- self.thread_pool.clone(),
self.user_info_cache.clone(),
&ui_msg,
);
@@ -410,8 +398,8 @@ impl AppOp {
.builder
.get_object("main_window")
.expect("Can't find main_window in ui file.");
- if let (Some(app), Some(event_id)) = (window.get_application(), msg.id.as_ref()) {
- self.notify(app, &msg.room, event_id);
+ if let (Some(app), Some(event_id)) = (window.get_application(), msg.id.clone()) {
+ self.notify(app, msg.room.clone(), event_id);
}
}
@@ -455,12 +443,7 @@ impl AppOp {
}
if let Some(ref mut history) = self.history {
- history.add_old_messages_in_batch(
- session_client,
- self.thread_pool.clone(),
- self.user_info_cache.clone(),
- list,
- );
+ history.add_old_messages_in_batch(session_client, self.user_info_cache.clone(), list);
}
}
diff --git a/fractal-gtk/src/appop/mod.rs b/fractal-gtk/src/appop/mod.rs
index dc7547eb..0d2025cc 100644
--- a/fractal-gtk/src/appop/mod.rs
+++ b/fractal-gtk/src/appop/mod.rs
@@ -11,7 +11,6 @@ use fractal_api::r0::AccessToken;
use fractal_api::Client as MatrixClient;
use gtk::prelude::*;
-use crate::backend::ThreadPool;
use crate::cache::CacheMap;
use fractal_api::url::Url;
@@ -119,7 +118,6 @@ pub struct AppOp {
pub leaflet: libhandy::Leaflet,
pub deck: libhandy::Deck,
- pub thread_pool: ThreadPool,
pub user_info_cache: UserInfoCache,
}
@@ -166,7 +164,6 @@ impl AppOp {
leaflet,
deck,
- thread_pool: ThreadPool::new(20),
user_info_cache: Arc::new(Mutex::new(
CacheMap::new().timeout(Duration::from_secs(60 * 60)),
)),
diff --git a/fractal-gtk/src/appop/notify.rs b/fractal-gtk/src/appop/notify.rs
index 47b26e1b..5f6a5b95 100644
--- a/fractal-gtk/src/appop/notify.rs
+++ b/fractal-gtk/src/appop/notify.rs
@@ -1,16 +1,12 @@
+use crate::app::RUNTIME;
use crate::backend::user;
use fractal_api::identifiers::{EventId, RoomId};
use gio::ApplicationExt;
use gio::FileExt;
use gio::Notification;
-use glib::clone;
-use glib::source::Continue;
use gtk::prelude::*;
use log::info;
use std::path::Path;
-use std::sync::mpsc::channel;
-use std::sync::mpsc::TryRecvError;
-use std::sync::mpsc::{Receiver, Sender};
use crate::util::i18n::i18n;
@@ -43,12 +39,10 @@ impl AppOp {
inapp.set_reveal_child(false);
}
- pub fn notify(&self, app: gtk::Application, room_id: &RoomId, id: &EventId) -> Option<()> {
- let login_data = self.login_data.as_ref()?;
- let access_token = login_data.access_token.clone();
- let session_client = login_data.session_client.clone();
- let msg = self.get_message_by_id(room_id, id)?;
- let r = self.rooms.get(room_id)?;
+ pub fn notify(&self, app: gtk::Application, room_id: RoomId, id: EventId) -> Option<()> {
+ let session_client = self.login_data.as_ref()?.session_client.clone();
+ let msg = self.get_message_by_id(&room_id, &id)?;
+ let r = self.rooms.get(&room_id)?;
let short_body = match &msg.mtype[..] {
"m.audio" => i18n("An audio file has been added to the conversation."),
"m.image" => i18n("An image has been added to the conversation."),
@@ -65,31 +59,19 @@ impl AppOp {
String::new()
};
- let (tx, rx): (Sender<user::UserInfo>, Receiver<user::UserInfo>) = channel();
- user::get_user_info_async(
- self.thread_pool.clone(),
+ let response = RUNTIME.spawn(user::get_user_info(
session_client,
self.user_info_cache.clone(),
- access_token,
msg.sender,
- tx,
- );
-
- let room_id = room_id.to_string();
- let id = id.to_string();
- glib::timeout_add_local(
- 50,
- clone!(@weak app => @default-return Continue(false), move || match rx.try_recv() {
- Err(TryRecvError::Empty) => Continue(true),
- Err(TryRecvError::Disconnected) => Continue(false),
- Ok((name, avatar_path)) => {
- let title = format!("{}{}", name, title);
- let n = create_notification(&room_id, &title, &short_body, &avatar_path);
- app.send_notification(Some(id.as_str()), &n);
- Continue(false)
- }
- }),
- );
+ ));
+
+ glib::MainContext::default().spawn_local(async move {
+ if let Ok(Ok((name, avatar_path))) = response.await {
+ let title = format!("{}{}", name, title);
+ let n = create_notification(room_id.as_str(), &title, &short_body, &avatar_path);
+ app.send_notification(Some(id.as_str()), &n);
+ }
+ });
None
}
diff --git a/fractal-gtk/src/appop/room.rs b/fractal-gtk/src/appop/room.rs
index b79b7dd1..a53ad1da 100644
--- a/fractal-gtk/src/appop/room.rs
+++ b/fractal-gtk/src/appop/room.rs
@@ -310,7 +310,6 @@ impl AppOp {
self.history = if let Some(mut history) = history {
history.create(
login_data.session_client,
- self.thread_pool.clone(),
self.user_info_cache.clone(),
messages,
);
diff --git a/fractal-gtk/src/appop/user.rs b/fractal-gtk/src/appop/user.rs
index 6fd640f0..35fe4067 100644
--- a/fractal-gtk/src/appop/user.rs
+++ b/fractal-gtk/src/appop/user.rs
@@ -6,7 +6,7 @@ use glib::clone;
use std::path::PathBuf;
use std::thread;
-use crate::app::App;
+use crate::app::{App, RUNTIME};
use crate::appop::AppOp;
use crate::cache::download_to_cache;
@@ -31,12 +31,8 @@ impl AppOp {
}
}));
- thread::spawn(clone!(@strong login_data => move || {
- match user::get_user_avatar(
- login_data.session_client.clone(),
- login_data.access_token,
- &login_data.uid,
- ) {
+ RUNTIME.spawn(async move {
+ match user::get_user_avatar(login_data.session_client, &login_data.uid).await {
Ok((_, path)) => {
APPOP!(set_avatar, (path));
}
@@ -44,7 +40,7 @@ impl AppOp {
err.handle_error();
}
}
- }));
+ });
}
pub fn show_user_info(&self) {
@@ -93,9 +89,7 @@ impl AppOp {
);
download_to_cache(
login_data.session_client.clone(),
- self.thread_pool.clone(),
self.user_info_cache.clone(),
- login_data.access_token.clone(),
login_data.uid.clone(),
data,
);
@@ -118,10 +112,8 @@ impl AppOp {
None,
);
download_to_cache(
- login_data.session_client.clone(),
- self.thread_pool.clone(),
+ login_data.session_client,
self.user_info_cache.clone(),
- login_data.access_token.clone(),
login_data.uid,
data,
);
diff --git a/fractal-gtk/src/backend/mod.rs b/fractal-gtk/src/backend/mod.rs
index fba8bc4e..01807ad9 100644
--- a/fractal-gtk/src/backend/mod.rs
+++ b/fractal-gtk/src/backend/mod.rs
@@ -8,8 +8,6 @@ use std::convert::TryFrom;
use std::fmt::Debug;
use std::io::Error as IoError;
use std::path::PathBuf;
-use std::sync::{Arc, Condvar, Mutex};
-use std::thread;
use crate::client::ClientBlocking;
use crate::util::cache_dir_path;
@@ -30,49 +28,6 @@ lazy_static! {
pub static ref HTTP_CLIENT: ClientBlocking = ClientBlocking::new();
}
-#[derive(Clone, Debug)]
-pub struct ThreadPool {
- thread_count: Arc<(Mutex<u8>, Condvar)>,
- limit: u8,
-}
-
-impl ThreadPool {
- pub fn new(limit: u8) -> Self {
- ThreadPool {
- thread_count: Arc::new((Mutex::new(0), Condvar::new())),
- limit,
- }
- }
-
- pub fn run<F>(&self, func: F)
- where
- F: FnOnce() + Send + 'static,
- {
- let thread_count = self.thread_count.clone();
- let limit = self.limit;
- thread::spawn(move || {
- // waiting, less than {limit} threads at the same time
- let &(ref num, ref cvar) = &*thread_count;
- {
- let mut start = num.lock().unwrap();
- while *start >= limit {
- start = cvar.wait(start).unwrap()
- }
- *start += 1;
- }
-
- func();
-
- // freeing the cvar for new threads
- {
- let mut counter = num.lock().unwrap();
- *counter -= 1;
- }
- cvar.notify_one();
- });
- }
-}
-
pub enum ContentType {
Download,
Thumbnail(u32, u32),
diff --git a/fractal-gtk/src/backend/sync.rs b/fractal-gtk/src/backend/sync.rs
index bb49c703..3aef92ba 100644
--- a/fractal-gtk/src/backend/sync.rs
+++ b/fractal-gtk/src/backend/sync.rs
@@ -192,14 +192,13 @@ pub fn sync(
match query {
Ok(response) => {
if since.is_none() {
- let rooms =
- Room::from_sync_response(session_client, &response, user_id, access_token)
- .map(|rooms| {
- let def = join_to_room
- .and_then(|jtr| rooms.iter().find(|x| x.id == jtr).cloned());
- (rooms, def)
- })
- .map_err(Into::into);
+ let rooms = Room::from_sync_response(session_client, &response, user_id)
+ .map(|rooms| {
+ let def = join_to_room
+ .and_then(|jtr| rooms.iter().find(|x| x.id == jtr).cloned());
+ (rooms, def)
+ })
+ .map_err(Into::into);
let next_batch = response.next_batch;
@@ -208,13 +207,9 @@ pub fn sync(
let join = &response.rooms.join;
// New rooms
- let update_rooms = Room::from_sync_response(
- session_client,
- &response,
- user_id.clone(),
- access_token,
- )
- .map_err(Into::into);
+ let update_rooms =
+ Room::from_sync_response(session_client, &response, user_id.clone())
+ .map_err(Into::into);
// Message events
let room_messages = join
diff --git a/fractal-gtk/src/backend/user.rs b/fractal-gtk/src/backend/user.rs
index 1ba462eb..41101f50 100644
--- a/fractal-gtk/src/backend/user.rs
+++ b/fractal-gtk/src/backend/user.rs
@@ -7,19 +7,15 @@ use std::io::Error as IoError;
use super::MediaError;
use crate::actions::global::activate_action;
-use crate::app::RUNTIME;
use crate::appop::UserInfoCache;
-use crate::backend::ThreadPool;
use crate::backend::HTTP_CLIENT;
use crate::util::cache_dir_path;
-use crate::util::ResultExpectLog;
use log::error;
use std::convert::TryInto;
use std::path::PathBuf;
-use std::sync::mpsc::Sender;
-use std::thread;
use crate::model::member::Member;
+use fractal_api::api::r0::profile::get_profile::Request as GetProfileRequest;
use fractal_api::api::r0::user_directory::search_users::Request as UserDirectoryRequest;
use fractal_api::identity::r0::association::msisdn::submit_token::request as submit_phone_token_req;
use fractal_api::identity::r0::association::msisdn::submit_token::Body as SubmitPhoneTokenBody;
@@ -57,9 +53,6 @@ use fractal_api::r0::media::create_content::Response as CreateContentResponse;
use fractal_api::r0::profile::get_display_name::request as get_display_name;
use fractal_api::r0::profile::get_display_name::Parameters as GetDisplayNameParameters;
use fractal_api::r0::profile::get_display_name::Response as GetDisplayNameResponse;
-use fractal_api::r0::profile::get_profile::request as get_profile;
-use fractal_api::r0::profile::get_profile::Parameters as GetProfileParameters;
-use fractal_api::r0::profile::get_profile::Response as GetProfileResponse;
use fractal_api::r0::profile::set_avatar_url::request as set_avatar_url;
use fractal_api::r0::profile::set_avatar_url::Body as SetAvatarUrlBody;
use fractal_api::r0::profile::set_avatar_url::Parameters as SetAvatarUrlParameters;
@@ -561,31 +554,22 @@ pub fn set_user_avatar(
Ok(avatar)
}
-pub fn get_user_info_async(
- thread_pool: ThreadPool,
+pub async fn get_user_info(
session_client: MatrixClient,
user_info_cache: UserInfoCache,
- access_token: AccessToken,
uid: UserId,
- tx: Sender<UserInfo>,
-) {
+) -> Result<UserInfo, GetUserAvatarError> {
if let Some(info) = user_info_cache.lock().unwrap().get(&uid).cloned() {
- thread::spawn(move || {
- tx.send(info).expect_log("Connection closed");
- });
- return;
+ return Ok(info);
}
- thread_pool.run(move || {
- let info = get_user_avatar(session_client, access_token, &uid);
+ let info = get_user_avatar(session_client, &uid).await;
- if let Ok(ref i0) = info {
- user_info_cache.lock().unwrap().insert(uid, i0.clone());
- }
+ if let Ok(ref i0) = info {
+ user_info_cache.lock().unwrap().insert(uid, i0.clone());
+ }
- tx.send(info.unwrap_or_default())
- .expect_log("Connection closed");
- });
+ info
}
#[derive(Debug)]
@@ -625,14 +609,14 @@ pub async fn search(
#[derive(Debug)]
pub enum GetUserAvatarError {
- Reqwest(ReqwestError),
+ Matrix(MatrixError),
Download(MediaError),
ParseUrl(UrlError),
}
-impl From<ReqwestError> for GetUserAvatarError {
- fn from(err: ReqwestError) -> Self {
- Self::Reqwest(err)
+impl From<MatrixError> for GetUserAvatarError {
+ fn from(err: MatrixError) -> Self {
+ Self::Matrix(err)
}
}
@@ -650,36 +634,40 @@ impl From<UrlError> for GetUserAvatarError {
impl HandleError for GetUserAvatarError {}
-pub fn get_user_avatar(
+pub async fn get_user_avatar(
session_client: MatrixClient,
- access_token: AccessToken,
user_id: &UserId,
) -> Result<(String, PathBuf), GetUserAvatarError> {
- let base = session_client.homeserver().clone();
- let params = GetProfileParameters { access_token };
- let request = get_profile(base.clone(), ¶ms, user_id)?;
- let response: GetProfileResponse = HTTP_CLIENT.get_client().execute(request)?.json()?;
-
- let name = response
- .displayname
- .filter(|n| !n.is_empty())
- .unwrap_or_else(|| user_id.to_string());
+ let request = GetProfileRequest::new(user_id);
+ let response = session_client.send(request).await?;
- let img = response
+ let img = match response
.avatar_url
.map(|url| Url::parse(&url))
.transpose()?
.map(|url| {
- let dest = cache_dir_path(None, &user_id.to_string())?;
- RUNTIME.handle().block_on(dw_media(
+ (
+ url,
+ cache_dir_path(None, user_id.as_str()).map_err(MediaError::from),
+ )
+ }) {
+ Some((url, Ok(dest))) => {
+ dw_media(
session_client,
&url,
ContentType::default_thumbnail(),
Some(dest),
- ))
- })
- .unwrap_or_else(|| Ok(Default::default()))
- .map_err(GetUserAvatarError::Download)?;
+ )
+ .await
+ }
+ Some((_, Err(err))) => Err(err),
+ None => Ok(Default::default()),
+ }?;
+
+ let name = response
+ .displayname
+ .filter(|n| !n.is_empty())
+ .unwrap_or_else(|| user_id.as_str().to_owned());
Ok((name, img))
}
diff --git a/fractal-gtk/src/cache/mod.rs b/fractal-gtk/src/cache/mod.rs
index 491c3de9..c4044ce8 100644
--- a/fractal-gtk/src/cache/mod.rs
+++ b/fractal-gtk/src/cache/mod.rs
@@ -1,6 +1,6 @@
+use crate::app::RUNTIME;
use crate::appop::UserInfoCache;
use crate::backend::user;
-use crate::backend::ThreadPool;
use crate::util::cache_dir_path;
use crate::util::ResultExpectLog;
use fractal_api::r0::AccessToken;
@@ -16,7 +16,6 @@ use anyhow::Error;
use fractal_api::identifiers::{DeviceId, UserId};
use std::collections::HashMap;
use std::hash::Hash;
-use std::path::PathBuf;
use std::time::{Duration, Instant};
use crate::globals;
@@ -158,28 +157,15 @@ pub fn remove_from_cache(user_info_cache: UserInfoCache, user_id: &UserId) {
/// this downloads a avatar and stores it in the cache folder
pub fn download_to_cache(
session_client: MatrixClient,
- thread_pool: ThreadPool,
user_info_cache: UserInfoCache,
- access_token: AccessToken,
uid: UserId,
data: Rc<RefCell<AvatarData>>,
) {
- let (tx, rx) = channel::<(String, PathBuf)>();
- user::get_user_info_async(
- thread_pool,
- session_client,
- user_info_cache,
- access_token,
- uid,
- tx,
- );
+ let response = RUNTIME.spawn(user::get_user_info(session_client, user_info_cache, uid));
- glib::timeout_add_local(50, move || match rx.try_recv() {
- Err(TryRecvError::Empty) => Continue(true),
- Err(TryRecvError::Disconnected) => Continue(false),
- Ok(_resp) => {
+ glib::MainContext::default().spawn_local(async move {
+ if let Ok(_) = response.await {
data.borrow_mut().redraw(None);
- Continue(false)
}
});
}
diff --git a/fractal-gtk/src/model/room.rs b/fractal-gtk/src/model/room.rs
index 89eee099..e11952be 100644
--- a/fractal-gtk/src/model/room.rs
+++ b/fractal-gtk/src/model/room.rs
@@ -1,5 +1,6 @@
use serde_json::Value as JsonValue;
+use crate::app::RUNTIME;
use crate::backend::user::get_user_avatar;
use crate::model::member::Member;
use crate::model::member::MemberList;
@@ -8,7 +9,6 @@ use either::Either;
use fractal_api::directory::PublicRoomsChunk;
use fractal_api::identifiers::{Error as IdError, EventId, RoomAliasId, RoomId, UserId};
use fractal_api::r0::sync::sync_events::Response as SyncResponse;
-use fractal_api::r0::AccessToken;
use fractal_api::url::{ParseError as UrlError, Url};
use fractal_api::Client as MatrixClient;
use log::{debug, info};
@@ -138,7 +138,6 @@ impl Room {
session_client: MatrixClient,
response: &SyncResponse,
user_id: UserId,
- access_token: AccessToken,
) -> Result<Vec<Self>, IdError> {
// getting the list of direct rooms
let direct: HashSet<RoomId> = parse_m_direct(&response.account_data.events)
@@ -211,8 +210,9 @@ impl Room {
let leave_id = UserId::try_from(last_event["sender"].as_str().unwrap_or_default())?;
if leave_id != user_id {
let kick_reason = &last_event["content"]["reason"];
- if let Ok((kicker_alias, kicker_avatar)) =
- get_user_avatar(session_client.clone(), access_token.clone(), &leave_id)
+ if let Ok((kicker_alias, kicker_avatar)) = RUNTIME
+ .handle()
+ .block_on(get_user_avatar(session_client.clone(), &leave_id))
{
let kicker = Member {
alias: Some(kicker_alias),
@@ -250,12 +250,11 @@ impl Room {
&& x["state_key"] == user_id.to_string().as_str()
})
.map_or(Ok(None), |ev| {
- Ok(get_user_avatar(
- session_client.clone(),
- access_token.clone(),
- &UserId::try_from(ev["sender"].as_str().unwrap_or_default())?,
- )
- .ok())
+ let user_id = UserId::try_from(ev["sender"].as_str().unwrap_or_default())?;
+ let avatar = RUNTIME
+ .handle()
+ .block_on(get_user_avatar(session_client.clone(), &user_id));
+ Ok(avatar.ok())
});
if let Some((alias, avatar)) = alias_avatar? {
let inv_sender = Member {
diff --git a/fractal-gtk/src/widgets/media_viewer.rs b/fractal-gtk/src/widgets/media_viewer.rs
index 92bcd6bf..6e22a74e 100644
--- a/fractal-gtk/src/widgets/media_viewer.rs
+++ b/fractal-gtk/src/widgets/media_viewer.rs
@@ -1,6 +1,5 @@
use crate::app::RUNTIME;
use crate::backend::media;
-use crate::backend::ThreadPool;
use fractal_api::r0::AccessToken;
use glib::clone;
@@ -640,11 +639,7 @@ impl MediaViewer {
}
}
- pub fn create(
- &mut self,
- session_client: MatrixClient,
- thread_pool: ThreadPool,
- ) -> Option<(gtk::Box, gtk::Box)> {
+ pub fn create(&mut self, session_client: MatrixClient) -> Option<(gtk::Box, gtk::Box)> {
let body = self
.builder
.get_object::<gtk::Box>("media_viewer_box")
@@ -654,7 +649,7 @@ impl MediaViewer {
.get_object::<gtk::Box>("media_viewer_headerbar_box")
.expect("Can't find media_viewer_headerbar in ui file.");
self.connect_media_viewer_headerbar(session_client.clone());
- self.connect_media_viewer_box(session_client, thread_pool);
+ self.connect_media_viewer_box(session_client);
self.connect_stop_video_when_leaving();
Some((body, header))
@@ -728,11 +723,7 @@ impl MediaViewer {
}));
}
- pub fn connect_media_viewer_box(
- &mut self,
- session_client: MatrixClient,
- thread_pool: ThreadPool,
- ) {
+ pub fn connect_media_viewer_box(&mut self, session_client: MatrixClient) {
let full_screen_button = self
.builder
.get_object::<gtk::Button>("full_screen_button")
@@ -889,13 +880,13 @@ impl MediaViewer {
.builder
.get_object::<gtk::Button>("previous_media_button")
.expect("Cant find previous_media_button in ui file.");
- let s_client = session_client.clone();
- let t_pool = thread_pool.clone();
- previous_media_button.connect_clicked(clone!(@weak data => move |_| {
- if !data.borrow_mut().previous_media(s_client.clone()) {
- load_more_media(s_client.clone(), t_pool.clone(), data, builder.clone());
- }
- }));
+ previous_media_button.connect_clicked(
+ clone!(@strong session_client, @weak data => move |_| {
+ if !data.borrow_mut().previous_media(session_client.clone()) {
+ load_more_media(session_client.clone(), data, builder.clone());
+ }
+ }),
+ );
let next_media_button = self
.builder
@@ -1021,12 +1012,7 @@ fn loading_state(ui: >k::Builder, val: bool) -> bool {
val
}
-fn load_more_media(
- session_client: MatrixClient,
- thread_pool: ThreadPool,
- data: Rc<RefCell<Data>>,
- builder: gtk::Builder,
-) {
+fn load_more_media(session_client: MatrixClient, data: Rc<RefCell<Data>>, builder: gtk::Builder) {
data.borrow_mut().loading_more_media = loading_state(&builder, true);
let msg = data.borrow().media_list[data.borrow().current_media_index].clone();
@@ -1053,7 +1039,6 @@ fn load_more_media(
data.borrow_mut().no_more_media = true;
}
- let thread_pool = thread_pool.clone();
let media_list = data.borrow().media_list.clone();
let img_msgs: Vec<Message> = msgs
.into_iter()
@@ -1065,7 +1050,7 @@ fn load_more_media(
data.borrow_mut().media_list = new_media_list;
data.borrow_mut().prev_batch = Some(prev_batch);
if img_msgs_count == 0 {
- load_more_media(session_client.clone(), thread_pool, data, builder.clone());
+ load_more_media(session_client.clone(), data, builder.clone());
} else {
data.borrow_mut().current_media_index += img_msgs_count;
data.borrow_mut().previous_media(session_client.clone());
diff --git a/fractal-gtk/src/widgets/member.rs b/fractal-gtk/src/widgets/member.rs
index 1977ba60..44a2f9ad 100644
--- a/fractal-gtk/src/widgets/member.rs
+++ b/fractal-gtk/src/widgets/member.rs
@@ -56,12 +56,15 @@ impl<'a> MemberBox<'a> {
badge,
None,
);
- if let Some(login_data) = self.op.login_data.clone() {
+ if let Some(session_client) = self
+ .op
+ .login_data
+ .as_ref()
+ .map(|ld| ld.session_client.clone())
+ {
download_to_cache(
- login_data.session_client.clone(),
- self.op.thread_pool.clone(),
+ session_client,
self.op.user_info_cache.clone(),
- login_data.access_token,
self.member.uid.clone(),
data,
);
@@ -101,12 +104,15 @@ impl<'a> MemberBox<'a> {
None,
None,
);
- if let Some(login_data) = self.op.login_data.clone() {
+ if let Some(session_client) = self
+ .op
+ .login_data
+ .as_ref()
+ .map(|ld| ld.session_client.clone())
+ {
download_to_cache(
- login_data.session_client.clone(),
- self.op.thread_pool.clone(),
+ session_client,
self.op.user_info_cache.clone(),
- login_data.access_token,
self.member.uid.clone(),
data,
);
diff --git a/fractal-gtk/src/widgets/message.rs b/fractal-gtk/src/widgets/message.rs
index 2dda58fb..fcdd7175 100644
--- a/fractal-gtk/src/widgets/message.rs
+++ b/fractal-gtk/src/widgets/message.rs
@@ -2,7 +2,6 @@ use crate::util::i18n::i18n;
use itertools::Itertools;
use crate::appop::UserInfoCache;
-use crate::backend::ThreadPool;
use chrono::prelude::*;
use either::Either;
use fractal_api::r0::AccessToken;
@@ -73,7 +72,6 @@ impl MessageBox {
pub fn create(
&mut self,
session_client: MatrixClient,
- thread_pool: ThreadPool,
user_info_cache: UserInfoCache,
msg: &Message,
has_header: bool,
@@ -110,7 +108,7 @@ impl MessageBox {
_ if has_header => {
self.row.set_margin_top(12);
self.header = true;
- self.widget(session_client, thread_pool, user_info_cache, msg)
+ self.widget(session_client, user_info_cache, msg)
}
_ => {
self.header = false;
@@ -131,18 +129,10 @@ impl MessageBox {
pub fn tmpwidget(
mut self,
session_client: MatrixClient,
- thread_pool: ThreadPool,
user_info_cache: UserInfoCache,
msg: &Message,
) -> MessageBox {
- self.create(
- session_client,
- thread_pool,
- user_info_cache,
- msg,
- true,
- true,
- );
+ self.create(session_client, user_info_cache, msg, true, true);
{
let w = self.get_listbox_row();
w.get_style_context().add_class("msg-tmp");
@@ -153,7 +143,6 @@ impl MessageBox {
pub fn update_header(
&mut self,
session_client: MatrixClient,
- thread_pool: ThreadPool,
user_info_cache: UserInfoCache,
msg: Message,
has_header: bool,
@@ -161,7 +150,7 @@ impl MessageBox {
let w = if has_header && msg.mtype != RowType::Emote {
self.row.set_margin_top(12);
self.header = true;
- self.widget(session_client, thread_pool, user_info_cache, &msg)
+ self.widget(session_client, user_info_cache, &msg)
} else {
if let RowType::Emote = msg.mtype {
self.row.set_margin_top(12);
@@ -179,7 +168,6 @@ impl MessageBox {
fn widget(
&mut self,
session_client: MatrixClient,
- thread_pool: ThreadPool,
user_info_cache: UserInfoCache,
msg: &Message,
) -> gtk::Box {
@@ -190,7 +178,7 @@ impl MessageBox {
let msg_widget = gtk::Box::new(gtk::Orientation::Horizontal, 10);
let content = self.build_room_msg_content(session_client.clone(), msg, false);
/* Todo: make build_room_msg_avatar() faster (currently ~1ms) */
- let avatar = self.build_room_msg_avatar(session_client, thread_pool, user_info_cache, msg);
+ let avatar = self.build_room_msg_avatar(session_client, user_info_cache, msg);
msg_widget.pack_start(&avatar, false, false, 0);
msg_widget.pack_start(&content, true, true, 0);
@@ -275,7 +263,6 @@ impl MessageBox {
fn build_room_msg_avatar(
&self,
session_client: MatrixClient,
- thread_pool: ThreadPool,
user_info_cache: UserInfoCache,
msg: &Message,
) -> widgets::Avatar {
@@ -297,14 +284,7 @@ impl MessageBox {
self.username.set_text(&uid.to_string());
}
- download_to_cache(
- session_client,
- thread_pool,
- user_info_cache,
- self.access_token.clone(),
- uid.clone(),
- data.clone(),
- );
+ download_to_cache(session_client, user_info_cache, uid.clone(), data.clone());
download_to_cache_username(
self.server_url.clone(),
self.access_token.clone(),
diff --git a/fractal-gtk/src/widgets/room_history.rs b/fractal-gtk/src/widgets/room_history.rs
index 6126b01c..54192084 100644
--- a/fractal-gtk/src/widgets/room_history.rs
+++ b/fractal-gtk/src/widgets/room_history.rs
@@ -13,7 +13,6 @@ use crate::uitypes::MessageContent;
use crate::uitypes::RowType;
use crate::util::i18n::i18n;
-use crate::backend::ThreadPool;
use crate::globals;
use crate::widgets;
use crate::widgets::{PlayerExt, VideoPlayerWidget};
@@ -314,7 +313,6 @@ impl RoomHistory {
pub fn create(
&mut self,
session_client: MatrixClient,
- thread_pool: ThreadPool,
user_info_cache: UserInfoCache,
mut messages: Vec<MessageContent>,
) -> Option<()> {
@@ -327,14 +325,9 @@ impl RoomHistory {
}
let bottom = messages.split_off(position);
messages.reverse();
- self.add_old_messages_in_batch(
- session_client.clone(),
- thread_pool.clone(),
- user_info_cache.clone(),
- messages,
- );
+ self.add_old_messages_in_batch(session_client.clone(), user_info_cache.clone(), messages);
/* Add the rest of the messages after the new message divider */
- self.add_new_messages_in_batch(session_client, thread_pool, user_info_cache, bottom);
+ self.add_new_messages_in_batch(session_client, user_info_cache, bottom);
let rows = &self.rows;
let id = glib::timeout_add_local(
@@ -453,7 +446,6 @@ impl RoomHistory {
fn run_queue(
&mut self,
session_client: MatrixClient,
- thread_pool: ThreadPool,
user_info_cache: UserInfoCache,
) -> Option<()> {
let queue = self.queue.clone();
@@ -526,7 +518,6 @@ impl RoomHistory {
}
item.widget = Some(create_row(
session_client.clone(),
- thread_pool.clone(),
user_info_cache.clone(),
item.clone(),
has_header,
@@ -564,12 +555,11 @@ impl RoomHistory {
pub fn add_new_message(
&mut self,
session_client: MatrixClient,
- thread_pool: ThreadPool,
user_info_cache: UserInfoCache,
mut item: MessageContent,
) -> Option<()> {
if item.msg.replace.is_some() {
- self.replace_message(session_client, thread_pool, user_info_cache, item);
+ self.replace_message(session_client, user_info_cache, item);
return None;
}
let mut rows = self.rows.borrow_mut();
@@ -603,7 +593,6 @@ impl RoomHistory {
let b = create_row(
session_client,
- thread_pool,
user_info_cache,
item.clone(),
has_header,
@@ -618,7 +607,6 @@ impl RoomHistory {
pub fn replace_message(
&mut self,
session_client: MatrixClient,
- thread_pool: ThreadPool,
user_info_cache: UserInfoCache,
mut item: MessageContent,
) -> Option<()> {
@@ -642,7 +630,6 @@ impl RoomHistory {
item.widget = Some(create_row(
session_client,
- thread_pool,
user_info_cache,
item.clone(),
msg_widget.header,
@@ -656,7 +643,6 @@ impl RoomHistory {
pub fn remove_message(
&mut self,
session_client: MatrixClient,
- thread_pool: ThreadPool,
user_info_cache: UserInfoCache,
item: MessageContent,
) -> Option<()> {
@@ -702,13 +688,7 @@ impl RoomHistory {
msg_next_cloned.redactable && msg_next_cloned.sender == msg_sender
})
{
- msg_widget.update_header(
- session_client,
- thread_pool,
- user_info_cache,
- msg_next_cloned,
- true,
- );
+ msg_widget.update_header(session_client, user_info_cache, msg_next_cloned, true);
}
}
None
@@ -717,18 +697,12 @@ impl RoomHistory {
pub fn add_new_messages_in_batch(
&mut self,
session_client: MatrixClient,
- thread_pool: ThreadPool,
user_info_cache: UserInfoCache,
messages: Vec<MessageContent>,
) -> Option<()> {
/* TODO: use lazy loading */
for item in messages {
- self.add_new_message(
- session_client.clone(),
- thread_pool.clone(),
- user_info_cache.clone(),
- item,
- );
+ self.add_new_message(session_client.clone(), user_info_cache.clone(), item);
}
None
}
@@ -736,7 +710,6 @@ impl RoomHistory {
pub fn add_old_messages_in_batch(
&mut self,
session_client: MatrixClient,
- thread_pool: ThreadPool,
user_info_cache: UserInfoCache,
messages: Vec<MessageContent>,
) -> Option<()> {
@@ -745,7 +718,7 @@ impl RoomHistory {
self.queue
.borrow_mut()
.append(&mut VecDeque::from(messages));
- self.run_queue(session_client, thread_pool, user_info_cache);
+ self.run_queue(session_client, user_info_cache);
None
}
@@ -768,7 +741,6 @@ impl RoomHistory {
/* This function creates the content for a Row based on the content of msg */
fn create_row(
session_client: MatrixClient,
- thread_pool: ThreadPool,
user_info_cache: UserInfoCache,
row: MessageContent,
has_header: bool,
@@ -781,7 +753,6 @@ fn create_row(
let mut mb = widgets::MessageBox::new(server_url, access_token);
mb.create(
session_client,
- thread_pool,
user_info_cache,
&row,
has_header && row.mtype != RowType::Emote,
diff --git a/fractal-matrix-api/src/meson.build b/fractal-matrix-api/src/meson.build
index 386bdfba..618a5df4 100644
--- a/fractal-matrix-api/src/meson.build
+++ b/fractal-matrix-api/src/meson.build
@@ -15,7 +15,6 @@ api_sources = files(
'r0/contact/request_verification_token_msisdn.rs',
'r0/media/create_content.rs',
'r0/profile/get_display_name.rs',
- 'r0/profile/get_profile.rs',
'r0/profile/set_avatar_url.rs',
'r0/profile/set_display_name.rs',
'r0/server/domain_info.rs',
diff --git a/fractal-matrix-api/src/r0/profile.rs b/fractal-matrix-api/src/r0/profile.rs
index c556486e..62d77463 100644
--- a/fractal-matrix-api/src/r0/profile.rs
+++ b/fractal-matrix-api/src/r0/profile.rs
@@ -1,4 +1,3 @@
pub mod get_display_name;
-pub mod get_profile;
pub mod set_avatar_url;
pub mod set_display_name;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]