diff options
Diffstat (limited to 'import/src/lib.rs')
-rw-r--r-- | import/src/lib.rs | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/import/src/lib.rs b/import/src/lib.rs index 0fc3a0d..3d638d6 100644 --- a/import/src/lib.rs +++ b/import/src/lib.rs @@ -278,6 +278,11 @@ fn import_media_file( let Some(m) = (*matroska_metadata(path)?).to_owned() else { return Ok(()); }; + let infojson = m + .infojson + .map(|d| serde_json::from_slice::<infojson::YVideo>(&d)) + .transpose() + .context("infojson parsing")?; let info = m.info.ok_or(anyhow!("no info"))?; let tracks = m.tracks.ok_or(anyhow!("no tracks"))?; @@ -311,8 +316,7 @@ fn import_media_file( let mut filename_toks = filename.split("."); let filepath_stem = filename_toks.next().unwrap(); - let slug = m - .infojson + let slug = infojson .as_ref() // TODO maybe also include the slug after the primary "id" key .map(|ij| format!("{}-{}", ij.extractor.to_lowercase(), ij.id)) @@ -398,7 +402,7 @@ fn import_media_file( }) .collect::<Vec<_>>(); - if let Some(infojson) = m.infojson { + if let Some(infojson) = infojson { node.kind = if !tracks .iter() .any(|t| matches!(t.kind, SourceTrackKind::Video { .. })) @@ -413,9 +417,12 @@ fn import_media_file( }; node.title = Some(infojson.title); node.subtitle = infojson - .uploader - .as_ref() - .map(|u| clean_uploader_name(u).to_owned()); + .alt_title + .or(infojson + .uploader + .as_ref() + .map(|u| clean_uploader_name(u).to_owned())) + .or(node.subtitle.clone()); if let Some(desc) = infojson.description { node.description = Some(desc) } |