diff options
-rw-r--r-- | remuxer/src/import/mod.rs | 14 | ||||
-rw-r--r-- | tools/src/bin/import.rs | 8 |
2 files changed, 13 insertions, 9 deletions
diff --git a/remuxer/src/import/mod.rs b/remuxer/src/import/mod.rs index 78c752e..7b0b371 100644 --- a/remuxer/src/import/mod.rs +++ b/remuxer/src/import/mod.rs @@ -17,10 +17,16 @@ use std::{collections::BTreeMap, path::PathBuf}; pub fn import_read( path: &PathBuf, input: &mut EbmlReader, -) -> Result<(Vec<SourceTrack>, Vec<LocalTrack>, BTreeMap<u64, SeekIndex>)> { +) -> Result<( + Vec<SourceTrack>, + Vec<LocalTrack>, + BTreeMap<u64, SeekIndex>, + f64, +)> { let mut iteminfo = Vec::new(); let mut private = Vec::new(); let mut seek_index = BTreeMap::new(); + let mut dur = None; while let Some(item) = input.next() { let item = match item { Ok(item) => item, @@ -49,20 +55,20 @@ pub fn import_read( MatroskaTag::Segment(_) => { info!("segment start"); let mut children = Unflatten::new_with_end(input, item); - import_read_segment( + dur = dur.or(import_read_segment( path, &mut children, &mut iteminfo, &mut private, &mut seek_index, - )?; + )?); info!("segment end"); } _ => debug!("(r) tag ignored: {item:?}"), } } - Ok((iteminfo, private, seek_index)) + Ok((iteminfo, private, seek_index, dur.unwrap_or(0.))) } fn import_read_segment( diff --git a/tools/src/bin/import.rs b/tools/src/bin/import.rs index 78c8646..a27b247 100644 --- a/tools/src/bin/import.rs +++ b/tools/src/bin/import.rs @@ -138,7 +138,7 @@ fn main() -> anyhow::Result<()> { std::fs::copy(&input, &source_path)?; let input = File::open(&source_path).unwrap(); let mut input = EbmlReader::new(input); - let (tracks, local_tracks, seek_index) = + let (tracks, local_tracks, seek_index, duration) = import_read(&source_path.to_path_buf(), &mut input)?; for (tn, index) in seek_index { @@ -151,10 +151,7 @@ fn main() -> anyhow::Result<()> { } kind = NodeKind::Movie; - media = Some(MediaInfo { - tracks, - duration: 0., - }); + media = Some(MediaInfo { duration, tracks }); source = Some(jellycommon::MediaSource::Local { tracks: local_tracks, }); @@ -173,6 +170,7 @@ fn main() -> anyhow::Result<()> { }, public: NodePublic { parent: None, + federated: None, description: Some(details.overview), tagline: details.tagline, title: details.title.clone().or(details.name.clone()).unwrap(), |