Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion crates/constants/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,9 @@ pub mod filename {
pub const VIDEO: &str = "recording.mp4";
/// The input recording file
pub const INPUTS: &str = "inputs.csv";
/// The metadata file
/// The metadata file, before validation
pub const METADATA_UNVALIDATED: &str = "metadata_unvalidated.json";
/// The metadata file, after validation
pub const METADATA: &str = "metadata.json";
}

Expand Down
8 changes: 6 additions & 2 deletions src/record/local_recording.rs
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,8 @@ impl LocalRecording {
let uploaded_file_path = path.join(constants::filename::recording::UPLOADED);
let upload_progress_file_path = path.join(constants::filename::recording::UPLOAD_PROGRESS);
let metadata_path = path.join(constants::filename::recording::METADATA);
let metadata_unvalidated_path =
path.join(constants::filename::recording::METADATA_UNVALIDATED);

// Get the folder name
let folder_name = path
Expand Down Expand Up @@ -438,7 +440,8 @@ impl LocalRecording {
})
} else {
// Not uploaded yet (and not invalid)
let metadata: Option<Box<Metadata>> = std::fs::read_to_string(metadata_path)
let metadata: Option<Box<Metadata>> = std::fs::read_to_string(&metadata_path)
.or_else(|_| std::fs::read_to_string(&metadata_unvalidated_path))
.ok()
.and_then(|s| serde_json::from_str(&s).ok())
.map(Box::new);
Expand Down Expand Up @@ -542,7 +545,8 @@ impl LocalRecording {
recorder_extra: Option<serde_json::Value>,
) -> Result<()> {
// Resolve metadata path from recording location
let metadata_path = recording_location.join(constants::filename::recording::METADATA);
let metadata_path =
recording_location.join(constants::filename::recording::METADATA_UNVALIDATED);

// Create metadata
let duration = start_instant.elapsed().as_secs_f64();
Expand Down
16 changes: 12 additions & 4 deletions src/validation/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -70,16 +70,24 @@ fn validate_folder_impl(path: &Path) -> Result<ValidationResult, Vec<String>> {
csv_path.display()
)]);
}
// Determine source: prefer unvalidated (original), fall back to validated (old recordings)
let unvalidated_path = path.join(constants::filename::recording::METADATA_UNVALIDATED);
let meta_path = path.join(constants::filename::recording::METADATA);
if !meta_path.is_file() {

let source_path = if unvalidated_path.is_file() {
&unvalidated_path
} else if meta_path.is_file() {
&meta_path
} else {
return Err(vec![format!(
"No metadata file found in {} (expected {})",
"No metadata file found in {} (expected {} or {})",
path.display(),
unvalidated_path.display(),
meta_path.display()
)]);
}
};

let metadata = std::fs::read_to_string(&meta_path)
let metadata = std::fs::read_to_string(source_path)
.map_err(|e| vec![format!("Error reading metadata file: {e:?}")])?;
let mut metadata = serde_json::from_str::<Metadata>(&metadata)
.map_err(|e| vec![format!("Error parsing metadata file: {e:?}")])?;
Expand Down
Loading