From 6a386ca5fb8b37f558c3f79c19d483bf4267a8a0 Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Tue, 6 Dec 2022 12:19:58 +0100 Subject: [PATCH] feat(bindings): Add sending of reactions to matrix-sdk-ffi --- bindings/matrix-sdk-ffi/src/api.udl | 5 ++++- bindings/matrix-sdk-ffi/src/room.rs | 16 +++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/bindings/matrix-sdk-ffi/src/api.udl b/bindings/matrix-sdk-ffi/src/api.udl index faf93c7c5..e4e05afcb 100644 --- a/bindings/matrix-sdk-ffi/src/api.udl +++ b/bindings/matrix-sdk-ffi/src/api.udl @@ -203,7 +203,7 @@ dictionary Session { interface Room { [Throws=ClientError] string display_name(); - + [Throws=ClientError] boolean is_encrypted(); @@ -232,6 +232,9 @@ interface Room { [Throws=ClientError] void redact(string event_id, string? reason, string? txn_id); + + [Throws=ClientError] + void send_reaction(string event_id, string key); }; callback interface TimelineListener { diff --git a/bindings/matrix-sdk-ffi/src/room.rs b/bindings/matrix-sdk-ffi/src/room.rs index f79cfd830..77f650af6 100644 --- a/bindings/matrix-sdk-ffi/src/room.rs +++ b/bindings/matrix-sdk-ffi/src/room.rs @@ -12,7 +12,8 @@ use matrix_sdk::{ }, ruma::{ events::{ - relation::Replacement, + reaction::ReactionEventContent, + relation::{Annotation, Replacement}, room::message::{ ForwardThread, MessageType, Relation, RoomMessageEvent, RoomMessageEventContent, }, @@ -281,6 +282,19 @@ impl Room { Ok(()) }) } + + pub fn send_reaction(&self, event_id: String, key: String) -> Result<()> { + let room = match &self.room { + SdkRoom::Joined(j) => j.clone(), + _ => bail!("Can't send reaction in a room that isn't in joined state"), + }; + + RUNTIME.block_on(async move { + let event_id = EventId::parse(event_id)?; + room.send(ReactionEventContent::new(Annotation::new(event_id, key)), None).await?; + Ok(()) + }) + } } impl std::ops::Deref for Room {