[fractal] Get room messages through matrix-sdk



commit 0f959afbaa591311ce541741a41a977111ddbff0
Author: Alejandro Domínguez <adomu net-c com>
Date:   Wed Aug 19 22:48:31 2020 +0200

    Get room messages through matrix-sdk

 fractal-gtk/src/actions/message.rs                 |  32 +++----
 fractal-gtk/src/backend/media.rs                   | 103 +++++++++------------
 fractal-gtk/src/backend/mod.rs                     |  32 +++----
 fractal-gtk/src/backend/room.rs                    |  60 ++++++------
 fractal-gtk/src/backend/sync.rs                    |   6 +-
 fractal-gtk/src/globals.rs                         |   2 +-
 fractal-gtk/src/model/message.rs                   |  16 ++--
 fractal-gtk/src/model/room.rs                      |   2 +-
 fractal-gtk/src/widgets/media_viewer.rs            |  42 +++------
 fractal-matrix-api/src/meson.build                 |   3 -
 fractal-matrix-api/src/r0.rs                       |   1 -
 fractal-matrix-api/src/r0/context.rs               |   1 -
 fractal-matrix-api/src/r0/context/get_context.rs   |  51 ----------
 fractal-matrix-api/src/r0/filter.rs                |  12 ---
 fractal-matrix-api/src/r0/message.rs               |   1 -
 .../src/r0/message/get_message_events.rs           |  51 ----------
 16 files changed, 121 insertions(+), 294 deletions(-)
---
diff --git a/fractal-gtk/src/actions/message.rs b/fractal-gtk/src/actions/message.rs
index 05d80621..f135c77c 100644
--- a/fractal-gtk/src/actions/message.rs
+++ b/fractal-gtk/src/actions/message.rs
@@ -17,7 +17,6 @@ use crate::model::message::Message;
 use crate::uibuilder::UI;
 use crate::util::i18n::i18n;
 use crate::App;
-use fractal_api::url::Url;
 use gio::ActionGroupExt;
 use gio::ActionMapExt;
 use gio::SimpleAction;
@@ -224,13 +223,10 @@ pub fn new(
         }
     }));
 
-    load_more_messages.connect_activate(clone!(
-    @strong server_url,
-    @strong access_token
-    => move |_, data| {
+    load_more_messages.connect_activate(move |_, data| {
         let id = get_room_id(data);
-        request_more_messages(server_url.clone(), access_token.clone(), id);
-    }));
+        request_more_messages(session_client.clone(), id);
+    });
 
     actions
 }
@@ -239,18 +235,14 @@ fn get_message(id: Option<&glib::Variant>) -> Option<Message> {
     get_event_id(id).as_ref().and_then(get_message_by_id)
 }
 
-fn request_more_messages(
-    server_url: Url,
-    access_token: AccessToken,
-    id: Option<RoomId>,
-) -> Option<()> {
+fn request_more_messages(session_client: MatrixClient, id: Option<RoomId>) -> Option<()> {
     let op = App::get_op()?;
     let op = op.lock().unwrap();
     let id = id?;
     let r = op.rooms.get(&id)?;
     if let Some(prev_batch) = r.prev_batch.clone() {
-        thread::spawn(move || {
-            match room::get_room_messages(server_url, access_token, id, prev_batch) {
+        RUNTIME.spawn(async move {
+            match room::get_room_messages(session_client, id, &prev_batch).await {
                 Ok((msgs, room, prev_batch)) => {
                     APPOP!(show_room_messages_top, (msgs, room, prev_batch));
                 }
@@ -261,8 +253,8 @@ fn request_more_messages(
         });
     } else if let Some(msg) = r.messages.iter().next().cloned() {
         // no prev_batch so we use the last message to calculate that in the backend
-        thread::spawn(move || {
-            match room::get_room_messages_from_msg(server_url, access_token, id, msg) {
+        RUNTIME.spawn(async move {
+            match room::get_room_messages_from_msg(session_client, id, msg).await {
                 Ok((msgs, room, prev_batch)) => {
                     APPOP!(show_room_messages_top, (msgs, room, prev_batch));
                 }
@@ -273,16 +265,16 @@ fn request_more_messages(
         });
     } else if let Some(from) = op.since.clone() {
         // no messages and no prev_batch so we use the last since
-        thread::spawn(
-            move || match room::get_room_messages(server_url, access_token, id, from) {
+        RUNTIME.spawn(async move {
+            match room::get_room_messages(session_client, id, &from).await {
                 Ok((msgs, room, prev_batch)) => {
                     APPOP!(show_room_messages_top, (msgs, room, prev_batch));
                 }
                 Err(err) => {
                     err.handle_error();
                 }
-            },
-        );
+            }
+        });
     }
     None
 }
diff --git a/fractal-gtk/src/backend/media.rs b/fractal-gtk/src/backend/media.rs
index b3f464ee..3176624d 100644
--- a/fractal-gtk/src/backend/media.rs
+++ b/fractal-gtk/src/backend/media.rs
@@ -1,24 +1,16 @@
 use super::MediaError;
 use crate::globals;
 use fractal_api::identifiers::{Error as IdError, EventId, RoomId};
-use fractal_api::reqwest::Error as ReqwestError;
 use fractal_api::url::Url;
-use fractal_api::Client as MatrixClient;
+use fractal_api::{Client as MatrixClient, Error as MatrixError};
 use std::path::PathBuf;
-use std::sync::mpsc::Sender;
-
-use crate::backend::HTTP_CLIENT;
-use crate::util::ResultExpectLog;
-use fractal_api::r0::AccessToken;
 
 use crate::model::message::Message;
-use fractal_api::r0::filter::RoomEventFilter;
-use fractal_api::r0::message::get_message_events::request as get_messages_events_req;
-use fractal_api::r0::message::get_message_events::Direction as GetMessagesEventsDirection;
-use fractal_api::r0::message::get_message_events::Parameters as GetMessagesEventsParams;
-use fractal_api::r0::message::get_message_events::Response as GetMessagesEventsResponse;
+use fractal_api::api::r0::filter::{RoomEventFilter, UrlFilter};
+use fractal_api::api::r0::message::get_message_events::Request as GetMessagesEventsRequest;
+use fractal_api::assign;
 
-use super::{dw_media, get_prev_batch_from, ContentType, ThreadPool};
+use super::{dw_media, get_prev_batch_from, ContentType};
 
 pub type MediaResult = Result<PathBuf, MediaError>;
 pub type MediaList = (Vec<Message>, String);
@@ -37,70 +29,63 @@ pub async fn get_media(session_client: MatrixClient, media: &Url) -> MediaResult
     dw_media(session_client, media, ContentType::Download, None).await
 }
 
-pub fn get_media_list_async(
-    thread_pool: ThreadPool,
-    baseu: Url,
-    access_token: AccessToken,
+pub async fn get_media_list(
+    session_client: MatrixClient,
     room_id: RoomId,
     first_media_id: EventId,
     prev_batch: Option<String>,
-    tx: Sender<MediaList>,
-) {
-    thread_pool.run(move || {
-        let media_list = prev_batch
-            // FIXME: This should never be an empty token
-            .or_else(|| get_prev_batch_from(baseu.clone(), access_token.clone(), &room_id, 
&first_media_id).ok())
-            .and_then(|from| {
-                get_room_media_list(
-                    baseu,
-                    access_token,
-                    &room_id,
-                    globals::PAGE_LIMIT as u64,
-                    from,
-                ).ok()
-            })
-            .unwrap_or_default();
-        tx.send(media_list).expect_log("Connection closed");
-    });
+) -> Option<MediaList> {
+    // FIXME: This should never be an empty token
+    let from = match prev_batch {
+        Some(prev_batch) => prev_batch,
+        None => get_prev_batch_from(session_client.clone(), &room_id, &first_media_id)
+            .await
+            .ok()?,
+    };
+
+    get_room_media_list(session_client, &room_id, globals::PAGE_LIMIT, &from)
+        .await
+        .ok()
 }
 
 enum GetRoomMediaListError {
-    Reqwest(ReqwestError),
+    Matrix(MatrixError),
     EventsDeserialization(IdError),
 }
 
-impl From<ReqwestError> for GetRoomMediaListError {
-    fn from(err: ReqwestError) -> Self {
-        Self::Reqwest(err)
+impl From<MatrixError> for GetRoomMediaListError {
+    fn from(err: MatrixError) -> Self {
+        Self::Matrix(err)
     }
 }
 
-fn get_room_media_list(
-    baseu: Url,
-    access_token: AccessToken,
+async fn get_room_media_list(
+    session_client: MatrixClient,
     room_id: &RoomId,
-    limit: u64,
-    prev_batch: String,
+    limit: u32,
+    from: &str,
 ) -> Result<MediaList, GetRoomMediaListError> {
-    let params = GetMessagesEventsParams {
-        access_token,
-        from: prev_batch,
+    let not_types = &["m.sticker".into()];
+
+    let request = assign!(GetMessagesEventsRequest::backward(room_id, from), {
         to: None,
-        dir: GetMessagesEventsDirection::Backward,
-        limit,
-        filter: RoomEventFilter {
-            contains_url: true,
-            not_types: vec!["m.sticker"],
-            ..Default::default()
-        },
-    };
+        limit: limit.into(),
+        filter: Some(assign!(RoomEventFilter::empty(), {
+            url_filter: Some(UrlFilter::EventsWithUrl),
+            not_types,
+        })),
+    });
 
-    let request = get_messages_events_req(baseu, &params, room_id)?;
-    let response: GetMessagesEventsResponse = HTTP_CLIENT.get_client().execute(request)?.json()?;
+    let response = session_client.room_messages(request).await?;
 
     let prev_batch = response.end.unwrap_or_default();
-    let evs = response.chunk.iter().rev();
-    let media_list = Message::from_json_events_iter(room_id, evs)
+    // Deserialization to JsonValue should not fail
+    let evs = response
+        .chunk
+        .iter()
+        .rev()
+        .map(|ev| serde_json::to_value(ev.json().get()).unwrap());
+    let media_list = Message::from_json_events(room_id, evs)
         .map_err(GetRoomMediaListError::EventsDeserialization)?;
 
     Ok((media_list, prev_batch))
diff --git a/fractal-gtk/src/backend/mod.rs b/fractal-gtk/src/backend/mod.rs
index 2eeb4bf4..fba8bc4e 100644
--- a/fractal-gtk/src/backend/mod.rs
+++ b/fractal-gtk/src/backend/mod.rs
@@ -1,5 +1,4 @@
 use fractal_api::identifiers::{EventId, RoomId, ServerName};
-use fractal_api::reqwest::Error as ReqwestError;
 use fractal_api::url::Url;
 use fractal_api::{Client as MatrixClient, Error as MatrixError};
 use lazy_static::lazy_static;
@@ -14,14 +13,11 @@ use std::thread;
 
 use crate::client::ClientBlocking;
 use crate::util::cache_dir_path;
+use fractal_api::api::r0::context::get_context::Request as GetContextRequest;
 use fractal_api::api::r0::media::get_content::Request as GetContentRequest;
 use fractal_api::api::r0::media::get_content_thumbnail::Method;
 use fractal_api::api::r0::media::get_content_thumbnail::Request as GetContentThumbnailRequest;
 use fractal_api::assign;
-use fractal_api::r0::context::get_context::request as get_context;
-use fractal_api::r0::context::get_context::Parameters as GetContextParameters;
-use fractal_api::r0::context::get_context::Response as GetContextResponse;
-use fractal_api::r0::AccessToken;
 
 pub mod directory;
 pub mod media;
@@ -95,22 +91,20 @@ impl ContentType {
     }
 }
 
-pub fn get_prev_batch_from(
-    base: Url,
-    access_token: AccessToken,
+pub async fn get_prev_batch_from(
+    session_client: MatrixClient,
     room_id: &RoomId,
     event_id: &EventId,
-) -> Result<String, ReqwestError> {
-    let params = GetContextParameters {
-        access_token,
-        limit: 0,
-        filter: Default::default(),
-    };
-
-    let request = get_context(base, &params, room_id, event_id)?;
-    let response: GetContextResponse = HTTP_CLIENT.get_client().execute(request)?.json()?;
-    let prev_batch = response.start.unwrap_or_default();
-
+) -> Result<String, MatrixError> {
+    let request = assign!(GetContextRequest::new(room_id, event_id), {
+        limit: 0_u32.into(),
+    });
+
+    let prev_batch = session_client
+        .send(request)
+        .await?
+        .start
+        .unwrap_or_default();
     Ok(prev_batch)
 }
 
diff --git a/fractal-gtk/src/backend/room.rs b/fractal-gtk/src/backend/room.rs
index 68945831..ee7adc36 100644
--- a/fractal-gtk/src/backend/room.rs
+++ b/fractal-gtk/src/backend/room.rs
@@ -29,6 +29,8 @@ use crate::model::{
 };
 use fractal_api::api::r0::config::get_global_account_data::Request as GetGlobalAccountDataRequest;
 use fractal_api::api::r0::config::set_global_account_data::Request as SetGlobalAccountDataRequest;
+use fractal_api::api::r0::filter::RoomEventFilter;
+use fractal_api::api::r0::message::get_message_events::Request as GetMessagesEventsRequest;
 use fractal_api::api::r0::room::create_room::Request as CreateRoomRequest;
 use fractal_api::api::r0::room::create_room::RoomPreset;
 use fractal_api::api::r0::room::Visibility;
@@ -41,17 +43,12 @@ use fractal_api::events::EventType;
 use fractal_api::events::InitialStateEvent;
 use fractal_api::r0::config::set_room_account_data::request as set_room_account_data;
 use fractal_api::r0::config::set_room_account_data::Parameters as SetRoomAccountDataParameters;
-use fractal_api::r0::filter::RoomEventFilter;
 use fractal_api::r0::media::create_content::request as create_content;
 use fractal_api::r0::media::create_content::Parameters as CreateContentParameters;
 use fractal_api::r0::media::create_content::Response as CreateContentResponse;
 use fractal_api::r0::message::create_message_event::request as create_message_event;
 use fractal_api::r0::message::create_message_event::Parameters as CreateMessageEventParameters;
 use fractal_api::r0::message::create_message_event::Response as CreateMessageEventResponse;
-use fractal_api::r0::message::get_message_events::request as get_messages_events;
-use fractal_api::r0::message::get_message_events::Direction as GetMessagesEventsDirection;
-use fractal_api::r0::message::get_message_events::Parameters as GetMessagesEventsParams;
-use fractal_api::r0::message::get_message_events::Response as GetMessagesEventsResponse;
 use fractal_api::r0::pushrules::delete_room_rules::request as delete_room_rules;
 use fractal_api::r0::pushrules::delete_room_rules::Parameters as DelRoomRulesParams;
 use fractal_api::r0::pushrules::get_room_rules::request as get_room_rules;
@@ -212,13 +209,13 @@ pub fn get_room_members(
 #[derive(Debug)]
 pub enum RoomMessagesToError {
     MessageNotSent,
-    Reqwest(ReqwestError),
+    Matrix(MatrixError),
     EventsDeserialization(IdError),
 }
 
-impl From<ReqwestError> for RoomMessagesToError {
-    fn from(err: ReqwestError) -> Self {
-        Self::Reqwest(err)
+impl<T: Into<MatrixError>> From<T> for RoomMessagesToError {
+    fn from(err: T) -> Self {
+        Self::Matrix(err.into())
     }
 }
 
@@ -227,38 +224,37 @@ impl HandleError for RoomMessagesToError {}
 /* Load older messages starting by prev_batch
  * https://matrix.org/docs/spec/client_server/latest.html#get-matrix-client-r0-rooms-roomid-messages
  */
-pub fn get_room_messages(
-    base: Url,
-    access_token: AccessToken,
+pub async fn get_room_messages(
+    session_client: MatrixClient,
     room_id: RoomId,
-    from: String,
+    from: &str,
 ) -> Result<(Vec<Message>, RoomId, Option<String>), RoomMessagesToError> {
-    let params = GetMessagesEventsParams {
-        access_token,
-        from,
+    let types = &["m.room.message".into(), "m.sticker".into()];
+
+    let request = assign!(GetMessagesEventsRequest::backward(&room_id, from), {
         to: None,
-        dir: GetMessagesEventsDirection::Backward,
-        limit: globals::PAGE_LIMIT as u64,
-        filter: RoomEventFilter {
-            types: Some(vec!["m.room.message", "m.sticker"]),
-            ..Default::default()
-        },
-    };
+        limit: globals::PAGE_LIMIT.into(),
+        filter: Some(assign!(RoomEventFilter::empty(), {
+            types: Some(types),
+        })),
+    });
 
-    let request = get_messages_events(base, &params, &room_id)?;
-    let response: GetMessagesEventsResponse = HTTP_CLIENT.get_client().execute(request)?.json()?;
+    let response = session_client.room_messages(request).await?;
 
     let prev_batch = response.end;
-    let evs = response.chunk.iter().rev();
-    let list = Message::from_json_events_iter(&room_id, evs)
+    let evs = response
+        .chunk
+        .into_iter()
+        .rev()
+        .map(|ev| serde_json::to_value(ev.json().get()).unwrap());
+    let list = Message::from_json_events(&room_id, evs)
         .map_err(RoomMessagesToError::EventsDeserialization)?;
 
     Ok((list, room_id, prev_batch))
 }
 
-pub fn get_room_messages_from_msg(
-    base: Url,
-    access_token: AccessToken,
+pub async fn get_room_messages_from_msg(
+    session_client: MatrixClient,
     room_id: RoomId,
     msg: Message,
 ) -> Result<(Vec<Message>, RoomId, Option<String>), RoomMessagesToError> {
@@ -266,9 +262,9 @@ pub fn get_room_messages_from_msg(
 
     // first of all, we calculate the from param using the context api, then we call the
     // normal get_room_messages
-    let from = get_prev_batch_from(base.clone(), access_token.clone(), &room_id, event_id)?;
+    let from = get_prev_batch_from(session_client.clone(), &room_id, event_id).await?;
 
-    get_room_messages(base, access_token, room_id, from)
+    get_room_messages(session_client, room_id, &from).await
 }
 
 #[derive(Debug)]
diff --git a/fractal-gtk/src/backend/sync.rs b/fractal-gtk/src/backend/sync.rs
index 091d2f39..bb49c703 100644
--- a/fractal-gtk/src/backend/sync.rs
+++ b/fractal-gtk/src/backend/sync.rs
@@ -140,7 +140,7 @@ pub fn sync(
                 timeline: Some(RoomEventFilter {
                     types: Some(vec!["m.room.message", "m.sticker"]),
                     not_types: vec!["m.call.*"],
-                    limit: Some(globals::PAGE_LIMIT),
+                    limit: Some(globals::PAGE_LIMIT as i32),
                     ..Default::default()
                 }),
                 ephemeral: Some(RoomEventFilter {
@@ -220,8 +220,8 @@ pub fn sync(
                 let room_messages = join
                     .iter()
                     .try_fold(Vec::new(), |mut acum, (k, room)| {
-                        let events = room.timeline.events.iter();
-                        Message::from_json_events_iter(&k, events).map(|msgs| {
+                        let events = room.timeline.events.clone();
+                        Message::from_json_events(&k, events).map(|msgs| {
                             acum.extend(msgs);
                             acum
                         })
diff --git a/fractal-gtk/src/globals.rs b/fractal-gtk/src/globals.rs
index 4a26bf50..3712abd8 100644
--- a/fractal-gtk/src/globals.rs
+++ b/fractal-gtk/src/globals.rs
@@ -5,7 +5,7 @@ use regex::Regex;
 use std::{path::PathBuf, time::Duration};
 
 pub const TIMEOUT: Duration = Duration::from_secs(80);
-pub const PAGE_LIMIT: i32 = 40;
+pub const PAGE_LIMIT: u32 = 40;
 pub const ROOM_DIRECTORY_LIMIT: u32 = 20;
 pub const DEVICE_NAME: &str = "Fractal";
 
diff --git a/fractal-gtk/src/model/message.rs b/fractal-gtk/src/model/message.rs
index 56158e8e..22cc9a5a 100644
--- a/fractal-gtk/src/model/message.rs
+++ b/fractal-gtk/src/model/message.rs
@@ -65,7 +65,7 @@ impl Message {
     /// List all supported types. By default a message map a m.room.message event, but there's
     /// other events that we want to show in the message history so we map other event types to our
     /// Message struct, like stickers
-    pub const TYPES: [&'static str; 2] = ["m.room.message", "m.sticker"];
+    const SUPPORTED_EVENTS: [&'static str; 2] = ["m.room.message", "m.sticker"];
 
     pub fn new(
         room: RoomId,
@@ -110,10 +110,10 @@ impl Message {
 
     /// Helper function to use in iterator filter of a matrix.org json response to filter supported
     /// events
-    pub fn supported_event(ev: &&JsonValue) -> bool {
+    fn supported_event(ev: &JsonValue) -> bool {
         let type_ = ev["type"].as_str().unwrap_or_default();
 
-        Self::TYPES.contains(&type_)
+        Self::SUPPORTED_EVENTS.contains(&type_)
     }
 
     /// Parses a matrix.org event and return a Message object
@@ -223,16 +223,14 @@ impl Message {
     ///
     /// * `roomid` - The messages room id
     /// * `events` - An iterator to the json events
-    pub fn from_json_events_iter<'a, I>(
-        room_id: &RoomId,
-        events: I,
-    ) -> Result<Vec<Message>, IdError>
+    pub fn from_json_events<I>(room_id: &RoomId, events: I) -> Result<Vec<Message>, IdError>
     where
-        I: Iterator<Item = &'a JsonValue>,
+        I: IntoIterator<Item = JsonValue>,
     {
         events
+            .into_iter()
             .filter(Message::supported_event)
-            .map(|msg| Message::parse_room_message(&room_id, msg))
+            .map(|msg| Message::parse_room_message(&room_id, &msg))
             .collect()
     }
 
diff --git a/fractal-gtk/src/model/room.rs b/fractal-gtk/src/model/room.rs
index 3521114c..89eee099 100644
--- a/fractal-gtk/src/model/room.rs
+++ b/fractal-gtk/src/model/room.rs
@@ -174,7 +174,7 @@ impl Room {
                 notifications: room.unread_notifications.notification_count,
                 highlight: room.unread_notifications.highlight_count,
                 prev_batch: timeline.prev_batch.clone(),
-                messages: Message::from_json_events_iter(&k, timeline.events.iter())?,
+                messages: Message::from_json_events(&k, timeline.events.clone())?,
                 admins: get_admins(stevents)?,
                 default_power_level: get_default_power_level(stevents),
                 members: stevents
diff --git a/fractal-gtk/src/widgets/media_viewer.rs b/fractal-gtk/src/widgets/media_viewer.rs
index 292a448a..92bcd6bf 100644
--- a/fractal-gtk/src/widgets/media_viewer.rs
+++ b/fractal-gtk/src/widgets/media_viewer.rs
@@ -1,3 +1,4 @@
+use crate::app::RUNTIME;
 use crate::backend::media;
 use crate::backend::ThreadPool;
 use fractal_api::r0::AccessToken;
@@ -29,9 +30,6 @@ use crate::widgets::ErrorDialog;
 use crate::widgets::PlayerExt;
 use crate::widgets::{MediaPlayer, VideoPlayerWidget};
 use std::sync::atomic::{AtomicBool, Ordering};
-use std::sync::mpsc::channel;
-use std::sync::mpsc::TryRecvError;
-use std::sync::mpsc::{Receiver, Sender};
 use std::sync::Arc;
 use std::sync::Mutex;
 
@@ -1035,38 +1033,24 @@ fn load_more_media(
     let roomid = msg.room.clone();
     let first_media_id = unwrap_or_unit_return!(msg.id);
     let prev_batch = data.borrow().prev_batch.clone();
-    let server_url = data.borrow().server_url.clone();
-    let access_token = data.borrow().access_token.clone();
-
-    let (tx, rx): (Sender<media::MediaList>, Receiver<media::MediaList>) = channel();
-    media::get_media_list_async(
-        thread_pool.clone(),
-        server_url,
-        access_token,
+
+    let media_list = RUNTIME.spawn(media::get_media_list(
+        session_client.clone(),
         roomid,
         first_media_id,
         prev_batch,
-        tx,
-    );
-
-    let ui = builder.clone();
-    glib::timeout_add_local(
-        50,
-        clone!(
-        @weak data
-        => @default-return Continue(false), move || match rx.try_recv() {
-            Err(TryRecvError::Empty) => Continue(true),
-            Err(TryRecvError::Disconnected) => {
+    ));
+
+    glib::MainContext::default().spawn_local(async move {
+        match media_list.await.map(Option::unwrap_or_default) {
+            Err(_) => {
                 data.borrow_mut().loading_error = true;
                 let err = i18n("Error while loading previous media");
                 ErrorDialog::new(false, &err);
-
-                Continue(false)
             }
             Ok((msgs, prev_batch)) => {
                 if msgs.is_empty() {
                     data.borrow_mut().no_more_media = true;
-                    return Continue(false);
                 }
 
                 let thread_pool = thread_pool.clone();
@@ -1085,11 +1069,9 @@ fn load_more_media(
                 } else {
                     data.borrow_mut().current_media_index += img_msgs_count;
                     data.borrow_mut().previous_media(session_client.clone());
-                    data.borrow_mut().loading_more_media = loading_state(&ui, false);
+                    data.borrow_mut().loading_more_media = loading_state(&builder, false);
                 }
-
-                Continue(false)
             }
-        }),
-    );
+        }
+    });
 }
diff --git a/fractal-matrix-api/src/meson.build b/fractal-matrix-api/src/meson.build
index 3afeee5d..bd555ab6 100644
--- a/fractal-matrix-api/src/meson.build
+++ b/fractal-matrix-api/src/meson.build
@@ -14,10 +14,8 @@ api_sources = files(
   'r0/contact/get_identifiers.rs',
   'r0/contact/request_verification_token_email.rs',
   'r0/contact/request_verification_token_msisdn.rs',
-  'r0/context/get_context.rs',
   'r0/media/create_content.rs',
   'r0/message/create_message_event.rs',
-  'r0/message/get_message_events.rs',
   'r0/profile/get_display_name.rs',
   'r0/profile/get_profile.rs',
   'r0/profile/set_avatar_url.rs',
@@ -36,7 +34,6 @@ api_sources = files(
   'r0/account.rs',
   'r0/config.rs',
   'r0/contact.rs',
-  'r0/context.rs',
   'r0/filter.rs',
   'r0/media.rs',
   'r0/message.rs',
diff --git a/fractal-matrix-api/src/r0.rs b/fractal-matrix-api/src/r0.rs
index e7088cb0..e9437ab7 100644
--- a/fractal-matrix-api/src/r0.rs
+++ b/fractal-matrix-api/src/r0.rs
@@ -1,7 +1,6 @@
 pub mod account;
 pub mod config;
 pub mod contact;
-pub mod context;
 pub mod filter;
 pub mod media;
 pub mod message;
diff --git a/fractal-matrix-api/src/r0/filter.rs b/fractal-matrix-api/src/r0/filter.rs
index 3571fb6a..ccb248a5 100644
--- a/fractal-matrix-api/src/r0/filter.rs
+++ b/fractal-matrix-api/src/r0/filter.rs
@@ -102,15 +102,3 @@ where
 
     ser.serialize_str(&filter_str)
 }
-
-pub(crate) fn serialize_room_event_filter_as_str<S>(
-    filter: &RoomEventFilter,
-    ser: S,
-) -> Result<S::Ok, S::Error>
-where
-    S: Serializer,
-{
-    let filter_str = serde_json::to_string(filter).expect("Malformed filter");
-
-    ser.serialize_str(&filter_str)
-}
diff --git a/fractal-matrix-api/src/r0/message.rs b/fractal-matrix-api/src/r0/message.rs
index 9abe4770..a6fdcc30 100644
--- a/fractal-matrix-api/src/r0/message.rs
+++ b/fractal-matrix-api/src/r0/message.rs
@@ -1,2 +1 @@
 pub mod create_message_event;
-pub mod get_message_events;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]