From 9cc6a46cf5c7d36a4106e622a913146f975fdd6a Mon Sep 17 00:00:00 2001 From: Bill Thiede Date: Sun, 3 Nov 2019 07:34:36 -0800 Subject: [PATCH] Initial compact implementation. --- src/lib.rs | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 8c4f489..361710d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -58,8 +58,8 @@ where #[derive(Clone, Deserialize, Debug, Serialize)] pub struct Format { - #[serde(default, deserialize_with = "option_from_str")] - bit_rate: Option, + #[serde(deserialize_with = "from_str")] + bit_rate: usize, #[serde(deserialize_with = "from_str")] duration: f32, filename: String, @@ -75,6 +75,7 @@ pub enum Stream { #[serde(rename = "video")] Video { #[serde(default, deserialize_with = "option_from_str")] + #[serde(skip_serializing_if = "Option::is_none")] bit_rate: Option, codec_name: String, codec_long_name: String, @@ -167,9 +168,36 @@ impl MovieLibrary { } pub fn compact_metadata(&self) -> Result<(), Error> { - let mdf = read_metadata_from_file(Path::new(&self.root).join("metadata.json"))?; + let mut mdf = read_metadata_from_file(Path::new(&self.root).join("metadata.json"))?; info!("Read metadata, {} videos found", mdf.metadata.len()); - Ok(()) + + // Remove non-video streams from metadata. + mdf.metadata = mdf + .metadata + .into_iter() + .map(|(path, Metadata { format, streams })| { + ( + path, + Metadata { + format, + streams: streams + .into_iter() + .filter(|s| { + if let Stream::Video { .. } = s { + true + } else { + false + } + }) + .collect(), + }, + ) + }) + .collect(); + + let f = File::create(Path::new(&self.root).join("metadata.compact.json"))?; + let f = BufWriter::new(f); + Ok(serde_json::ser::to_writer_pretty(f, &mdf)?) } pub fn update_metadata(&self) -> Result<(), Error> {