From cea522d6b84a66f7139b7c89abc54d67523627b5 Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 4 Jul 2025 15:52:36 -0400 Subject: [PATCH 01/10] Added properties module --- src/lib.rs | 1 + src/properties.rs | 9 +++++++++ 2 files changed, 10 insertions(+) create mode 100644 src/properties.rs diff --git a/src/lib.rs b/src/lib.rs index 1009908..34ee6e6 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,2 +1,3 @@ pub mod meta; +pub mod properties; pub mod types; diff --git a/src/properties.rs b/src/properties.rs new file mode 100644 index 0000000..1989cfd --- /dev/null +++ b/src/properties.rs @@ -0,0 +1,9 @@ + +#[derive(Debug, Default, Clone)] +pub struct Duration { + pub val: i32 +} + +pub fn get_duration(song_path: &String) -> Duration { + Duration::default() +} -- 2.43.0 From b3bd009460d929d1fd72744626ec62cd3dada65c Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 4 Jul 2025 15:52:50 -0400 Subject: [PATCH 02/10] Added Duration type --- src/types.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/types.rs b/src/types.rs index 05a30b0..9abb612 100644 --- a/src/types.rs +++ b/src/types.rs @@ -32,6 +32,11 @@ impl MetadataType { } } +#[derive(Debug)] +pub enum Properties { + Duration, +} + pub fn all_metadata_types() -> Vec { vec![ Type::Album, -- 2.43.0 From ccf6ee08b41ebd4ae3bd56bd8a43b8bc6ee624c5 Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 4 Jul 2025 16:06:06 -0400 Subject: [PATCH 03/10] Added code to get duration from a flac file --- src/properties.rs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/properties.rs b/src/properties.rs index 1989cfd..90ed30b 100644 --- a/src/properties.rs +++ b/src/properties.rs @@ -1,9 +1,23 @@ +use lofty::file::AudioFile; #[derive(Debug, Default, Clone)] pub struct Duration { pub val: i32 } -pub fn get_duration(song_path: &String) -> Duration { - Duration::default() +pub fn get_duration(song_path: &String) -> Result { + match std::fs::File::open(song_path) { + Ok(mut content) => match lofty::flac::FlacFile::read_from(&mut content, lofty::config::ParseOptions::new(),) { + Ok(flac_file) => { + let properties = flac_file.properties(); + Ok(properties.duration()) + } + Err(err) => { + Err(std::io::Error::other(err.to_string())) + } + } + Err(err) => { + Err(err) + } + } } -- 2.43.0 From bde67b5014b40f72f728d78b0449a0e9384cf871 Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 4 Jul 2025 16:15:05 -0400 Subject: [PATCH 04/10] Moved test utils around --- src/lib.rs | 72 +++++++++++++++++++++++++++++++++++++++++++ src/meta.rs | 78 ++++------------------------------------------- src/properties.rs | 4 +++ 3 files changed, 82 insertions(+), 72 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 34ee6e6..c27f28d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,75 @@ pub mod meta; pub mod properties; pub mod types; + +pub mod test_util { + pub mod util { + + use std::io::{self, Write}; + + // Function to save a Vec to a file + pub fn save_bytes_to_file(bytes: &[u8], file_path: &String) -> io::Result<()> { + let file = std::path::Path::new(file_path); + let mut file = std::fs::File::create(file)?; + + match file.write_all(bytes) { + Ok(_res) => Ok(()), + Err(err) => Err(err), + } + } + pub fn get_full_path( + directory: &String, + filename: &String, + ) -> Result { + match path_buf(directory, filename) { + Ok(pf) => Ok(pf.display().to_string()), + Err(err) => Err(err), + } + } + + pub fn copy_file( + source_path: &String, + destination_path: &String, + ) -> Result { + let src_path = std::path::Path::new(source_path); + let dest_path = std::path::Path::new(destination_path); + + match std::fs::copy(src_path, dest_path) { + Ok(bytes) => Ok(bytes), + Err(err) => Err(err), + } + } + + pub fn file_exists(directory: &String, filename: &String) -> Result { + match path_buf(directory, filename) { + Ok(pf) => Ok(pf.exists()), + Err(err) => Err(err), + } + } + + fn path_buf( + directory: &String, + filename: &String, + ) -> Result { + let dir_path = std::path::Path::new(&directory); + Ok(dir_path.join(filename)) + } + + pub const TESTFILEDIRECTORY: &str = "tests/sample_tracks3"; + + pub fn get_filename(track: i32) -> String { + let mut filename = String::from("track"); + + if track < 10 { + filename += "0"; + filename += &track.to_string(); + } else { + filename += &track.to_string(); + } + + filename += ".flac"; + + filename + } + } +} diff --git a/src/meta.rs b/src/meta.rs index 3deb1a3..85e00c2 100644 --- a/src/meta.rs +++ b/src/meta.rs @@ -275,84 +275,15 @@ pub mod metadata { #[cfg(test)] mod tests { - use util::{file_exists, get_full_path}; use super::*; - mod util { - - use std::io::{self, Write}; - - // Function to save a Vec to a file - pub fn save_bytes_to_file(bytes: &[u8], file_path: &String) -> io::Result<()> { - let file = std::path::Path::new(file_path); - let mut file = std::fs::File::create(file)?; - - match file.write_all(bytes) { - Ok(_res) => Ok(()), - Err(err) => Err(err), - } - } - pub fn get_full_path( - directory: &String, - filename: &String, - ) -> Result { - match path_buf(directory, filename) { - Ok(pf) => Ok(pf.display().to_string()), - Err(err) => Err(err), - } - } - - pub fn copy_file( - source_path: &String, - destination_path: &String, - ) -> Result { - let src_path = std::path::Path::new(source_path); - let dest_path = std::path::Path::new(destination_path); - - match std::fs::copy(src_path, dest_path) { - Ok(bytes) => Ok(bytes), - Err(err) => Err(err), - } - } - - pub fn file_exists(directory: &String, filename: &String) -> Result { - match path_buf(directory, filename) { - Ok(pf) => Ok(pf.exists()), - Err(err) => Err(err), - } - } - - fn path_buf( - directory: &String, - filename: &String, - ) -> Result { - let dir_path = std::path::Path::new(&directory); - Ok(dir_path.join(filename)) - } - - pub const TESTFILEDIRECTORY: &str = "tests/sample_tracks3"; - - pub fn get_filename(track: i32) -> String { - let mut filename = String::from("track"); - - if track < 10 { - filename += "0"; - filename += &track.to_string(); - } else { - filename += &track.to_string(); - } - - filename += ".flac"; - - filename - } - } mod get { use super::metadata::get_meta; - use super::*; use crate::types; + use crate::test_util::util; + use crate::test_util::util::{file_exists, get_full_path}; #[test] fn test_get_title() { @@ -606,8 +537,9 @@ mod tests { mod set { use super::metadata::{get_meta, set_meta}; - use super::*; use crate::types; + use crate::test_util::util; + use crate::test_util::util::{file_exists, get_full_path}; #[test] fn test_set_title() { @@ -1143,6 +1075,8 @@ mod tests { mod pictures { use super::*; + use crate::test_util::util; + use crate::test_util::util::{file_exists, get_full_path}; #[test] fn test_get_picture() { diff --git a/src/properties.rs b/src/properties.rs index 90ed30b..b2531ac 100644 --- a/src/properties.rs +++ b/src/properties.rs @@ -21,3 +21,7 @@ pub fn get_duration(song_path: &String) -> Result Date: Fri, 4 Jul 2025 16:32:37 -0400 Subject: [PATCH 05/10] Added test --- src/meta.rs | 8 ++++---- src/properties.rs | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/meta.rs b/src/meta.rs index 85e00c2..eab3a79 100644 --- a/src/meta.rs +++ b/src/meta.rs @@ -276,11 +276,11 @@ pub mod metadata { #[cfg(test)] mod tests { - use super::*; + // use super::*; mod get { - use super::metadata::get_meta; + use super::super::metadata::get_meta; use crate::types; use crate::test_util::util; use crate::test_util::util::{file_exists, get_full_path}; @@ -536,7 +536,7 @@ mod tests { } mod set { - use super::metadata::{get_meta, set_meta}; + use super::super::metadata::{get_meta, set_meta}; use crate::types; use crate::test_util::util; use crate::test_util::util::{file_exists, get_full_path}; @@ -1074,7 +1074,7 @@ mod tests { mod pictures { - use super::*; + use super::super::*; use crate::test_util::util; use crate::test_util::util::{file_exists, get_full_path}; diff --git a/src/properties.rs b/src/properties.rs index b2531ac..c52f140 100644 --- a/src/properties.rs +++ b/src/properties.rs @@ -24,4 +24,31 @@ pub fn get_duration(song_path: &String) -> Result { + let filepath = test_util::util::get_full_path(&dir, &filename).unwrap(); + match super::get_duration(&filepath) { + Ok(duration) => { + let song_duration: u64 = 41; + let fetched_song_duration = duration.as_secs(); + + assert_eq!(song_duration, fetched_song_duration, "Durations should match, but they don't {song_duration} {fetched_song_duration} ({duration:?})"); + } + Err(err) => { + assert!(false, "Error: {err:?}"); + } + } + } + Err(err) => { + assert!(false, "Error: {err:?}"); + } + } + } } -- 2.43.0 From d652d8588dfa8912d4c5d9e76479298e30600af1 Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 4 Jul 2025 16:34:28 -0400 Subject: [PATCH 06/10] Warning changes --- src/lib.rs | 5 +---- src/meta.rs | 5 ++--- src/properties.rs | 28 +++++++++++++++------------- 3 files changed, 18 insertions(+), 20 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index c27f28d..287e3ce 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -34,10 +34,7 @@ pub mod test_util { let src_path = std::path::Path::new(source_path); let dest_path = std::path::Path::new(destination_path); - match std::fs::copy(src_path, dest_path) { - Ok(bytes) => Ok(bytes), - Err(err) => Err(err), - } + std::fs::copy(src_path, dest_path) } pub fn file_exists(directory: &String, filename: &String) -> Result { diff --git a/src/meta.rs b/src/meta.rs index eab3a79..7cb6088 100644 --- a/src/meta.rs +++ b/src/meta.rs @@ -278,12 +278,11 @@ mod tests { // use super::*; - mod get { use super::super::metadata::get_meta; - use crate::types; use crate::test_util::util; use crate::test_util::util::{file_exists, get_full_path}; + use crate::types; #[test] fn test_get_title() { @@ -537,9 +536,9 @@ mod tests { mod set { use super::super::metadata::{get_meta, set_meta}; - use crate::types; use crate::test_util::util; use crate::test_util::util::{file_exists, get_full_path}; + use crate::types; #[test] fn test_set_title() { diff --git a/src/properties.rs b/src/properties.rs index c52f140..288fb3c 100644 --- a/src/properties.rs +++ b/src/properties.rs @@ -2,23 +2,22 @@ use lofty::file::AudioFile; #[derive(Debug, Default, Clone)] pub struct Duration { - pub val: i32 + pub val: i32, } -pub fn get_duration(song_path: &String) -> Result { +pub fn get_duration(song_path: &String) -> Result { match std::fs::File::open(song_path) { - Ok(mut content) => match lofty::flac::FlacFile::read_from(&mut content, lofty::config::ParseOptions::new(),) { - Ok(flac_file) => { - let properties = flac_file.properties(); - Ok(properties.duration()) - } - Err(err) => { - Err(std::io::Error::other(err.to_string())) + Ok(mut content) => { + match lofty::flac::FlacFile::read_from(&mut content, lofty::config::ParseOptions::new()) + { + Ok(flac_file) => { + let properties = flac_file.properties(); + Ok(properties.duration()) + } + Err(err) => Err(std::io::Error::other(err.to_string())), } } - Err(err) => { - Err(err) - } + Err(err) => Err(err), } } @@ -39,7 +38,10 @@ mod tests { let song_duration: u64 = 41; let fetched_song_duration = duration.as_secs(); - assert_eq!(song_duration, fetched_song_duration, "Durations should match, but they don't {song_duration} {fetched_song_duration} ({duration:?})"); + assert_eq!( + song_duration, fetched_song_duration, + "Durations should match, but they don't {song_duration} {fetched_song_duration} ({duration:?})" + ); } Err(err) => { assert!(false, "Error: {err:?}"); -- 2.43.0 From 8e2eb8a1b184081471de163ac0eae08c3318ba78 Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 4 Jul 2025 16:39:59 -0400 Subject: [PATCH 07/10] Simplified some code --- src/lib.rs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 287e3ce..604646c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,7 +4,6 @@ pub mod types; pub mod test_util { pub mod util { - use std::io::{self, Write}; // Function to save a Vec to a file @@ -55,16 +54,14 @@ pub mod test_util { pub const TESTFILEDIRECTORY: &str = "tests/sample_tracks3"; pub fn get_filename(track: i32) -> String { - let mut filename = String::from("track"); + const FLAC_EXTENSION: &str = ".flac"; - if track < 10 { - filename += "0"; - filename += &track.to_string(); + let filename = if track < 10 { + format!("track0{}{}", track, FLAC_EXTENSION) } else { - filename += &track.to_string(); - } + format!("track{}{}", track, FLAC_EXTENSION) + }; - filename += ".flac"; filename } -- 2.43.0 From c14d3e5a51f6e912284e7c0b340f057ed338f7b6 Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 4 Jul 2025 16:40:23 -0400 Subject: [PATCH 08/10] Code refactoring --- src/lib.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 604646c..9d73013 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -56,13 +56,12 @@ pub mod test_util { pub fn get_filename(track: i32) -> String { const FLAC_EXTENSION: &str = ".flac"; - let filename = if track < 10 { + let filename = if track < 10 { format!("track0{}{}", track, FLAC_EXTENSION) } else { format!("track{}{}", track, FLAC_EXTENSION) }; - filename } } -- 2.43.0 From 6c6c22c83481abbb1877e8a07e50c841bf0cbe64 Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 4 Jul 2025 16:43:11 -0400 Subject: [PATCH 09/10] Removed some unused code --- src/meta.rs | 3 --- src/properties.rs | 5 ----- src/types.rs | 5 ----- 3 files changed, 13 deletions(-) diff --git a/src/meta.rs b/src/meta.rs index 7cb6088..b3e4174 100644 --- a/src/meta.rs +++ b/src/meta.rs @@ -275,9 +275,6 @@ pub mod metadata { #[cfg(test)] mod tests { - - // use super::*; - mod get { use super::super::metadata::get_meta; use crate::test_util::util; diff --git a/src/properties.rs b/src/properties.rs index 288fb3c..3e28031 100644 --- a/src/properties.rs +++ b/src/properties.rs @@ -1,10 +1,5 @@ use lofty::file::AudioFile; -#[derive(Debug, Default, Clone)] -pub struct Duration { - pub val: i32, -} - pub fn get_duration(song_path: &String) -> Result { match std::fs::File::open(song_path) { Ok(mut content) => { diff --git a/src/types.rs b/src/types.rs index 9abb612..05a30b0 100644 --- a/src/types.rs +++ b/src/types.rs @@ -32,11 +32,6 @@ impl MetadataType { } } -#[derive(Debug)] -pub enum Properties { - Duration, -} - pub fn all_metadata_types() -> Vec { vec![ Type::Album, -- 2.43.0 From 0bfdf8d827a838345c475e49a8d5dc677a61f0e3 Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 4 Jul 2025 16:45:02 -0400 Subject: [PATCH 10/10] Warning changes --- src/lib.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 9d73013..bbf790d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -56,13 +56,11 @@ pub mod test_util { pub fn get_filename(track: i32) -> String { const FLAC_EXTENSION: &str = ".flac"; - let filename = if track < 10 { - format!("track0{}{}", track, FLAC_EXTENSION) + if track < 10 { + format!("track0{track}{FLAC_EXTENSION}") } else { - format!("track{}{}", track, FLAC_EXTENSION) - }; - - filename + format!("track{track}{FLAC_EXTENSION}") + } } } } -- 2.43.0