diff --git a/src/lib.rs b/src/lib.rs index df2319e..eb70346 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -345,7 +345,7 @@ impl MovieLibrary { Ok(serde_json::ser::to_writer_pretty(f, &metadata)?) } - pub fn update_metadata(&self) -> Result<(), Error> { + pub fn update_metadata(&self) -> Result, Error> { let path = Path::new(&self.root).join("metadata.json"); // Open the file in read-only mode with buffer. let f = File::open(&path).context(format!("open {}", path.display()))?; @@ -389,13 +389,14 @@ impl MovieLibrary { }) .map(|(path, json)| (path, serde_json::from_str::(&json).unwrap())) .collect(); + let new_movies = metadata.keys().cloned().collect(); info!("Adding {} new videos", metadata.len()); metadata.extend(old_metadata); let f = File::create(Path::new(&self.root).join("metadata.json"))?; let f = BufWriter::new(f); serde_json::ser::to_writer_pretty(f, &metadata)?; - Ok(()) + Ok(new_movies) } fn iter_video_files(&self) -> impl Send + Iterator> { diff --git a/src/main.rs b/src/main.rs index 24711ea..cd07120 100644 --- a/src/main.rs +++ b/src/main.rs @@ -87,8 +87,13 @@ enum Command { about = "Read full metadata file and write compact file." )] CompactMetadata, - #[structopt(name = "update-metadata", about = "Write metadata files")] + #[structopt(name = "update-metadata", about = "Write full metadata files")] UpdateMetadata, + #[structopt( + name = "update-compact-metadata", + about = "Write full metadata files and update compact file on changes" + )] + UpdateAndCompactMetadata, } #[derive(StructOpt)] @@ -151,6 +156,17 @@ fn main() -> Result<(), Box> { let lib = MovieLibrary::new(MOVIE_DIR); lib.update_metadata()?; } + Command::UpdateAndCompactMetadata => { + let lib = MovieLibrary::new(MOVIE_DIR); + let new_movies = lib.update_metadata()?; + if !new_movies.is_empty() { + info!( + "{} new movies added, recompacting metadata", + new_movies.len() + ); + lib.compact_metadata()?; + } + } } Ok(()) }