diff --git a/src/analyse.rs b/src/analyse.rs index 4e26576..00dae32 100644 --- a/src/analyse.rs +++ b/src/analyse.rs @@ -17,6 +17,7 @@ use crate::db; use crate::tags; const DONT_ANALYSE:&str = ".nomusic"; +const MAX_TAG_ERRORS_TO_SHOW:usize = 25; fn get_file_list(db:&mut db::Db, mpath:&PathBuf, path:&PathBuf, track_paths:&mut Vec) { if path.is_dir() { @@ -77,32 +78,31 @@ pub fn analyse_new_files(db:&db::Db, mpath: &PathBuf, track_paths:Vec) - let total = track_paths.len(); let pb = ProgressBar::new(total.try_into().unwrap()); let style = ProgressStyle::default_bar() - .template("[{elapsed_precise}] {bar:40} {pos:>7}/{len:7} {wide_msg}") - .progress_chars("##-"); + .template("[{elapsed_precise}] [{bar:25}] {pos:>6}/{len:6} {percent:>3}% {wide_msg}") + .progress_chars("=> "); pb.set_style(style); let results = analyze_paths_streaming(track_paths)?; let mut analysed = 0; let mut failed = 0; - let mut tag_error = 0; + let mut tag_error:Vec = Vec::new(); + log::info!("Analysing new tracks"); for (path, result) in results { - pb.set_message(format!("Analysing {}", path)); + let pbuff = PathBuf::from(&path); + let stripped = pbuff.strip_prefix(mpath).unwrap(); + let spbuff = stripped.to_path_buf(); + let sname = String::from(spbuff.to_string_lossy()); + pb.set_message(format!("{}", sname)); match result { Ok(track) => { - let meta = tags::read(&path); - let pb = PathBuf::from(path); + let cpath = String::from(path); + let meta = tags::read(&cpath); if meta.title.is_empty() && meta.artist.is_empty() && meta.album.is_empty() && meta.genre.is_empty() { - tag_error += 1; - } - match pb.strip_prefix(mpath) { - Ok(stripped) => { - let spb = stripped.to_path_buf(); - let sname = String::from(spb.to_string_lossy()); - db.add_track(&sname, &meta, &track.analysis); - }, - Err(_) => { } + tag_error.push(sname.clone()); } + + db.add_track(&sname, &meta, &track.analysis); analysed += 1; }, Err(_) => { @@ -111,7 +111,19 @@ pub fn analyse_new_files(db:&db::Db, mpath: &PathBuf, track_paths:Vec) - }; pb.inc(1); } - pb.finish_with_message(format!("{} Analyzed. {} Failure(s). {} Tag error(s).", analysed, failed, tag_error)); + pb.finish_with_message(format!("{} Analysed. {} Failure(s).", analysed, failed)); + if !tag_error.is_empty() { + let total = tag_error.len(); + tag_error.truncate(MAX_TAG_ERRORS_TO_SHOW); + + log::error!("Failed to read tags of the folling track(s):"); + for err in tag_error { + log::error!(" {}", err); + } + if total>MAX_TAG_ERRORS_TO_SHOW { + log::error!(" + {} other(s)", total - MAX_TAG_ERRORS_TO_SHOW); + } + } Ok(()) } @@ -121,6 +133,7 @@ pub fn analyse_files(db_path: &str, mpath: &PathBuf, dry_run:bool, keep_old:bool let cur = PathBuf::from(mpath); db.init(); + log::info!("Looking for new tracks"); get_file_list(&mut db, mpath, &cur, &mut track_paths); log::info!("Num new tracks: {}", track_paths.len()); if !keep_old { @@ -132,6 +145,8 @@ pub fn analyse_files(db_path: &str, mpath: &PathBuf, dry_run:bool, keep_old:bool Ok(_) => { }, Err(_) => { } } + } else { + log::info!("No new tracks to analyse"); } } diff --git a/src/db.rs b/src/db.rs index 28acfe9..e3ebdda 100644 --- a/src/db.rs +++ b/src/db.rs @@ -145,6 +145,7 @@ impl Db { } pub fn remove_old(&self, mpath:&Path, dry_run:bool) { + log::info!("Looking for non-existant tracks"); let mut stmt = self.conn.prepare("SELECT File FROM Tracks;").unwrap(); let track_iter = stmt.query_map([], |row| { Ok((row.get(0)?,)) @@ -161,7 +162,7 @@ impl Db { to_remove.push(db_path); } } - log::info!("Num old tracks: {}", to_remove.len()); + log::info!("Num non-existant tracks: {}", to_remove.len()); if !dry_run { for t in to_remove { match self.conn.execute("DELETE FROM Tracks WHERE File = ?;", params![t]) { diff --git a/src/main.rs b/src/main.rs index f0d6867..17e8363 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,7 +14,7 @@ mod tags; fn main() { let mut db_path = "bliss.db".to_string(); - let mut logging = "warn".to_string(); + let mut logging = "info".to_string(); let mut music_path = ".".to_string(); let mut ignore_file = String::new(); let mut keep_old:bool = false; @@ -37,6 +37,7 @@ fn main() { } if logging.eq_ignore_ascii_case("trace") || logging.eq_ignore_ascii_case("debug") || logging.eq_ignore_ascii_case("info") || logging.eq_ignore_ascii_case("warn") || logging.eq_ignore_ascii_case("error") { + logging += ",bliss_audio=error"; env_logger::init_from_env(env_logger::Env::default().filter_or("XXXXXXXX", logging)); } else { env_logger::init_from_env(env_logger::Env::default().filter_or("XXXXXXXX", "ERROR"));