@@ -2682,6 +2682,8 @@ impl ModelController {
26822682 // Spawn background task
26832683 tokio:: spawn ( async move {
26842684 let mut poll_interval = Duration :: from_secs ( 2 ) ;
2685+ let start_time = std:: time:: Instant :: now ( ) ;
2686+ let mut remaining = None ;
26852687
26862688 loop {
26872689 sleep ( poll_interval) . await ;
@@ -2701,6 +2703,14 @@ impl ModelController {
27012703
27022704 let done = is_terminal;
27032705 let percent = current_status. progress ;
2706+ if percent > 1.0 {
2707+ let percent_ratio = percent / 100.0 ;
2708+ if percent_ratio > 0.01 {
2709+ let duration_from_start = start_time. elapsed ( ) . as_secs_f32 ( ) ;
2710+ let remaining_time = duration_from_start / percent_ratio * ( 1.0 - percent_ratio) ;
2711+ remaining = Some ( remaining_time as u64 ) ;
2712+ }
2713+ }
27042714
27052715 let message = ConvertMessage {
27062716 library : lib_progress. clone ( ) ,
@@ -2712,7 +2722,7 @@ impl ModelController {
27122722 status : current_status. status . clone ( ) ,
27132723 id : request_clone. id . clone ( ) ,
27142724 request : Some ( request_clone. clone ( ) ) ,
2715- estimated_remaining_seconds : None ,
2725+ remaining_secondes : remaining ,
27162726 } ,
27172727 } ;
27182728 mc_progress. send_convert_progress ( message) ;
@@ -2745,12 +2755,17 @@ impl ModelController {
27452755 {
27462756 Ok ( reader) => {
27472757 attempts += 1 ;
2758+ let mut converted_infos = media_progress. clone ( ) ;
2759+ converted_infos. size = reader. size ;
2760+ if reader. mime . is_some ( ) {
2761+ converted_infos. mimetype = reader. mime . clone ( ) ;
2762+ }
27482763
27492764 match mc_progress
27502765 . add_library_file (
27512766 & lib_progress,
27522767 & name_progress,
2753- Some ( media_progress . clone ( ) ) ,
2768+ Some ( converted_infos ) ,
27542769 reader. stream ,
27552770 & ConnectedUser :: ServerAdmin ,
27562771 )
@@ -2773,6 +2788,7 @@ impl ModelController {
27732788 }
27742789 }
27752790 Err ( e) => {
2791+ attempts += 1 ;
27762792 log_error (
27772793 crate :: tools:: log:: LogServiceType :: Source ,
27782794 format ! ( "Failed to create reader: {:?}" , e) ,
@@ -2781,6 +2797,9 @@ impl ModelController {
27812797 "Failed to create reader: {:?}" ,
27822798 e
27832799 ) ;
2800+ if attempts >= max_attempts {
2801+ break Err ( e) ;
2802+ }
27842803 }
27852804 }
27862805 } ;
@@ -2981,7 +3000,7 @@ impl ModelController {
29813000 status : RsVideoTranscodeStatus :: Processing ,
29823001 id : request_progress. id . clone ( ) ,
29833002 request : Some ( request_progress. clone ( ) ) ,
2984- estimated_remaining_seconds : remaining,
3003+ remaining_secondes : remaining,
29853004 } ,
29863005 } ;
29873006 mc_progress. send_convert_progress ( message) ;
@@ -3145,7 +3164,7 @@ impl ModelController {
31453164 done : false ,
31463165 percent : 0.0 ,
31473166 status : RsVideoTranscodeStatus :: Pending ,
3148- estimated_remaining_seconds : None ,
3167+ remaining_secondes : None ,
31493168 request : None ,
31503169 } ,
31513170 } ;
@@ -3178,7 +3197,7 @@ impl ModelController {
31783197 status : RsVideoTranscodeStatus :: Processing ,
31793198 id : request_id. clone ( ) ,
31803199 request : None ,
3181- estimated_remaining_seconds : None ,
3200+ remaining_secondes : None ,
31823201 } ,
31833202 } ;
31843203 mc_progress. send_convert_progress ( message) ;
@@ -3239,7 +3258,7 @@ impl ModelController {
32393258 status : RsVideoTranscodeStatus :: Processing ,
32403259 id : request_id. clone ( ) ,
32413260 request : None ,
3242- estimated_remaining_seconds : None ,
3261+ remaining_secondes : None ,
32433262 } ,
32443263 } ;
32453264 mc_progress. send_convert_progress ( message) ;
@@ -3283,7 +3302,7 @@ impl ModelController {
32833302 done : false ,
32843303 percent : 0.95 ,
32853304 status : RsVideoTranscodeStatus :: Processing ,
3286- estimated_remaining_seconds : None ,
3305+ remaining_secondes : None ,
32873306 request : None ,
32883307 } ,
32893308 } ) ;
@@ -3356,7 +3375,7 @@ impl ModelController {
33563375 done : true ,
33573376 percent : 1.0 ,
33583377 status : RsVideoTranscodeStatus :: Completed ,
3359- estimated_remaining_seconds : None ,
3378+ remaining_secondes : None ,
33603379 request : None ,
33613380 } ,
33623381 } ) ;
@@ -3373,7 +3392,7 @@ impl ModelController {
33733392 done : true ,
33743393 percent : 0.0 ,
33753394 status : RsVideoTranscodeStatus :: Failed ,
3376- estimated_remaining_seconds : None ,
3395+ remaining_secondes : None ,
33773396 request : None ,
33783397 } ,
33793398 } ) ;
0 commit comments