Skip to content

Commit ed0a52b

Browse files
Merge pull request #1514 from blakesims/fix/multi-segment-recovery
Fix multi-segment recording data loss during recovery
2 parents 8aeeb34 + 44f970c commit ed0a52b

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

crates/recording/src/recovery.rs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)