[fractal] API, room: use endpoint in mark_as_read
- From: Daniel Garcia Moreno <danigm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [fractal] API, room: use endpoint in mark_as_read
- Date: Thu, 2 Apr 2020 10:39:00 +0000 (UTC)
commit 1622a2a5372122e4aad7bf2eb564ed5ee98c7d80
Author: Alejandro DomÃnguez <adomu net-c com>
Date: Sat Mar 7 06:43:47 2020 +0100
API, room: use endpoint in mark_as_read
fractal-matrix-api/src/backend/mod.rs | 7 ++-
fractal-matrix-api/src/backend/room.rs | 63 +++++++---------------
fractal-matrix-api/src/r0.rs | 1 +
fractal-matrix-api/src/r0/read_marker.rs | 1 +
.../src/r0/read_marker/set_read_marker.rs | 36 +++++++++++++
5 files changed, 62 insertions(+), 46 deletions(-)
---
diff --git a/fractal-matrix-api/src/backend/mod.rs b/fractal-matrix-api/src/backend/mod.rs
index d4428940..d2ab6090 100644
--- a/fractal-matrix-api/src/backend/mod.rs
+++ b/fractal-matrix-api/src/backend/mod.rs
@@ -299,8 +299,11 @@ impl Backend {
});
}
Ok(BKCommand::MarkAsRead(server, access_token, room_id, evid)) => {
- let r = room::mark_as_read(self, server, access_token, room_id, evid);
- bkerror2!(r, tx, BKResponse::MarkedAsRead);
+ thread::spawn(move || {
+ let query = room::mark_as_read(server, access_token, room_id, evid);
+ tx.send(BKResponse::MarkedAsRead(query))
+ .expect_log("Connection closed");
+ });
}
Ok(BKCommand::SetRoomName(server, access_token, room_id, name)) => {
let r = room::set_room_name(self, server, access_token, room_id, name);
diff --git a/fractal-matrix-api/src/backend/room.rs b/fractal-matrix-api/src/backend/room.rs
index 23eec315..498cc869 100644
--- a/fractal-matrix-api/src/backend/room.rs
+++ b/fractal-matrix-api/src/backend/room.rs
@@ -49,6 +49,9 @@ use crate::r0::message::get_message_events::request as get_messages_events;
use crate::r0::message::get_message_events::Direction as GetMessagesEventsDirection;
use crate::r0::message::get_message_events::Parameters as GetMessagesEventsParams;
use crate::r0::message::get_message_events::Response as GetMessagesEventsResponse;
+use crate::r0::read_marker::set_read_marker::request as set_read_marker;
+use crate::r0::read_marker::set_read_marker::Body as SetReadMarkerBody;
+use crate::r0::read_marker::set_read_marker::Parameters as SetReadMarkerParameters;
use crate::r0::redact::redact_event::request as redact_event;
use crate::r0::redact::redact_event::Body as RedactEventBody;
use crate::r0::redact::redact_event::Parameters as RedactEventParameters;
@@ -416,60 +419,32 @@ pub fn leave_room(base: Url, access_token: AccessToken, room_id: RoomId) -> Resu
leave_room_req(base, &room_id, ¶ms)
.map_err(Into::into)
.and_then(|request| {
- HTTP_CLIENT
- .get_client()?
- .execute(request)
- .map_err(Into::into)
+ let _ = HTTP_CLIENT.get_client()?.execute(request)?;
+
+ Ok(())
})
- .and(Ok(()))
}
pub fn mark_as_read(
- bk: &Backend,
base: Url,
access_token: AccessToken,
room_id: RoomId,
- eventid: String,
-) -> Result<(), Error> {
- let url = bk.url(
- base.clone(),
- &access_token,
- &format!("rooms/{}/receipt/m.read/{}", room_id, eventid),
- vec![],
- )?;
+ event_id: String,
+) -> Result<(RoomId, String), Error> {
+ let params = SetReadMarkerParameters { access_token };
- let r = room_id.clone();
- let e = eventid.clone();
- let tx = bk.tx.clone();
- post!(
- url,
- move |_: JsonValue| {
- tx.send(BKResponse::MarkedAsRead(Ok((r, e))))
- .expect_log("Connection closed");
- },
- |err| {
- tx.send(BKResponse::MarkedAsRead(Err(err)))
- .expect_log("Connection closed");
- }
- );
+ let body = SetReadMarkerBody {
+ fully_read: event_id.clone(),
+ read: Some(event_id.clone()),
+ };
- // send fully_read event
- // This event API call isn't in the current doc but I found this in the
- // matrix-js-sdk
- // https://github.com/matrix-org/matrix-js-sdk/blob/master/src/base-apis.js#L851
- let url = bk.url(
- base,
- &access_token,
- &format!("rooms/{}/read_markers", room_id),
- vec![],
- )?;
- let attrs = json!({
- "m.fully_read": eventid,
- "m.read": json!(null),
- });
- post!(url, &attrs, |_| {}, |_| {});
+ set_read_marker(base, ¶ms, &body, &room_id)
+ .map_err(Into::into)
+ .and_then(|request| {
+ let _ = HTTP_CLIENT.get_client()?.execute(request)?;
- Ok(())
+ Ok((room_id, event_id))
+ })
}
pub fn set_room_name(
diff --git a/fractal-matrix-api/src/r0.rs b/fractal-matrix-api/src/r0.rs
index fe9ca986..cea5d6ea 100644
--- a/fractal-matrix-api/src/r0.rs
+++ b/fractal-matrix-api/src/r0.rs
@@ -7,6 +7,7 @@ pub mod media;
pub mod membership;
pub mod message;
pub mod profile;
+pub mod read_marker;
pub mod redact;
pub mod search;
pub mod server;
diff --git a/fractal-matrix-api/src/r0/read_marker.rs b/fractal-matrix-api/src/r0/read_marker.rs
new file mode 100644
index 00000000..a132953d
--- /dev/null
+++ b/fractal-matrix-api/src/r0/read_marker.rs
@@ -0,0 +1 @@
+pub mod set_read_marker;
diff --git a/fractal-matrix-api/src/r0/read_marker/set_read_marker.rs
b/fractal-matrix-api/src/r0/read_marker/set_read_marker.rs
new file mode 100644
index 00000000..3bc58d78
--- /dev/null
+++ b/fractal-matrix-api/src/r0/read_marker/set_read_marker.rs
@@ -0,0 +1,36 @@
+use crate::r0::AccessToken;
+use reqwest::blocking::Client;
+use reqwest::blocking::Request;
+use reqwest::Error;
+use ruma_identifiers::RoomId;
+use serde::Serialize;
+use url::Url;
+
+#[derive(Clone, Debug, Serialize)]
+pub struct Parameters {
+ pub access_token: AccessToken,
+}
+
+#[derive(Clone, Debug, Serialize)]
+pub struct Body {
+ #[serde(rename = "m.fully_read")]
+ pub fully_read: String, // TODO: Use EventId
+ #[serde(rename = "m.read")]
+ pub read: Option<String>, // TODO: Use EventId
+}
+
+pub fn request(
+ base: Url,
+ params: &Parameters,
+ body: &Body,
+ room_id: &RoomId,
+) -> Result<Request, Error> {
+ let url = base
+ .join(&format!(
+ "/_matrix/client/r0/rooms/{}/read_markers",
+ room_id
+ ))
+ .expect("Malformed URL in set_read_marker");
+
+ Client::new().post(url).query(params).json(body).build()
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]