mirror of
https://github.com/matrix-org/matrix-rust-sdk.git
synced 2026-05-06 15:04:11 -04:00
feat(ffi): generate formatted captions for send_* media fns
Changelog: For `Timeline::send_*` fns, treat the passed `caption` parameter as markdown and use the HTML generated from it as the `formatted_caption` if there is none.
This commit is contained in:
committed by
Jorge Martin Espinosa
parent
aca83fb4ed
commit
afaecdc457
@@ -48,8 +48,8 @@ use ruma::{
|
||||
},
|
||||
receipt::ReceiptThread,
|
||||
room::message::{
|
||||
ForwardThread, LocationMessageEventContent, MessageType,
|
||||
RoomMessageEventContentWithoutRelation,
|
||||
FormattedBody as RumaFormattedBody, ForwardThread, LocationMessageEventContent,
|
||||
MessageType, RoomMessageEventContentWithoutRelation,
|
||||
},
|
||||
AnyMessageLikeEventContent,
|
||||
},
|
||||
@@ -289,6 +289,7 @@ impl Timeline {
|
||||
progress_watcher: Option<Box<dyn ProgressWatcher>>,
|
||||
use_send_queue: bool,
|
||||
) -> Arc<SendAttachmentJoinHandle> {
|
||||
let formatted_caption = formatted_caption_from(&caption, &formatted_caption);
|
||||
SendAttachmentJoinHandle::new(RUNTIME.spawn(async move {
|
||||
let base_image_info = BaseImageInfo::try_from(&image_info)
|
||||
.map_err(|_| RoomError::InvalidAttachmentData)?;
|
||||
@@ -297,7 +298,7 @@ impl Timeline {
|
||||
let attachment_config = build_thumbnail_info(thumbnail_url, image_info.thumbnail_info)?
|
||||
.info(attachment_info)
|
||||
.caption(caption)
|
||||
.formatted_caption(formatted_caption.map(Into::into));
|
||||
.formatted_caption(formatted_caption);
|
||||
|
||||
self.send_attachment(
|
||||
url,
|
||||
@@ -321,6 +322,7 @@ impl Timeline {
|
||||
progress_watcher: Option<Box<dyn ProgressWatcher>>,
|
||||
use_send_queue: bool,
|
||||
) -> Arc<SendAttachmentJoinHandle> {
|
||||
let formatted_caption = formatted_caption_from(&caption, &formatted_caption);
|
||||
SendAttachmentJoinHandle::new(RUNTIME.spawn(async move {
|
||||
let base_video_info: BaseVideoInfo = BaseVideoInfo::try_from(&video_info)
|
||||
.map_err(|_| RoomError::InvalidAttachmentData)?;
|
||||
@@ -351,6 +353,7 @@ impl Timeline {
|
||||
progress_watcher: Option<Box<dyn ProgressWatcher>>,
|
||||
use_send_queue: bool,
|
||||
) -> Arc<SendAttachmentJoinHandle> {
|
||||
let formatted_caption = formatted_caption_from(&caption, &formatted_caption);
|
||||
SendAttachmentJoinHandle::new(RUNTIME.spawn(async move {
|
||||
let base_audio_info: BaseAudioInfo = BaseAudioInfo::try_from(&audio_info)
|
||||
.map_err(|_| RoomError::InvalidAttachmentData)?;
|
||||
@@ -383,6 +386,7 @@ impl Timeline {
|
||||
progress_watcher: Option<Box<dyn ProgressWatcher>>,
|
||||
use_send_queue: bool,
|
||||
) -> Arc<SendAttachmentJoinHandle> {
|
||||
let formatted_caption = formatted_caption_from(&caption, &formatted_caption);
|
||||
SendAttachmentJoinHandle::new(RUNTIME.spawn(async move {
|
||||
let base_audio_info: BaseAudioInfo = BaseAudioInfo::try_from(&audio_info)
|
||||
.map_err(|_| RoomError::InvalidAttachmentData)?;
|
||||
@@ -710,6 +714,24 @@ impl Timeline {
|
||||
}
|
||||
}
|
||||
|
||||
/// Given a pair of optional `caption` and `formatted_caption` parameters,
|
||||
/// return a formatted caption:
|
||||
///
|
||||
/// - If a `formatted_caption` exists, return it.
|
||||
/// - If it doesn't exist but there is a `caption`, parse it as markdown and
|
||||
/// return the result.
|
||||
/// - Return `None` if there are no `caption` or `formatted_caption` parameters.
|
||||
fn formatted_caption_from(
|
||||
caption: &Option<String>,
|
||||
formatted_caption: &Option<FormattedBody>,
|
||||
) -> Option<RumaFormattedBody> {
|
||||
match (&caption, formatted_caption) {
|
||||
(None, None) => None,
|
||||
(Some(body), None) => RumaFormattedBody::markdown(body),
|
||||
(_, Some(formatted_body)) => Some(formatted_body.clone().into()),
|
||||
}
|
||||
}
|
||||
|
||||
/// A handle to perform actions onto a local echo.
|
||||
#[derive(uniffi::Object)]
|
||||
pub struct SendHandle {
|
||||
|
||||
Reference in New Issue
Block a user