aboutsummaryrefslogtreecommitdiff
path: root/import/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'import/src/lib.rs')
-rw-r--r--import/src/lib.rs19
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)
}