@@ -600,37 +600,38 @@ impl RoomSendQueue {
600
600
}
601
601
} ;
602
602
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
+ } ) ;
608
623
}
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
628
629
} ;
629
630
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 ;
632
633
633
- match req . await {
634
+ match result {
634
635
Ok ( Some ( parent_key) ) => match queue. mark_as_sent ( & txn_id, parent_key. clone ( ) ) . await
635
636
{
636
637
Ok ( ( ) ) => match parent_key {
0 commit comments