[fractal] API, util.rs: move functions that are only used by one mod
- From: Jordan Petridis <jpetridis src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [fractal] API, util.rs: move functions that are only used by one mod
- Date: Wed, 25 Sep 2019 07:48:47 +0000 (UTC)
commit e6c8978303aac8578c16aff869dbeba60664e1d2
Author: Alejandro DomÃnguez <adomu net-c com>
Date: Thu Aug 29 04:07:58 2019 +0200
API, util.rs: move functions that are only used by one mod
fractal-matrix-api/src/backend/media.rs | 55 ++++++++++++++++++++++++-
fractal-matrix-api/src/backend/room.rs | 20 +++++++--
fractal-matrix-api/src/backend/user.rs | 13 +++++-
fractal-matrix-api/src/util.rs | 73 ---------------------------------
4 files changed, 83 insertions(+), 78 deletions(-)
---
diff --git a/fractal-matrix-api/src/backend/media.rs b/fractal-matrix-api/src/backend/media.rs
index e03413ec..b8f8f5a9 100644
--- a/fractal-matrix-api/src/backend/media.rs
+++ b/fractal-matrix-api/src/backend/media.rs
@@ -2,18 +2,23 @@ use crate::backend::types::BKResponse;
use crate::backend::types::Backend;
use crate::error::Error;
use crate::globals;
+use serde_json::json;
use std::sync::mpsc::Sender;
use std::thread;
+use url::Url;
use crate::util;
use crate::util::cache_dir_path;
+use crate::util::client_url;
use crate::util::download_file;
-use crate::util::get_room_media_list;
+use crate::util::get_prev_batch_from;
+use crate::util::json_q;
use crate::util::resolve_media_url;
use crate::util::semaphore;
use crate::util::thumb;
use crate::util::ResultExpectLog;
+use crate::r0::filter::RoomEventFilter;
use crate::types::Message;
pub fn get_thumb_async(bk: &Backend, media: String, tx: Sender<String>) -> Result<(), Error> {
@@ -138,3 +143,51 @@ pub fn get_file_async(url: String, tx: Sender<String>) -> Result<(), Error> {
Ok(())
}
+
+fn get_room_media_list(
+ baseu: &Url,
+ tk: &str,
+ roomid: &str,
+ limit: i32,
+ first_media_id: Option<String>,
+ prev_batch: &Option<String>,
+) -> Result<(Vec<Message>, String), Error> {
+ let mut params = vec![
+ ("dir", String::from("b")),
+ ("limit", format!("{}", limit)),
+ ("access_token", String::from(tk)),
+ (
+ "filter",
+ serde_json::to_string(&RoomEventFilter {
+ contains_url: true,
+ not_types: vec!["m.sticker"],
+ ..Default::default()
+ })
+ .expect("Failed to serialize room media list request filter"),
+ ),
+ ];
+
+ match prev_batch {
+ Some(ref pb) => params.push(("from", pb.clone())),
+ None => {
+ if let Some(id) = first_media_id {
+ params.push(("from", get_prev_batch_from(baseu, tk, &roomid, &id)?))
+ }
+ }
+ };
+
+ let path = format!("rooms/{}/messages", roomid);
+ let url = client_url(baseu, &path, ¶ms)?;
+
+ let r = json_q("get", &url, &json!(null))?;
+ let array = r["chunk"].as_array();
+ let prev_batch = r["end"].to_string().trim_matches('"').to_string();
+ if array.is_none() || array.unwrap().is_empty() {
+ return Ok((vec![], prev_batch));
+ }
+
+ let evs = array.unwrap().iter().rev();
+ let media_list = Message::from_json_events_iter(roomid, evs);
+
+ Ok((media_list, prev_batch))
+}
diff --git a/fractal-matrix-api/src/backend/room.rs b/fractal-matrix-api/src/backend/room.rs
index 1cf2d3e5..cae35146 100644
--- a/fractal-matrix-api/src/backend/room.rs
+++ b/fractal-matrix-api/src/backend/room.rs
@@ -1,6 +1,7 @@
use log::error;
use serde_json::json;
+use reqwest::header::CONTENT_TYPE;
use std::fs::File;
use std::io::prelude::*;
use std::sync::mpsc::Sender;
@@ -13,12 +14,12 @@ use crate::error::Error;
use crate::globals;
use std::thread;
-use crate::util;
use crate::util::cache_dir_path;
+use crate::util::get_prev_batch_from;
use crate::util::json_q;
-use crate::util::put_media;
use crate::util::thumb;
use crate::util::ResultExpectLog;
+use crate::util::HTTP_CLIENT;
use crate::util::{client_url, media_url};
use crate::backend::types::BKCommand;
@@ -174,7 +175,7 @@ pub fn get_room_messages_from_msg(bk: &Backend, roomid: String, msg: Message) ->
let tx = bk.internal_tx.clone();
thread::spawn(move || {
- if let Ok(from) = util::get_prev_batch_from(&baseu, &tk, &roomid, &msg.id) {
+ if let Ok(from) = get_prev_batch_from(&baseu, &tk, &roomid, &msg.id) {
if let Some(t) = tx {
t.send(BKCommand::GetRoomMessages(roomid, from))
.expect_log("Connection closed");
@@ -755,3 +756,16 @@ pub fn invite(bk: &Backend, roomid: &str, userid: &str) -> Result<(), Error> {
Ok(())
}
+
+fn put_media(url: &str, file: Vec<u8>) -> Result<JsonValue, Error> {
+ let (mime, _) = gio::content_type_guess(None, &file);
+
+ HTTP_CLIENT
+ .get_client()?
+ .post(url)
+ .body(file)
+ .header(CONTENT_TYPE, mime.to_string())
+ .send()?
+ .json()
+ .or(Err(Error::BackendError))
+}
diff --git a/fractal-matrix-api/src/backend/user.rs b/fractal-matrix-api/src/backend/user.rs
index 715043a6..e0b5a196 100644
--- a/fractal-matrix-api/src/backend/user.rs
+++ b/fractal-matrix-api/src/backend/user.rs
@@ -3,16 +3,18 @@ use std::fs;
use crate::backend::types::BKResponse;
use crate::backend::types::Backend;
use crate::error::Error;
+use crate::util::cache_dir_path;
use crate::util::encode_uid;
use crate::util::get_user_avatar;
-use crate::util::get_user_avatar_img;
use crate::util::semaphore;
+use crate::util::thumb;
use crate::util::ResultExpectLog;
use crate::util::HTTP_CLIENT;
use reqwest::header::HeaderValue;
use std::sync::mpsc::Sender;
use std::sync::{Arc, Mutex};
use std::thread;
+use url::Url;
use crate::identity::r0::association::msisdn::submit_token::request as submit_phone_token_req;
use crate::identity::r0::association::msisdn::submit_token::Body as SubmitPhoneTokenBody;
@@ -624,3 +626,12 @@ pub fn search(bk: &Backend, search_term: String) {
}
});
}
+
+fn get_user_avatar_img(baseu: &Url, userid: &str, avatar: &str) -> Result<String, Error> {
+ if avatar.is_empty() {
+ return Ok(String::new());
+ }
+
+ let dest = cache_dir_path("", &userid)?;
+ thumb(baseu, &avatar, Some(&dest))
+}
diff --git a/fractal-matrix-api/src/util.rs b/fractal-matrix-api/src/util.rs
index efc13edb..2e027353 100644
--- a/fractal-matrix-api/src/util.rs
+++ b/fractal-matrix-api/src/util.rs
@@ -20,13 +20,10 @@ use std::thread;
use crate::client::Client;
use crate::error::Error;
-use crate::r0::filter::RoomEventFilter;
use crate::r0::profile::get_profile::request as get_profile;
use crate::r0::profile::get_profile::Response as GetProfileResponse;
-use crate::types::Message;
use reqwest::header::CONTENT_LENGTH;
-use reqwest::header::CONTENT_TYPE;
use crate::globals;
@@ -186,67 +183,6 @@ pub fn get_prev_batch_from(
Ok(prev_batch)
}
-pub fn get_room_media_list(
- baseu: &Url,
- tk: &str,
- roomid: &str,
- limit: i32,
- first_media_id: Option<String>,
- prev_batch: &Option<String>,
-) -> Result<(Vec<Message>, String), Error> {
- let mut params = vec![
- ("dir", String::from("b")),
- ("limit", format!("{}", limit)),
- ("access_token", String::from(tk)),
- (
- "filter",
- serde_json::to_string(&RoomEventFilter {
- contains_url: true,
- not_types: vec!["m.sticker"],
- ..Default::default()
- })
- .expect("Failed to serialize room media list request filter"),
- ),
- ];
-
- match prev_batch {
- Some(ref pb) => params.push(("from", pb.clone())),
- None => {
- if let Some(id) = first_media_id {
- params.push(("from", get_prev_batch_from(baseu, tk, &roomid, &id)?))
- }
- }
- };
-
- let path = format!("rooms/{}/messages", roomid);
- let url = client_url(baseu, &path, ¶ms)?;
-
- let r = json_q("get", &url, &json!(null))?;
- let array = r["chunk"].as_array();
- let prev_batch = r["end"].to_string().trim_matches('"').to_string();
- if array.is_none() || array.unwrap().is_empty() {
- return Ok((vec![], prev_batch));
- }
-
- let evs = array.unwrap().iter().rev();
- let media_list = Message::from_json_events_iter(roomid, evs);
-
- Ok((media_list, prev_batch))
-}
-
-pub fn put_media(url: &str, file: Vec<u8>) -> Result<JsonValue, Error> {
- let (mime, _) = gio::content_type_guess(None, &file);
-
- HTTP_CLIENT
- .get_client()?
- .post(url)
- .body(file)
- .header(CONTENT_TYPE, mime.to_string())
- .send()?
- .json()
- .or(Err(Error::BackendError))
-}
-
pub fn resolve_media_url(base: &Url, url: &str, thumb: bool, w: i32, h: i32) -> Result<Url, Error> {
let caps = globals::MATRIX_RE
.captures(url)
@@ -452,15 +388,6 @@ pub fn cache_dir_path(dir: Option<&str>, name: &str) -> Result<String, Error> {
.ok_or(Error::CacheError)
}
-pub fn get_user_avatar_img(baseu: &Url, userid: &str, avatar: &str) -> Result<String, Error> {
- if avatar.is_empty() {
- return Ok(String::new());
- }
-
- let dest = cache_dir_path(None, &userid)?;
- thumb(baseu, &avatar, Some(&dest))
-}
-
pub fn encode_uid(userid: &str) -> String {
utf8_percent_encode(userid, USERINFO_ENCODE_SET).collect::<String>()
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]