Skip to content

Commit 1c9436b

Browse files
committed
feat(send_queue): enable progress monitoring in RoomSendQueue::handle_request
Signed-off-by: Johannes Marbach <n0-0ne+github@mailbox.org>
1 parent 84fa087 commit 1c9436b

File tree

2 files changed

+30
-11
lines changed

2 files changed

+30
-11
lines changed

crates/matrix-sdk/src/encryption/futures.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use crate::{config::RequestConfig, Client, Media, Result, TransmissionProgress};
3030
pub struct UploadEncryptedFile<'a, R: ?Sized> {
3131
client: &'a Client,
3232
reader: &'a mut R,
33-
send_progress: SharedObservable<TransmissionProgress>,
33+
pub(crate) send_progress: SharedObservable<TransmissionProgress>,
3434
request_config: Option<RequestConfig>,
3535
}
3636

crates/matrix-sdk/src/send_queue/mod.rs

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ use std::{
138138
};
139139

140140
use as_variant::as_variant;
141+
use eyeball::SharedObservable;
141142
#[cfg(feature = "unstable-msc4274")]
142143
use matrix_sdk_base::store::FinishGalleryItemInfo;
143144
use matrix_sdk_base::{
@@ -176,7 +177,7 @@ use crate::{
176177
config::RequestConfig,
177178
error::RetryKind,
178179
room::{edit::EditedContent, WeakRoom},
179-
Client, Media, Room,
180+
Client, Media, Room, TransmissionProgress,
180181
};
181182

182183
mod upload;
@@ -606,7 +607,7 @@ impl RoomSendQueue {
606607
continue;
607608
};
608609

609-
match Self::handle_request(&room, queued_request, cancel_upload_rx).await {
610+
match Self::handle_request(&room, queued_request, cancel_upload_rx, None).await {
610611
Ok(Some(parent_key)) => match queue.mark_as_sent(&txn_id, parent_key.clone()).await
611612
{
612613
Ok(()) => match parent_key {
@@ -707,6 +708,7 @@ impl RoomSendQueue {
707708
room: &Room,
708709
request: QueuedRequest,
709710
cancel_upload_rx: Option<oneshot::Receiver<()>>,
711+
progress: Option<SharedObservable<TransmissionProgress>>,
710712
) -> Result<Option<SentRequestKey>, crate::Error> {
711713
match request.kind {
712714
QueuedRequestKind::Event { content } => {
@@ -754,27 +756,44 @@ impl RoomSendQueue {
754756
let media_source = if room.latest_encryption_state().await?.is_encrypted() {
755757
trace!("upload will be encrypted (encrypted room)");
756758
let mut cursor = std::io::Cursor::new(data);
757-
let encrypted_file = room
758-
.client()
759+
let client = room.client();
760+
let mut req = client
759761
.upload_encrypted_file(&mut cursor)
760-
.with_request_config(RequestConfig::short_retry())
761-
.await?;
762+
.with_request_config(RequestConfig::short_retry());
763+
764+
if let Some(progress) = progress {
765+
req = req.with_send_progress_observable(progress);
766+
}
767+
768+
let encrypted_file = req.await?;
762769
MediaSource::Encrypted(Box::new(encrypted_file))
763770
} else {
764771
trace!("upload will be in clear text (room without encryption)");
765772
let request_config = RequestConfig::short_retry()
766773
.timeout(Media::reasonable_upload_timeout(&data));
767-
let res =
768-
room.client().media().upload(&mime, data, Some(request_config)).await?;
774+
let mut req =
775+
room.client().media().upload(&mime, data, Some(request_config));
776+
777+
if let Some(progress) = progress {
778+
req = req.with_send_progress_observable(progress);
779+
}
780+
781+
let res = req.await?;
769782
MediaSource::Plain(res.content_uri)
770783
};
771784

772785
#[cfg(not(feature = "e2e-encryption"))]
773786
let media_source = {
774787
let request_config = RequestConfig::short_retry()
775788
.timeout(Media::reasonable_upload_timeout(&data));
776-
let res =
777-
room.client().media().upload(&mime, data, Some(request_config)).await?;
789+
let mut req =
790+
room.client().media().upload(&mime, data, Some(request_config));
791+
792+
if let Some(progress) = progress {
793+
req = req.with_send_progress_observable(progress);
794+
}
795+
796+
let res = req.await?;
778797
MediaSource::Plain(res.content_uri)
779798
};
780799

0 commit comments

Comments
 (0)