@@ -155,11 +155,22 @@ impl RecoveryManager {
155155 . filter ( |e| e. path ( ) . is_dir ( ) )
156156 . collect ( ) ;
157157
158- segment_dirs. sort_by_key ( |e| e. file_name ( ) ) ;
158+ segment_dirs. sort_by_key ( |e| {
159+ let name = e. file_name ( ) . to_string_lossy ( ) . to_string ( ) ;
160+ name. strip_prefix ( "segment-" )
161+ . and_then ( |s| s. parse :: < u32 > ( ) . ok ( ) )
162+ . unwrap_or ( u32:: MAX )
163+ } ) ;
159164
160- for ( index , segment_entry) in segment_dirs. iter ( ) . enumerate ( ) {
165+ for segment_entry in & segment_dirs {
161166 let segment_path = segment_entry. path ( ) ;
162167
168+ let folder_name = segment_entry. file_name ( ) . to_string_lossy ( ) . to_string ( ) ;
169+ let index: u32 = folder_name
170+ . strip_prefix ( "segment-" )
171+ . and_then ( |s| s. parse ( ) . ok ( ) )
172+ . unwrap_or ( 0 ) ;
173+
163174 let display_dir = segment_path. join ( "display" ) ;
164175 let display_info = Self :: find_complete_fragments_with_init ( & display_dir) ;
165176 let mut display_fragments = display_info. fragments ;
@@ -205,7 +216,7 @@ impl RecoveryManager {
205216 let cursor_path = Self :: probe_cursor ( & segment_path. join ( "cursor.json" ) ) ;
206217
207218 recoverable_segments. push ( RecoverableSegment {
208- index : index as u32 ,
219+ index,
209220 display_fragments,
210221 display_init_segment,
211222 camera_fragments,
@@ -901,11 +912,7 @@ impl RecoveryManager {
901912 . iter ( )
902913 . enumerate ( )
903914 . filter_map ( |( i, segment) | {
904- let segment_base = format ! ( "content/segments/segment-{i}" ) ;
905- let display_path = recording
906- . project_path
907- . join ( & segment_base)
908- . join ( "display.mp4" ) ;
915+ let display_path = recording. project_path . join ( segment. display . path . as_str ( ) ) ;
909916
910917 let duration = get_media_duration ( & display_path)
911918 . map ( |d| d. as_secs_f64 ( ) )
0 commit comments