From 86fbf78a735a5ed8973997dafbbda5cb845c995d Mon Sep 17 00:00:00 2001 From: Bill Thiede Date: Mon, 28 Oct 2019 18:03:14 -0700 Subject: [PATCH] Move code to lib.rs, update testdata. --- src/lib.rs | 140 ++++++++++++++++++ src/main.rs | 85 +++-------- testdata/Aladdin (1992)/metadata.json | 1 - testdata/Aladdin (2019)/metadata.json | 1 - testdata/Higher Learning/metadata.json | 1 - testdata/J0hn W1ck (2014)/metadata.json | 1 - .../Aladdin.1992.720p.BRrip.x264.GAZ.YIFY.mp4 | 0 .../Aladdin (1992)/WWW.YIFY-TORRENTS.COM.jpg | 0 testdata/Movies/Aladdin (1992)/metadata.json | 1 + .../{ => Movies}/Aladdin (1992)/metadata.txt | 0 .../4fe12adfdf4b4e9daa4f1366452d3431.mkv | 0 testdata/Movies/Aladdin (2019)/metadata.json | 1 + .../{ => Movies}/Aladdin (2019)/metadata.txt | 0 .../Higher Learning/Higher Learning CD1.avi | 0 .../Higher Learning/Higher Learning CD2.avi | 0 .../Higher_Learning_(movie).jpg | 0 .../Z-thumbnail-550x600-poster.jpg | 0 .../{ => Movies}/Higher Learning/fanart-0.jpg | 0 .../{ => Movies}/Higher Learning/fanart-1.jpg | 0 .../{ => Movies}/Higher Learning/fanart.jpg | 0 testdata/Movies/Higher Learning/metadata.json | 1 + .../{ => Movies}/Higher Learning/metadata.txt | 0 .../{ => Movies}/Higher Learning/poster.jpg | 0 .../J0hn W1ck (2014) m720p x264 aac.m4v | 0 .../J0hn W1ck (2014) m720p x264 aac.nfo | 0 ...J0hn W1ck (2014) m720p x264 aac.sample.m4v | 0 .../J0hn W1ck (2014) m720p x264 aac.srt | 0 .../Movies/J0hn W1ck (2014)/metadata.json | 1 + .../J0hn W1ck (2014)/metadata.txt | 0 .../Stale Sample (2019)/metadata.json | 4 +- .../54151c3b9a2a4773958f848efecefc3b.mkv | 0 .../The Hudsucker Proxy - DVD Cover.jpg | 0 .../The Hudsucker Proxy CD1.avi | 0 .../The Hudsucker Proxy CD2.avi | 0 .../The Hudsucker Proxy (1994)/fanart-0.jpg | 0 .../The Hudsucker Proxy (1994)/fanart-1.jpg | 0 .../The Hudsucker Proxy (1994)/fanart-2.jpg | 0 .../The Hudsucker Proxy (1994)/fanart-3.jpg | 0 .../The Hudsucker Proxy (1994)/fanart.jpg | 0 .../The Hudsucker Proxy (1994)/metadata.json | 1 + .../The Hudsucker Proxy (1994)/metadata.txt | 0 .../The Hudsucker Proxy (1994)/metadata.json | 1 - 42 files changed, 168 insertions(+), 71 deletions(-) create mode 100644 src/lib.rs delete mode 100644 testdata/Aladdin (1992)/metadata.json delete mode 100644 testdata/Aladdin (2019)/metadata.json delete mode 100644 testdata/Higher Learning/metadata.json delete mode 100644 testdata/J0hn W1ck (2014)/metadata.json rename testdata/{ => Movies}/Aladdin (1992)/Aladdin.1992.720p.BRrip.x264.GAZ.YIFY.mp4 (100%) rename testdata/{ => Movies}/Aladdin (1992)/WWW.YIFY-TORRENTS.COM.jpg (100%) create mode 100644 testdata/Movies/Aladdin (1992)/metadata.json rename testdata/{ => Movies}/Aladdin (1992)/metadata.txt (100%) rename testdata/{ => Movies}/Aladdin (2019)/4fe12adfdf4b4e9daa4f1366452d3431.mkv (100%) create mode 100644 testdata/Movies/Aladdin (2019)/metadata.json rename testdata/{ => Movies}/Aladdin (2019)/metadata.txt (100%) rename testdata/{ => Movies}/Higher Learning/Higher Learning CD1.avi (100%) rename testdata/{ => Movies}/Higher Learning/Higher Learning CD2.avi (100%) rename testdata/{ => Movies}/Higher Learning/Higher_Learning_(movie).jpg (100%) rename testdata/{ => Movies}/Higher Learning/Z-thumbnail-550x600-poster.jpg (100%) rename testdata/{ => Movies}/Higher Learning/fanart-0.jpg (100%) rename testdata/{ => Movies}/Higher Learning/fanart-1.jpg (100%) rename testdata/{ => Movies}/Higher Learning/fanart.jpg (100%) create mode 100644 testdata/Movies/Higher Learning/metadata.json rename testdata/{ => Movies}/Higher Learning/metadata.txt (100%) rename testdata/{ => Movies}/Higher Learning/poster.jpg (100%) rename testdata/{ => Movies}/J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.m4v (100%) rename testdata/{ => Movies}/J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.nfo (100%) rename testdata/{ => Movies}/J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.sample.m4v (100%) rename testdata/{ => Movies}/J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.srt (100%) create mode 100644 testdata/Movies/J0hn W1ck (2014)/metadata.json rename testdata/{ => Movies}/J0hn W1ck (2014)/metadata.txt (100%) rename testdata/{ => Movies}/Stale Sample (2019)/metadata.json (77%) rename testdata/{ => Movies}/The Hudsucker Proxy (1994)/54151c3b9a2a4773958f848efecefc3b.mkv (100%) rename testdata/{ => Movies}/The Hudsucker Proxy (1994)/The Hudsucker Proxy - DVD Cover.jpg (100%) rename testdata/{ => Movies}/The Hudsucker Proxy (1994)/The Hudsucker Proxy CD1.avi (100%) rename testdata/{ => Movies}/The Hudsucker Proxy (1994)/The Hudsucker Proxy CD2.avi (100%) rename testdata/{ => Movies}/The Hudsucker Proxy (1994)/fanart-0.jpg (100%) rename testdata/{ => Movies}/The Hudsucker Proxy (1994)/fanart-1.jpg (100%) rename testdata/{ => Movies}/The Hudsucker Proxy (1994)/fanart-2.jpg (100%) rename testdata/{ => Movies}/The Hudsucker Proxy (1994)/fanart-3.jpg (100%) rename testdata/{ => Movies}/The Hudsucker Proxy (1994)/fanart.jpg (100%) create mode 100644 testdata/Movies/The Hudsucker Proxy (1994)/metadata.json rename testdata/{ => Movies}/The Hudsucker Proxy (1994)/metadata.txt (100%) delete mode 100644 testdata/The Hudsucker Proxy (1994)/metadata.json diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..48cb9ea --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,140 @@ +use std::collections::HashMap; +use std::env; +use std::error::Error; +use std::fmt; +use std::fs::File; +use std::io::BufReader; +use std::path::Path; +use std::path::PathBuf; + +use glob::glob; +use serde::Deserialize; + +#[derive(Clone, Deserialize, Debug)] +pub struct Resolution(usize, usize); +impl fmt::Display for Resolution { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + let v = format!("{}x{}", self.0, self.1); + f.pad(&v) + } +} + +#[derive(Clone, Deserialize, Debug)] +pub struct Metadata { + pub size: usize, + pub dimension: Resolution, + pub duration_text: String, + pub duration: f32, +} + +#[derive(Deserialize, Debug)] +pub struct MetadataFile { + #[serde(flatten)] + pub metadata: HashMap, +} + +pub struct MovieLibrary { + root: String, +} + +impl MovieLibrary { + pub fn new>(root: S) -> MovieLibrary { + MovieLibrary { root: root.into() } + } + + pub fn movies( + &self, + include_stale: bool, + ) -> Result<(HashMap), Box> { + let mut movies = HashMap::new(); + for md in glob(&format!("{}/*/metadata.json", self.root))? { + match md { + Ok(path) => { + let mdf = read_metadata_from_file(&path)?; + for (name, md) in mdf.metadata { + if include_stale { + movies.insert(name, md); + } else { + // Filter out files that don't exist + dbg!(&self.root, &name); + let mut p = PathBuf::from(&self.root); + p.push(&name); + dbg!(&p); + if p.is_file() { + movies.insert(name, md); + } + } + } + } + Err(e) => { + return Err(e.into()); + } + } + } + Ok(movies) + } +} + +fn read_metadata_from_file>(path: P) -> Result> { + // Open the file in read-only mode with buffer. + let file = File::open(path)?; + let reader = BufReader::new(file); + + // Read the JSON contents of the file as an instance of `User`. + let md = serde_json::from_reader(reader)?; + + // Return the `User`. + Ok(md) +} + +#[cfg(test)] +mod tests { + use super::*; + + fn testdata_dir() -> String { + format!("{}/testdata", env::var("CARGO_MANIFEST_DIR").unwrap()) + } + + #[test] + fn test_movies() { + let lib = MovieLibrary::new(format!("{}/Movies", testdata_dir())); + let movies = lib.movies(true).expect("failed to get movies"); + let mut got = movies.keys().collect::>(); + got.sort(); + let want = [ + "Aladdin (1992)/Aladdin.1992.720p.BRrip.x264.GAZ.YIFY.mp4", + "Aladdin (2019)/4fe12adfdf4b4e9daa4f1366452d3431.mkv", + "Higher Learning/Higher Learning CD1.avi", + "Higher Learning/Higher Learning CD2.avi", + "J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.m4v", + "J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.sample.m4v", + "Stale Sample (2019)/Stale Sample (2019) m720p x264 aac.sample.m4v", + "The Hudsucker Proxy (1994)/54151c3b9a2a4773958f848efecefc3b.mkv", + "The Hudsucker Proxy (1994)/The Hudsucker Proxy CD1.avi", + "The Hudsucker Proxy (1994)/The Hudsucker Proxy CD2.avi", + ]; + + assert_eq!(got, want); + } + + #[test] + fn test_filter_stale() { + let lib = MovieLibrary::new(format!("{}/Movies", testdata_dir())); + let movies = lib.movies(false).expect("failed to get movies"); + let mut got = movies.keys().collect::>(); + got.sort(); + let want = [ + "Aladdin (1992)/Aladdin.1992.720p.BRrip.x264.GAZ.YIFY.mp4", + "Aladdin (2019)/4fe12adfdf4b4e9daa4f1366452d3431.mkv", + "Higher Learning/Higher Learning CD1.avi", + "Higher Learning/Higher Learning CD2.avi", + "J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.m4v", + "J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.sample.m4v", + "The Hudsucker Proxy (1994)/54151c3b9a2a4773958f848efecefc3b.mkv", + "The Hudsucker Proxy (1994)/The Hudsucker Proxy CD1.avi", + "The Hudsucker Proxy (1994)/The Hudsucker Proxy CD2.avi", + ]; + + assert_eq!(got, want); + } +} diff --git a/src/main.rs b/src/main.rs index fea4c47..3016c37 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,68 +1,41 @@ use std::collections::HashMap; use std::error::Error; -use std::fmt; -use std::fs::File; -use std::io::BufReader; use std::path::Path; use std::path::PathBuf; -use glob::glob; use human_format::Formatter; use human_format::Scales; use log::info; use regex::Regex; -use serde::Deserialize; use structopt::StructOpt; +use superdeduper::Metadata; +use superdeduper::MovieLibrary; + const MOVIE_DIR: &str = "/home/wathiede/Movies"; const TO_BE_REMOVED_DIR: &str = "/storage/media/to-be-deleted/"; -#[derive(Deserialize, Debug)] -struct Resolution(usize, usize); -impl fmt::Display for Resolution { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - let v = format!("{}x{}", self.0, self.1); - f.pad(&v) - } -} - -#[derive(Deserialize, Debug)] -struct Metadata { - size: usize, - dimension: Resolution, - duration_text: String, - duration: f32, -} - -#[derive(Deserialize, Debug)] -struct MetadataFile { - #[serde(flatten)] - metadata: HashMap, -} - -fn read_metadata_from_file>(path: P) -> Result> { - // Open the file in read-only mode with buffer. - let file = File::open(path)?; - let reader = BufReader::new(file); - - // Read the JSON contents of the file as an instance of `User`. - let md = serde_json::from_reader(reader)?; - - // Return the `User`. - Ok(md) -} - fn clean_path_parent>(path: P) -> PathBuf { - let path: &Path = path.as_ref(); - path.parent().unwrap().into() + let path = path.as_ref(); + let path = path.parent().unwrap(); + let mut path = path.to_str().unwrap(); + if path.ends_with(')') { + path = &path[..path.len() - 7]; + } + PathBuf::from(path) } fn print_movie_groups(movie_groups: &HashMap>) { - for (name, paths) in movie_groups { + let mut names = movie_groups.keys().collect::>(); + names.sort(); + + for name in names { + let paths = &movie_groups[name]; if paths.len() < 2 { continue; } - println!("{}:", name.display()); + let dir = name.to_str().unwrap(); + println!("{}:", &dir[MOVIE_DIR.len() + 1..]); for p in paths { println!(" {}", &p[p.rfind("/").unwrap() + 1..]); } @@ -117,24 +90,6 @@ struct SuperDeduper { cmd: Command, } -fn get_movies() -> Result<(HashMap), Box> { - let mut movies = HashMap::new(); - for md in glob(&format!("{}/*/metadata.json", MOVIE_DIR))? { - match md { - Ok(path) => { - let mdf = read_metadata_from_file(&path)?; - for (name, md) in mdf.metadata { - if Path::new(&name).is_file() { - movies.insert(name, md); - } - } - } - Err(e) => return Err(e.into()), - } - } - Ok(movies) -} - fn main() -> Result<(), Box> { let app = SuperDeduper::from_args(); stderrlog::new() @@ -145,13 +100,15 @@ fn main() -> Result<(), Box> { match app.cmd { Command::Samples => { - let movies = get_movies()?; + let lib = MovieLibrary::new(MOVIE_DIR); + let movies = lib.movies(false)?; let samples_re = Regex::new(r"(?i).*sample.*").unwrap(); print_movies(&movies, Some(&samples_re)); } Command::Groups => { - let movies = get_movies()?; + let lib = MovieLibrary::new(MOVIE_DIR); + let movies = lib.movies(false)?; let mut movie_groups: HashMap> = HashMap::new(); for name in movies.keys() { diff --git a/testdata/Aladdin (1992)/metadata.json b/testdata/Aladdin (1992)/metadata.json deleted file mode 100644 index 85c47fd..0000000 --- a/testdata/Aladdin (1992)/metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"testdata/Aladdin (1992)/Aladdin.1992.720p.BRrip.x264.GAZ.YIFY.mp4": {"size": 681829239, "bit_rate_text": "1048 kb/s", "dar_text": "16:9", "format": "MPEG-4 Part 14 (MP4)", "frame_rate": 25.0, "title": null, "size_text": "651MiB", "scan_type": "Progressive scan", "duration_text": "01:26:42.72", "dimension_text": "1280x720", "bit_rate": 1048419.0, "dar": 1.7777777777777777, "path": "testdata/Aladdin (1992)/Aladdin.1992.720p.BRrip.x264.GAZ.YIFY.mp4", "duration": 5202.72, "frame_rate_text": "25 fps", "filename": "Aladdin.1992.720p.BRrip.x264.GAZ.YIFY.mp4", "dimension": [1280, 720], "sha1sum": null}} \ No newline at end of file diff --git a/testdata/Aladdin (2019)/metadata.json b/testdata/Aladdin (2019)/metadata.json deleted file mode 100644 index 5df8151..0000000 --- a/testdata/Aladdin (2019)/metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"testdata/Aladdin (2019)/4fe12adfdf4b4e9daa4f1366452d3431.mkv": {"size": 4150055637, "bit_rate_text": "4324 kb/s", "dar_text": "16:9", "format": "Matroska", "frame_rate": 23.976023976023978, "title": null, "size_text": "3.87GiB", "scan_type": "Progressive scan", "duration_text": "02:07:58.12", "dimension_text": "1280x720", "bit_rate": 4324031.0, "dar": 1.7777777777777777, "path": "testdata/Aladdin (2019)/4fe12adfdf4b4e9daa4f1366452d3431.mkv", "duration": 7678.122, "frame_rate_text": "23.98 fps", "filename": "4fe12adfdf4b4e9daa4f1366452d3431.mkv", "dimension": [1280, 720], "sha1sum": null}} \ No newline at end of file diff --git a/testdata/Higher Learning/metadata.json b/testdata/Higher Learning/metadata.json deleted file mode 100644 index 54c11e2..0000000 --- a/testdata/Higher Learning/metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"testdata/Higher Learning/Higher Learning CD1.avi": {"size": 732073984, "bit_rate_text": "1549 kb/s", "dar_text": "20:11", "format": "Audio Video Interleaved", "frame_rate": 23.976, "title": null, "size_text": "699MiB", "scan_type": "Progressive scan", "duration_text": "01:02:59.70", "dimension_text": "640x352", "bit_rate": 1549487.0, "dar": 1.8181818181818181, "path": "testdata/Higher Learning/Higher Learning CD1.avi", "duration": 3779.696363, "frame_rate_text": "23.98 fps", "filename": "Higher Learning CD1.avi", "dimension": [640, 352], "sha1sum": null}, "testdata/Higher Learning/Higher Learning CD2.avi": {"size": 726925312, "bit_rate_text": "1492 kb/s", "dar_text": "20:11", "format": "Audio Video Interleaved", "frame_rate": 23.976, "title": null, "size_text": "694MiB", "scan_type": "Progressive scan", "duration_text": "01:04:57.94", "dimension_text": "640x352", "bit_rate": 1491917.0, "dar": 1.8181818181818181, "path": "testdata/Higher Learning/Higher Learning CD2.avi", "duration": 3897.939606, "frame_rate_text": "23.98 fps", "filename": "Higher Learning CD2.avi", "dimension": [640, 352], "sha1sum": null}} \ No newline at end of file diff --git a/testdata/J0hn W1ck (2014)/metadata.json b/testdata/J0hn W1ck (2014)/metadata.json deleted file mode 100644 index 4c0f76e..0000000 --- a/testdata/J0hn W1ck (2014)/metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"testdata/J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.sample.m4v": {"size": 3486430, "bit_rate_text": "443 kb/s", "dar_text": "128:53", "format": "MPEG-4 Part 14 (M4V)", "frame_rate": 23.976023976023978, "title": "John Wick", "size_text": "3.33MiB", "scan_type": "Progressive scan", "duration_text": "00:01:02.95", "dimension_text": "1280x530", "bit_rate": 443049.0, "dar": 2.4150943396226414, "path": "testdata/J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.sample.m4v", "duration": 62.953333, "frame_rate_text": "23.98 fps", "filename": "J0hn W1ck (2014) m720p x264 aac.sample.m4v", "dimension": [1280, 530], "sha1sum": null}, "testdata/J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.m4v": {"size": 529494697, "bit_rate_text": "698 kb/s", "dar_text": "128:53", "format": "MPEG-4 Part 14 (M4V)", "frame_rate": 23.976023976023978, "title": "John Wick", "size_text": "505MiB", "scan_type": "Progressive scan", "duration_text": "01:41:12.81", "dimension_text": "1280x530", "bit_rate": 697528.0, "dar": 2.4150943396226414, "path": "testdata/J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.m4v", "duration": 6072.810667, "frame_rate_text": "23.98 fps", "filename": "J0hn W1ck (2014) m720p x264 aac.m4v", "dimension": [1280, 530], "sha1sum": null}} \ No newline at end of file diff --git a/testdata/Aladdin (1992)/Aladdin.1992.720p.BRrip.x264.GAZ.YIFY.mp4 b/testdata/Movies/Aladdin (1992)/Aladdin.1992.720p.BRrip.x264.GAZ.YIFY.mp4 similarity index 100% rename from testdata/Aladdin (1992)/Aladdin.1992.720p.BRrip.x264.GAZ.YIFY.mp4 rename to testdata/Movies/Aladdin (1992)/Aladdin.1992.720p.BRrip.x264.GAZ.YIFY.mp4 diff --git a/testdata/Aladdin (1992)/WWW.YIFY-TORRENTS.COM.jpg b/testdata/Movies/Aladdin (1992)/WWW.YIFY-TORRENTS.COM.jpg similarity index 100% rename from testdata/Aladdin (1992)/WWW.YIFY-TORRENTS.COM.jpg rename to testdata/Movies/Aladdin (1992)/WWW.YIFY-TORRENTS.COM.jpg diff --git a/testdata/Movies/Aladdin (1992)/metadata.json b/testdata/Movies/Aladdin (1992)/metadata.json new file mode 100644 index 0000000..ca0057b --- /dev/null +++ b/testdata/Movies/Aladdin (1992)/metadata.json @@ -0,0 +1 @@ +{"Aladdin (1992)/Aladdin.1992.720p.BRrip.x264.GAZ.YIFY.mp4": {"size": 681829239, "bit_rate_text": "1048 kb/s", "dar_text": "16:9", "format": "MPEG-4 Part 14 (MP4)", "frame_rate": 25.0, "title": null, "size_text": "651MiB", "scan_type": "Progressive scan", "duration_text": "01:26:42.72", "dimension_text": "1280x720", "bit_rate": 1048419.0, "dar": 1.7777777777777777, "path": "Aladdin (1992)/Aladdin.1992.720p.BRrip.x264.GAZ.YIFY.mp4", "duration": 5202.72, "frame_rate_text": "25 fps", "filename": "Aladdin.1992.720p.BRrip.x264.GAZ.YIFY.mp4", "dimension": [1280, 720], "sha1sum": null}} \ No newline at end of file diff --git a/testdata/Aladdin (1992)/metadata.txt b/testdata/Movies/Aladdin (1992)/metadata.txt similarity index 100% rename from testdata/Aladdin (1992)/metadata.txt rename to testdata/Movies/Aladdin (1992)/metadata.txt diff --git a/testdata/Aladdin (2019)/4fe12adfdf4b4e9daa4f1366452d3431.mkv b/testdata/Movies/Aladdin (2019)/4fe12adfdf4b4e9daa4f1366452d3431.mkv similarity index 100% rename from testdata/Aladdin (2019)/4fe12adfdf4b4e9daa4f1366452d3431.mkv rename to testdata/Movies/Aladdin (2019)/4fe12adfdf4b4e9daa4f1366452d3431.mkv diff --git a/testdata/Movies/Aladdin (2019)/metadata.json b/testdata/Movies/Aladdin (2019)/metadata.json new file mode 100644 index 0000000..4539a14 --- /dev/null +++ b/testdata/Movies/Aladdin (2019)/metadata.json @@ -0,0 +1 @@ +{"Aladdin (2019)/4fe12adfdf4b4e9daa4f1366452d3431.mkv": {"size": 4150055637, "bit_rate_text": "4324 kb/s", "dar_text": "16:9", "format": "Matroska", "frame_rate": 23.976023976023978, "title": null, "size_text": "3.87GiB", "scan_type": "Progressive scan", "duration_text": "02:07:58.12", "dimension_text": "1280x720", "bit_rate": 4324031.0, "dar": 1.7777777777777777, "path": "Aladdin (2019)/4fe12adfdf4b4e9daa4f1366452d3431.mkv", "duration": 7678.122, "frame_rate_text": "23.98 fps", "filename": "4fe12adfdf4b4e9daa4f1366452d3431.mkv", "dimension": [1280, 720], "sha1sum": null}} \ No newline at end of file diff --git a/testdata/Aladdin (2019)/metadata.txt b/testdata/Movies/Aladdin (2019)/metadata.txt similarity index 100% rename from testdata/Aladdin (2019)/metadata.txt rename to testdata/Movies/Aladdin (2019)/metadata.txt diff --git a/testdata/Higher Learning/Higher Learning CD1.avi b/testdata/Movies/Higher Learning/Higher Learning CD1.avi similarity index 100% rename from testdata/Higher Learning/Higher Learning CD1.avi rename to testdata/Movies/Higher Learning/Higher Learning CD1.avi diff --git a/testdata/Higher Learning/Higher Learning CD2.avi b/testdata/Movies/Higher Learning/Higher Learning CD2.avi similarity index 100% rename from testdata/Higher Learning/Higher Learning CD2.avi rename to testdata/Movies/Higher Learning/Higher Learning CD2.avi diff --git a/testdata/Higher Learning/Higher_Learning_(movie).jpg b/testdata/Movies/Higher Learning/Higher_Learning_(movie).jpg similarity index 100% rename from testdata/Higher Learning/Higher_Learning_(movie).jpg rename to testdata/Movies/Higher Learning/Higher_Learning_(movie).jpg diff --git a/testdata/Higher Learning/Z-thumbnail-550x600-poster.jpg b/testdata/Movies/Higher Learning/Z-thumbnail-550x600-poster.jpg similarity index 100% rename from testdata/Higher Learning/Z-thumbnail-550x600-poster.jpg rename to testdata/Movies/Higher Learning/Z-thumbnail-550x600-poster.jpg diff --git a/testdata/Higher Learning/fanart-0.jpg b/testdata/Movies/Higher Learning/fanart-0.jpg similarity index 100% rename from testdata/Higher Learning/fanart-0.jpg rename to testdata/Movies/Higher Learning/fanart-0.jpg diff --git a/testdata/Higher Learning/fanart-1.jpg b/testdata/Movies/Higher Learning/fanart-1.jpg similarity index 100% rename from testdata/Higher Learning/fanart-1.jpg rename to testdata/Movies/Higher Learning/fanart-1.jpg diff --git a/testdata/Higher Learning/fanart.jpg b/testdata/Movies/Higher Learning/fanart.jpg similarity index 100% rename from testdata/Higher Learning/fanart.jpg rename to testdata/Movies/Higher Learning/fanart.jpg diff --git a/testdata/Movies/Higher Learning/metadata.json b/testdata/Movies/Higher Learning/metadata.json new file mode 100644 index 0000000..aea45c7 --- /dev/null +++ b/testdata/Movies/Higher Learning/metadata.json @@ -0,0 +1 @@ +{"Higher Learning/Higher Learning CD1.avi": {"size": 732073984, "bit_rate_text": "1549 kb/s", "dar_text": "20:11", "format": "Audio Video Interleaved", "frame_rate": 23.976, "title": null, "size_text": "699MiB", "scan_type": "Progressive scan", "duration_text": "01:02:59.70", "dimension_text": "640x352", "bit_rate": 1549487.0, "dar": 1.8181818181818181, "path": "Higher Learning/Higher Learning CD1.avi", "duration": 3779.696363, "frame_rate_text": "23.98 fps", "filename": "Higher Learning CD1.avi", "dimension": [640, 352], "sha1sum": null}, "Higher Learning/Higher Learning CD2.avi": {"size": 726925312, "bit_rate_text": "1492 kb/s", "dar_text": "20:11", "format": "Audio Video Interleaved", "frame_rate": 23.976, "title": null, "size_text": "694MiB", "scan_type": "Progressive scan", "duration_text": "01:04:57.94", "dimension_text": "640x352", "bit_rate": 1491917.0, "dar": 1.8181818181818181, "path": "Higher Learning/Higher Learning CD2.avi", "duration": 3897.939606, "frame_rate_text": "23.98 fps", "filename": "Higher Learning CD2.avi", "dimension": [640, 352], "sha1sum": null}} \ No newline at end of file diff --git a/testdata/Higher Learning/metadata.txt b/testdata/Movies/Higher Learning/metadata.txt similarity index 100% rename from testdata/Higher Learning/metadata.txt rename to testdata/Movies/Higher Learning/metadata.txt diff --git a/testdata/Higher Learning/poster.jpg b/testdata/Movies/Higher Learning/poster.jpg similarity index 100% rename from testdata/Higher Learning/poster.jpg rename to testdata/Movies/Higher Learning/poster.jpg diff --git a/testdata/J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.m4v b/testdata/Movies/J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.m4v similarity index 100% rename from testdata/J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.m4v rename to testdata/Movies/J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.m4v diff --git a/testdata/J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.nfo b/testdata/Movies/J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.nfo similarity index 100% rename from testdata/J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.nfo rename to testdata/Movies/J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.nfo diff --git a/testdata/J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.sample.m4v b/testdata/Movies/J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.sample.m4v similarity index 100% rename from testdata/J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.sample.m4v rename to testdata/Movies/J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.sample.m4v diff --git a/testdata/J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.srt b/testdata/Movies/J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.srt similarity index 100% rename from testdata/J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.srt rename to testdata/Movies/J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.srt diff --git a/testdata/Movies/J0hn W1ck (2014)/metadata.json b/testdata/Movies/J0hn W1ck (2014)/metadata.json new file mode 100644 index 0000000..7f53515 --- /dev/null +++ b/testdata/Movies/J0hn W1ck (2014)/metadata.json @@ -0,0 +1 @@ +{"J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.sample.m4v": {"size": 3486430, "bit_rate_text": "443 kb/s", "dar_text": "128:53", "format": "MPEG-4 Part 14 (M4V)", "frame_rate": 23.976023976023978, "title": "John Wick", "size_text": "3.33MiB", "scan_type": "Progressive scan", "duration_text": "00:01:02.95", "dimension_text": "1280x530", "bit_rate": 443049.0, "dar": 2.4150943396226414, "path": "J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.sample.m4v", "duration": 62.953333, "frame_rate_text": "23.98 fps", "filename": "J0hn W1ck (2014) m720p x264 aac.sample.m4v", "dimension": [1280, 530], "sha1sum": null}, "J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.m4v": {"size": 529494697, "bit_rate_text": "698 kb/s", "dar_text": "128:53", "format": "MPEG-4 Part 14 (M4V)", "frame_rate": 23.976023976023978, "title": "John Wick", "size_text": "505MiB", "scan_type": "Progressive scan", "duration_text": "01:41:12.81", "dimension_text": "1280x530", "bit_rate": 697528.0, "dar": 2.4150943396226414, "path": "J0hn W1ck (2014)/J0hn W1ck (2014) m720p x264 aac.m4v", "duration": 6072.810667, "frame_rate_text": "23.98 fps", "filename": "J0hn W1ck (2014) m720p x264 aac.m4v", "dimension": [1280, 530], "sha1sum": null}} \ No newline at end of file diff --git a/testdata/J0hn W1ck (2014)/metadata.txt b/testdata/Movies/J0hn W1ck (2014)/metadata.txt similarity index 100% rename from testdata/J0hn W1ck (2014)/metadata.txt rename to testdata/Movies/J0hn W1ck (2014)/metadata.txt diff --git a/testdata/Stale Sample (2019)/metadata.json b/testdata/Movies/Stale Sample (2019)/metadata.json similarity index 77% rename from testdata/Stale Sample (2019)/metadata.json rename to testdata/Movies/Stale Sample (2019)/metadata.json index 05e19c4..010aa37 100644 --- a/testdata/Stale Sample (2019)/metadata.json +++ b/testdata/Movies/Stale Sample (2019)/metadata.json @@ -1,5 +1,5 @@ { - "testdata/Stale Sample (2019)/Stale Sample (2019) m720p x264 aac.sample.m4v": { + "Stale Sample (2019)/Stale Sample (2019) m720p x264 aac.sample.m4v": { "size": 3486430, "bit_rate_text": "443 kb/s", "dar_text": "128:53", @@ -12,7 +12,7 @@ "dimension_text": "1280x530", "bit_rate": 443049, "dar": 2.4150943396226414, - "path": "testdata/Stale Sample (2019)/Stale Sample (2019) m720p x264 aac.sample.m4v", + "path": "Stale Sample (2019)/Stale Sample (2019) m720p x264 aac.sample.m4v", "duration": 62.953333, "frame_rate_text": "23.98 fps", "filename": "Stale Sample (2019) m720p x264 aac.sample.m4v", diff --git a/testdata/The Hudsucker Proxy (1994)/54151c3b9a2a4773958f848efecefc3b.mkv b/testdata/Movies/The Hudsucker Proxy (1994)/54151c3b9a2a4773958f848efecefc3b.mkv similarity index 100% rename from testdata/The Hudsucker Proxy (1994)/54151c3b9a2a4773958f848efecefc3b.mkv rename to testdata/Movies/The Hudsucker Proxy (1994)/54151c3b9a2a4773958f848efecefc3b.mkv diff --git a/testdata/The Hudsucker Proxy (1994)/The Hudsucker Proxy - DVD Cover.jpg b/testdata/Movies/The Hudsucker Proxy (1994)/The Hudsucker Proxy - DVD Cover.jpg similarity index 100% rename from testdata/The Hudsucker Proxy (1994)/The Hudsucker Proxy - DVD Cover.jpg rename to testdata/Movies/The Hudsucker Proxy (1994)/The Hudsucker Proxy - DVD Cover.jpg diff --git a/testdata/The Hudsucker Proxy (1994)/The Hudsucker Proxy CD1.avi b/testdata/Movies/The Hudsucker Proxy (1994)/The Hudsucker Proxy CD1.avi similarity index 100% rename from testdata/The Hudsucker Proxy (1994)/The Hudsucker Proxy CD1.avi rename to testdata/Movies/The Hudsucker Proxy (1994)/The Hudsucker Proxy CD1.avi diff --git a/testdata/The Hudsucker Proxy (1994)/The Hudsucker Proxy CD2.avi b/testdata/Movies/The Hudsucker Proxy (1994)/The Hudsucker Proxy CD2.avi similarity index 100% rename from testdata/The Hudsucker Proxy (1994)/The Hudsucker Proxy CD2.avi rename to testdata/Movies/The Hudsucker Proxy (1994)/The Hudsucker Proxy CD2.avi diff --git a/testdata/The Hudsucker Proxy (1994)/fanart-0.jpg b/testdata/Movies/The Hudsucker Proxy (1994)/fanart-0.jpg similarity index 100% rename from testdata/The Hudsucker Proxy (1994)/fanart-0.jpg rename to testdata/Movies/The Hudsucker Proxy (1994)/fanart-0.jpg diff --git a/testdata/The Hudsucker Proxy (1994)/fanart-1.jpg b/testdata/Movies/The Hudsucker Proxy (1994)/fanart-1.jpg similarity index 100% rename from testdata/The Hudsucker Proxy (1994)/fanart-1.jpg rename to testdata/Movies/The Hudsucker Proxy (1994)/fanart-1.jpg diff --git a/testdata/The Hudsucker Proxy (1994)/fanart-2.jpg b/testdata/Movies/The Hudsucker Proxy (1994)/fanart-2.jpg similarity index 100% rename from testdata/The Hudsucker Proxy (1994)/fanart-2.jpg rename to testdata/Movies/The Hudsucker Proxy (1994)/fanart-2.jpg diff --git a/testdata/The Hudsucker Proxy (1994)/fanart-3.jpg b/testdata/Movies/The Hudsucker Proxy (1994)/fanart-3.jpg similarity index 100% rename from testdata/The Hudsucker Proxy (1994)/fanart-3.jpg rename to testdata/Movies/The Hudsucker Proxy (1994)/fanart-3.jpg diff --git a/testdata/The Hudsucker Proxy (1994)/fanart.jpg b/testdata/Movies/The Hudsucker Proxy (1994)/fanart.jpg similarity index 100% rename from testdata/The Hudsucker Proxy (1994)/fanart.jpg rename to testdata/Movies/The Hudsucker Proxy (1994)/fanart.jpg diff --git a/testdata/Movies/The Hudsucker Proxy (1994)/metadata.json b/testdata/Movies/The Hudsucker Proxy (1994)/metadata.json new file mode 100644 index 0000000..45e8823 --- /dev/null +++ b/testdata/Movies/The Hudsucker Proxy (1994)/metadata.json @@ -0,0 +1 @@ +{"The Hudsucker Proxy (1994)/The Hudsucker Proxy CD2.avi": {"size": 736493444, "bit_rate_text": "1635 kb/s", "dar_text": "45:26", "format": "Audio Video Interleaved", "frame_rate": 23.976023976023978, "title": "The Hudsucker Proxy (AC3-2ch) (1of2)", "size_text": "703MiB", "scan_type": "Progressive scan", "duration_text": "01:00:03.68", "dimension_text": "720x416", "bit_rate": 1634979.0, "dar": 1.7307692307692308, "path": "The Hudsucker Proxy (1994)/The Hudsucker Proxy CD2.avi", "duration": 3603.683417, "frame_rate_text": "23.98 fps", "filename": "The Hudsucker Proxy CD2.avi", "dimension": [720, 416], "sha1sum": null}, "The Hudsucker Proxy (1994)/The Hudsucker Proxy CD1.avi": {"size": 736508354, "bit_rate_text": "1938 kb/s", "dar_text": "45:26", "format": "Audio Video Interleaved", "frame_rate": 23.976023976023978, "title": "The Hudsucker Proxy (AC3-2ch) (2of2)", "size_text": "703MiB", "scan_type": "Progressive scan", "duration_text": "00:50:40.45", "dimension_text": "720x416", "bit_rate": 1937890.0, "dar": 1.7307692307692308, "path": "The Hudsucker Proxy (1994)/The Hudsucker Proxy CD1.avi", "duration": 3040.454083, "frame_rate_text": "23.98 fps", "filename": "The Hudsucker Proxy CD1.avi", "dimension": [720, 416], "sha1sum": null}, "The Hudsucker Proxy (1994)/54151c3b9a2a4773958f848efecefc3b.mkv": {"size": 4778774000, "bit_rate_text": "5753 kb/s", "dar_text": "16:9", "format": "Matroska", "frame_rate": 23.976023976023978, "title": null, "size_text": "4.46GiB", "scan_type": "Progressive scan", "duration_text": "01:50:45.02", "dimension_text": "1920x1080", "bit_rate": 5753206.0, "dar": 1.7777777777777777, "path": "The Hudsucker Proxy (1994)/54151c3b9a2a4773958f848efecefc3b.mkv", "duration": 6645.024, "frame_rate_text": "23.98 fps", "filename": "54151c3b9a2a4773958f848efecefc3b.mkv", "dimension": [1920, 1080], "sha1sum": null}} \ No newline at end of file diff --git a/testdata/The Hudsucker Proxy (1994)/metadata.txt b/testdata/Movies/The Hudsucker Proxy (1994)/metadata.txt similarity index 100% rename from testdata/The Hudsucker Proxy (1994)/metadata.txt rename to testdata/Movies/The Hudsucker Proxy (1994)/metadata.txt diff --git a/testdata/The Hudsucker Proxy (1994)/metadata.json b/testdata/The Hudsucker Proxy (1994)/metadata.json deleted file mode 100644 index 7dcd19f..0000000 --- a/testdata/The Hudsucker Proxy (1994)/metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"testdata/The Hudsucker Proxy (1994)/The Hudsucker Proxy CD2.avi": {"size": 736493444, "bit_rate_text": "1635 kb/s", "dar_text": "45:26", "format": "Audio Video Interleaved", "frame_rate": 23.976023976023978, "title": "The Hudsucker Proxy (AC3-2ch) (1of2)", "size_text": "703MiB", "scan_type": "Progressive scan", "duration_text": "01:00:03.68", "dimension_text": "720x416", "bit_rate": 1634979.0, "dar": 1.7307692307692308, "path": "testdata/The Hudsucker Proxy (1994)/The Hudsucker Proxy CD2.avi", "duration": 3603.683417, "frame_rate_text": "23.98 fps", "filename": "The Hudsucker Proxy CD2.avi", "dimension": [720, 416], "sha1sum": null}, "testdata/The Hudsucker Proxy (1994)/The Hudsucker Proxy CD1.avi": {"size": 736508354, "bit_rate_text": "1938 kb/s", "dar_text": "45:26", "format": "Audio Video Interleaved", "frame_rate": 23.976023976023978, "title": "The Hudsucker Proxy (AC3-2ch) (2of2)", "size_text": "703MiB", "scan_type": "Progressive scan", "duration_text": "00:50:40.45", "dimension_text": "720x416", "bit_rate": 1937890.0, "dar": 1.7307692307692308, "path": "testdata/The Hudsucker Proxy (1994)/The Hudsucker Proxy CD1.avi", "duration": 3040.454083, "frame_rate_text": "23.98 fps", "filename": "The Hudsucker Proxy CD1.avi", "dimension": [720, 416], "sha1sum": null}, "testdata/The Hudsucker Proxy (1994)/54151c3b9a2a4773958f848efecefc3b.mkv": {"size": 4778774000, "bit_rate_text": "5753 kb/s", "dar_text": "16:9", "format": "Matroska", "frame_rate": 23.976023976023978, "title": null, "size_text": "4.46GiB", "scan_type": "Progressive scan", "duration_text": "01:50:45.02", "dimension_text": "1920x1080", "bit_rate": 5753206.0, "dar": 1.7777777777777777, "path": "testdata/The Hudsucker Proxy (1994)/54151c3b9a2a4773958f848efecefc3b.mkv", "duration": 6645.024, "frame_rate_text": "23.98 fps", "filename": "54151c3b9a2a4773958f848efecefc3b.mkv", "dimension": [1920, 1080], "sha1sum": null}} \ No newline at end of file