Skip to content

Commit 1f55516

Browse files
committed
Simplify logic to watch progress and document why and when the detached task ends
1 parent f23a627 commit 1f55516

File tree

1 file changed

+28
-27
lines changed
  • crates/matrix-sdk/src/send_queue

1 file changed

+28
-27
lines changed

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

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -600,37 +600,38 @@ impl RoomSendQueue {
600600
}
601601
};
602602

603-
let progress_watcher = {
604-
if let Some((progress, related_to)) = match &queued_request.kind {
605-
QueuedRequestKind::MediaUpload { related_to, .. } => {
606-
let progress: SharedObservable<TransmissionProgress> = Default::default();
607-
Some((progress, related_to.clone()))
603+
// Prepare to watch and communicate the request progress.
604+
let progress = if let Some(related_to) = related_txn_id.as_ref() {
605+
let progress: SharedObservable<TransmissionProgress> = Default::default();
606+
let mut subscriber = progress.subscribe();
607+
608+
let updates = updates.clone();
609+
let related_to = related_to.clone();
610+
611+
// Watch and communicate the progress on a detached background task. Once
612+
// the progress observable is dropped, next() will return None and the
613+
// task will end.
614+
spawn(async move {
615+
while let Some(progress) = subscriber.next().await {
616+
let _ = updates.send(RoomSendQueueUpdate::MediaUpload {
617+
related_to: related_to.clone(),
618+
file: None,
619+
index,
620+
is_thumbnail,
621+
progress,
622+
});
608623
}
609-
_ => None,
610-
} {
611-
let mut subscriber = progress.subscribe();
612-
let updates = updates.clone();
613-
spawn(async move {
614-
while let Some(progress) = subscriber.next().await {
615-
let _ = updates.send(RoomSendQueueUpdate::MediaUpload {
616-
related_to: related_to.clone(),
617-
file: None,
618-
index,
619-
is_thumbnail,
620-
progress,
621-
});
622-
}
623-
});
624-
Some(progress)
625-
} else {
626-
None
627-
}
624+
});
625+
626+
Some(progress)
627+
} else {
628+
None
628629
};
629630

630-
let req =
631-
Self::handle_request(&room, queued_request, cancel_upload_rx, progress_watcher);
631+
let result =
632+
Self::handle_request(&room, queued_request, cancel_upload_rx, progress).await;
632633

633-
match req.await {
634+
match result {
634635
Ok(Some(parent_key)) => match queue.mark_as_sent(&txn_id, parent_key.clone()).await
635636
{
636637
Ok(()) => match parent_key {

0 commit comments

Comments
 (0)