From 7f54e4592f11395cdc54035be31ec715a5aa3c42 Mon Sep 17 00:00:00 2001 From: ismailgulek Date: Wed, 9 Nov 2022 16:02:40 +0300 Subject: [PATCH 1/2] Expose video messages --- bindings/matrix-sdk-ffi/src/lib.rs | 4 +- bindings/matrix-sdk-ffi/src/timeline.rs | 52 +++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/bindings/matrix-sdk-ffi/src/lib.rs b/bindings/matrix-sdk-ffi/src/lib.rs index ea2b4d785..0ad5bbdf2 100644 --- a/bindings/matrix-sdk-ffi/src/lib.rs +++ b/bindings/matrix-sdk-ffi/src/lib.rs @@ -97,8 +97,8 @@ mod uniffi_types { EmoteMessageContent, EncryptedMessage, EventTimelineItem, FormattedBody, ImageInfo, ImageMessageContent, InsertAtData, Message, MessageFormat, MessageType, NoticeMessageContent, Reaction, TextMessageContent, ThumbnailInfo, TimelineChange, - TimelineDiff, TimelineItem, TimelineItemContent, TimelineKey, UpdateAtData, - VirtualTimelineItem, + TimelineDiff, TimelineItem, TimelineItemContent, TimelineKey, UpdateAtData, VideoInfo, + VideoMessageContent, VirtualTimelineItem, }, }; } diff --git a/bindings/matrix-sdk-ffi/src/timeline.rs b/bindings/matrix-sdk-ffi/src/timeline.rs index 792c1d716..334b6152a 100644 --- a/bindings/matrix-sdk-ffi/src/timeline.rs +++ b/bindings/matrix-sdk-ffi/src/timeline.rs @@ -266,6 +266,13 @@ impl Message { info: c.info.as_deref().map(Into::into), }, }), + MTy::Video(c) => Some(MessageType::Video { + content: VideoMessageContent { + body: c.body.clone(), + source: Arc::new(c.source.clone()), + info: c.info.as_deref().map(Into::into), + }, + }), MTy::Notice(c) => Some(MessageType::Notice { content: NoticeMessageContent { body: c.body.clone(), @@ -300,6 +307,7 @@ impl Message { pub enum MessageType { Emote { content: EmoteMessageContent }, Image { content: ImageMessageContent }, + Video { content: VideoMessageContent }, Notice { content: NoticeMessageContent }, Text { content: TextMessageContent }, } @@ -317,6 +325,13 @@ pub struct ImageMessageContent { pub info: Option, } +#[derive(Clone, uniffi::Record)] +pub struct VideoMessageContent { + pub body: String, + pub source: Arc, + pub info: Option, +} + #[derive(Clone, uniffi::Record)] pub struct ImageInfo { pub height: Option, @@ -328,6 +343,18 @@ pub struct ImageInfo { pub blurhash: Option, } +#[derive(Clone, uniffi::Record)] +pub struct VideoInfo { + pub duration: Option, + pub height: Option, + pub width: Option, + pub mimetype: Option, + pub size: Option, + pub thumbnail_info: Option, + pub thumbnail_source: Option>, + pub blurhash: Option, +} + #[derive(Clone, uniffi::Record)] pub struct ThumbnailInfo { pub height: Option, @@ -393,6 +420,31 @@ impl From<&matrix_sdk::ruma::events::room::ImageInfo> for ImageInfo { } } +impl From<&matrix_sdk::ruma::events::room::message::VideoInfo> for VideoInfo { + fn from(info: &matrix_sdk::ruma::events::room::message::VideoInfo) -> Self { + let thumbnail_info = info.thumbnail_info.as_ref().map(|info| ThumbnailInfo { + height: info.height.map(Into::into), + width: info.width.map(Into::into), + mimetype: info.mimetype.clone(), + size: info.size.map(Into::into), + }); + + Self { + duration: match info.duration { + Some(d) => Some(d.as_secs()), + _ => None, + }, + height: info.height.map(Into::into), + width: info.width.map(Into::into), + mimetype: info.mimetype.clone(), + size: info.size.map(Into::into), + thumbnail_info, + thumbnail_source: info.thumbnail_source.clone().map(Arc::new), + blurhash: info.blurhash.clone(), + } + } +} + #[derive(Clone, uniffi::Enum)] pub enum EncryptedMessage { OlmV1Curve25519AesSha2 { From 26d690a21c4314919ec9c745c6859f6bd9aeb042 Mon Sep 17 00:00:00 2001 From: ismailgulek Date: Wed, 9 Nov 2022 16:34:41 +0300 Subject: [PATCH 2/2] Fix clippy --- bindings/matrix-sdk-ffi/src/timeline.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/bindings/matrix-sdk-ffi/src/timeline.rs b/bindings/matrix-sdk-ffi/src/timeline.rs index 334b6152a..42222fe94 100644 --- a/bindings/matrix-sdk-ffi/src/timeline.rs +++ b/bindings/matrix-sdk-ffi/src/timeline.rs @@ -430,10 +430,7 @@ impl From<&matrix_sdk::ruma::events::room::message::VideoInfo> for VideoInfo { }); Self { - duration: match info.duration { - Some(d) => Some(d.as_secs()), - _ => None, - }, + duration: info.duration.map(|d| d.as_secs()), height: info.height.map(Into::into), width: info.width.map(Into::into), mimetype: info.mimetype.clone(),