Initial compact implementation.
This commit is contained in:
parent
bf9d5b7c11
commit
9cc6a46cf5
36
src/lib.rs
36
src/lib.rs
@ -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> {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user