Initial compact implementation.

This commit is contained in:
Bill Thiede 2019-11-03 07:34:36 -08:00
parent bf9d5b7c11
commit 9cc6a46cf5

View File

@ -58,8 +58,8 @@ where
#[derive(Clone, Deserialize, Debug, Serialize)] #[derive(Clone, Deserialize, Debug, Serialize)]
pub struct Format { pub struct Format {
#[serde(default, deserialize_with = "option_from_str")] #[serde(deserialize_with = "from_str")]
bit_rate: Option<usize>, bit_rate: usize,
#[serde(deserialize_with = "from_str")] #[serde(deserialize_with = "from_str")]
duration: f32, duration: f32,
filename: String, filename: String,
@ -75,6 +75,7 @@ pub enum Stream {
#[serde(rename = "video")] #[serde(rename = "video")]
Video { Video {
#[serde(default, deserialize_with = "option_from_str")] #[serde(default, deserialize_with = "option_from_str")]
#[serde(skip_serializing_if = "Option::is_none")]
bit_rate: Option<usize>, bit_rate: Option<usize>,
codec_name: String, codec_name: String,
codec_long_name: String, codec_long_name: String,
@ -167,9 +168,36 @@ impl MovieLibrary {
} }
pub fn compact_metadata(&self) -> Result<(), Error> { 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()); 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> { pub fn update_metadata(&self) -> Result<(), Error> {