Skip to content

Commit 12292c5

Browse files
Johennesbnjbvr
authored andcommitted
feat(ffi): allow specifying thumbnails using UploadSource
Signed-off-by: Johannes Marbach <[email protected]>
1 parent cf9d058 commit 12292c5

File tree

2 files changed

+28
-16
lines changed

2 files changed

+28
-16
lines changed

bindings/matrix-sdk-ffi/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ All notable changes to this project will be documented in this file.
8383
- The `GalleryItemInfo` variants now take an `UploadSource` rather than a `String` path to enable uploading
8484
from bytes directly.
8585
([#5529](https://github.com/matrix-org/matrix-rust-sdk/pull/5529))
86+
- Media and gallery uploads now use `UploadSource` to specify the thumbnail.
87+
([#5530](https://github.com/matrix-org/matrix-rust-sdk/pull/5530))
8688

8789
## [0.13.0] - 2025-07-10
8890

bindings/matrix-sdk-ffi/src/timeline/mod.rs

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -139,15 +139,19 @@ impl Timeline {
139139
}
140140

141141
fn build_thumbnail_info(
142-
thumbnail_path: Option<String>,
142+
thumbnail_source: Option<UploadSource>,
143143
thumbnail_info: Option<ThumbnailInfo>,
144144
) -> Result<Option<Thumbnail>, RoomError> {
145-
match (thumbnail_path, thumbnail_info) {
145+
match (thumbnail_source, thumbnail_info) {
146146
(None, None) => Ok(None),
147147

148-
(Some(thumbnail_path), Some(thumbnail_info)) => {
149-
let thumbnail_data =
150-
fs::read(thumbnail_path).map_err(|_| RoomError::InvalidThumbnailData)?;
148+
(Some(thumbnail_source), Some(thumbnail_info)) => {
149+
let thumbnail_data = match thumbnail_source {
150+
UploadSource::File { filename } => {
151+
fs::read(filename).map_err(|_| RoomError::InvalidThumbnailData)?
152+
}
153+
UploadSource::Data { bytes, .. } => bytes,
154+
};
151155

152156
let height = thumbnail_info
153157
.height
@@ -177,7 +181,7 @@ fn build_thumbnail_info(
177181
}
178182

179183
_ => {
180-
warn!("Ignoring thumbnail because either the thumbnail path or info isn't defined");
184+
warn!("Ignoring thumbnail because either the thumbnail source or info isn't defined");
181185
Ok(None)
182186
}
183187
}
@@ -380,26 +384,26 @@ impl Timeline {
380384
pub fn send_image(
381385
self: Arc<Self>,
382386
params: UploadParameters,
383-
thumbnail_path: Option<String>,
387+
thumbnail_source: Option<UploadSource>,
384388
image_info: ImageInfo,
385389
) -> Result<Arc<SendAttachmentJoinHandle>, RoomError> {
386390
let attachment_info = AttachmentInfo::Image(
387391
BaseImageInfo::try_from(&image_info).map_err(|_| RoomError::InvalidAttachmentData)?,
388392
);
389-
let thumbnail = build_thumbnail_info(thumbnail_path, image_info.thumbnail_info)?;
393+
let thumbnail = build_thumbnail_info(thumbnail_source, image_info.thumbnail_info)?;
390394
self.send_attachment(params, attachment_info, image_info.mimetype, thumbnail)
391395
}
392396

393397
pub fn send_video(
394398
self: Arc<Self>,
395399
params: UploadParameters,
396-
thumbnail_path: Option<String>,
400+
thumbnail_source: Option<UploadSource>,
397401
video_info: VideoInfo,
398402
) -> Result<Arc<SendAttachmentJoinHandle>, RoomError> {
399403
let attachment_info = AttachmentInfo::Video(
400404
BaseVideoInfo::try_from(&video_info).map_err(|_| RoomError::InvalidAttachmentData)?,
401405
);
402-
let thumbnail = build_thumbnail_info(thumbnail_path, video_info.thumbnail_info)?;
406+
let thumbnail = build_thumbnail_info(thumbnail_source, video_info.thumbnail_info)?;
403407
self.send_attachment(params, attachment_info, video_info.mimetype, thumbnail)
404408
}
405409

@@ -1336,14 +1340,14 @@ mod galleries {
13361340
source: UploadSource,
13371341
caption: Option<String>,
13381342
formatted_caption: Option<FormattedBody>,
1339-
thumbnail_path: Option<String>,
1343+
thumbnail_source: Option<UploadSource>,
13401344
},
13411345
Video {
13421346
video_info: VideoInfo,
13431347
source: UploadSource,
13441348
caption: Option<String>,
13451349
formatted_caption: Option<FormattedBody>,
1346-
thumbnail_path: Option<String>,
1350+
thumbnail_source: Option<UploadSource>,
13471351
},
13481352
}
13491353

@@ -1408,11 +1412,17 @@ mod galleries {
14081412
fn thumbnail(&self) -> Result<Option<Thumbnail>, RoomError> {
14091413
match self {
14101414
GalleryItemInfo::Audio { .. } | GalleryItemInfo::File { .. } => Ok(None),
1411-
GalleryItemInfo::Image { image_info, thumbnail_path, .. } => {
1412-
build_thumbnail_info(thumbnail_path.clone(), image_info.thumbnail_info.clone())
1415+
GalleryItemInfo::Image { image_info, thumbnail_source, .. } => {
1416+
build_thumbnail_info(
1417+
thumbnail_source.as_ref().cloned(),
1418+
image_info.thumbnail_info.clone(),
1419+
)
14131420
}
1414-
GalleryItemInfo::Video { video_info, thumbnail_path, .. } => {
1415-
build_thumbnail_info(thumbnail_path.clone(), video_info.thumbnail_info.clone())
1421+
GalleryItemInfo::Video { video_info, thumbnail_source, .. } => {
1422+
build_thumbnail_info(
1423+
thumbnail_source.as_ref().cloned(),
1424+
video_info.thumbnail_info.clone(),
1425+
)
14161426
}
14171427
}
14181428
}

0 commit comments

Comments
 (0)