@@ -138,6 +138,7 @@ use std::{
138
138
} ;
139
139
140
140
use as_variant:: as_variant;
141
+ use eyeball:: SharedObservable ;
141
142
#[ cfg( feature = "unstable-msc4274" ) ]
142
143
use matrix_sdk_base:: store:: FinishGalleryItemInfo ;
143
144
use matrix_sdk_base:: {
@@ -176,7 +177,7 @@ use crate::{
176
177
config:: RequestConfig ,
177
178
error:: RetryKind ,
178
179
room:: { edit:: EditedContent , WeakRoom } ,
179
- Client , Media , Room ,
180
+ Client , Media , Room , TransmissionProgress ,
180
181
} ;
181
182
182
183
mod upload;
@@ -606,7 +607,7 @@ impl RoomSendQueue {
606
607
continue ;
607
608
} ;
608
609
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 {
610
611
Ok ( Some ( parent_key) ) => match queue. mark_as_sent ( & txn_id, parent_key. clone ( ) ) . await
611
612
{
612
613
Ok ( ( ) ) => match parent_key {
@@ -707,6 +708,7 @@ impl RoomSendQueue {
707
708
room : & Room ,
708
709
request : QueuedRequest ,
709
710
cancel_upload_rx : Option < oneshot:: Receiver < ( ) > > ,
711
+ progress : Option < SharedObservable < TransmissionProgress > > ,
710
712
) -> Result < Option < SentRequestKey > , crate :: Error > {
711
713
match request. kind {
712
714
QueuedRequestKind :: Event { content } => {
@@ -754,27 +756,44 @@ impl RoomSendQueue {
754
756
let media_source = if room. latest_encryption_state ( ) . await ?. is_encrypted ( ) {
755
757
trace ! ( "upload will be encrypted (encrypted room)" ) ;
756
758
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
759
761
. 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 ?;
762
769
MediaSource :: Encrypted ( Box :: new ( encrypted_file) )
763
770
} else {
764
771
trace ! ( "upload will be in clear text (room without encryption)" ) ;
765
772
let request_config = RequestConfig :: short_retry ( )
766
773
. 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 ?;
769
782
MediaSource :: Plain ( res. content_uri )
770
783
} ;
771
784
772
785
#[ cfg( not( feature = "e2e-encryption" ) ) ]
773
786
let media_source = {
774
787
let request_config = RequestConfig :: short_retry ( )
775
788
. 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 ?;
778
797
MediaSource :: Plain ( res. content_uri )
779
798
} ;
780
799
0 commit comments