From 302b1d2b7101a779dd80b8f1b98ea3babe578504 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 12 Apr 2025 12:08:04 -0400 Subject: [PATCH 01/14] Added code to get tag info --- src/lib.rs | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index b93cf3f..42df240 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,6 +2,52 @@ pub fn add(left: u64, right: u64) -> u64 { left + right } +mod meta_type { + pub enum Type { + Title, + Artist, + Album, + Genre, + Year, + Track, + } +} + +mod meta { + use super::*; + use taglib; + + pub fn get_meta(t: meta_type::Type, filepath: &String) -> Result { + match t { + meta_type::Type::Title => { + match get_file(filepath) { + Ok(file) => { + match get_tag(&file) { + Ok(tag) => { + match tag.title() { + Some(title) => Ok(title), + None => Err(taglib::FileError::NoAvailableTag) + } + } + Err(err) => Err(err) + } + } + Err(err) => Err(err) + } + } + _ => Err(taglib::FileError::InvalidFile), + } + } + + fn get_file(filepath: &String) -> Result { + taglib::File::new(filepath) + } + + fn get_tag(tag: &taglib::File) -> Result { + tag.tag() + } +} + #[cfg(test)] mod tests { use super::*; -- 2.43.0 From 50ada1d484ced44a5569535741d6ba91984e8db5 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 12 Apr 2025 12:20:57 -0400 Subject: [PATCH 02/14] Added test --- src/lib.rs | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 42df240..8a02f36 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -19,22 +19,16 @@ mod meta { pub fn get_meta(t: meta_type::Type, filepath: &String) -> Result { match t { - meta_type::Type::Title => { - match get_file(filepath) { - Ok(file) => { - match get_tag(&file) { - Ok(tag) => { - match tag.title() { - Some(title) => Ok(title), - None => Err(taglib::FileError::NoAvailableTag) - } - } - Err(err) => Err(err) - } - } - Err(err) => Err(err) - } - } + meta_type::Type::Title => match get_file(filepath) { + Ok(file) => match get_tag(&file) { + Ok(tag) => match tag.title() { + Some(title) => Ok(title), + None => Err(taglib::FileError::NoAvailableTag), + }, + Err(err) => Err(err), + }, + Err(err) => Err(err), + }, _ => Err(taglib::FileError::InvalidFile), } } @@ -57,4 +51,16 @@ mod tests { let result = add(2, 2); assert_eq!(result, 4); } + + #[test] + fn test_get_title() { + let filename = String::from("track01.flac"); + let dir = String::from("tests"); + let dir_path = std::path::Path::new(&dir); + let full_path = dir_path.join(filename); + + println!("Path: {:?}", full_path); + + assert!(full_path.exists(), "Path does not exists {:?}", full_path); + } } -- 2.43.0 From 5e52839256d7279ff3835572895b035749eeeb57 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 12 Apr 2025 12:21:42 -0400 Subject: [PATCH 03/14] Removed code --- src/lib.rs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 8a02f36..b20dcaf 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,7 +1,3 @@ -pub fn add(left: u64, right: u64) -> u64 { - left + right -} - mod meta_type { pub enum Type { Title, @@ -46,12 +42,6 @@ mod meta { mod tests { use super::*; - #[test] - fn it_works() { - let result = add(2, 2); - assert_eq!(result, 4); - } - #[test] fn test_get_title() { let filename = String::from("track01.flac"); -- 2.43.0 From faafbf52020632359cc02b863c7f860c960326ad Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 12 Apr 2025 12:45:02 -0400 Subject: [PATCH 04/14] Added more code --- src/lib.rs | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index b20dcaf..24dab37 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -38,6 +38,46 @@ mod meta { } } +mod meta_nouveaou { + use super::*; + + use metadata; + + pub fn get_meta(t: meta_type::Type, filepath: &String) -> Result { + match t { + meta_type::Type::Title => match new_meta(&filepath) { + Ok(metaa) => { + let mut result = String::new(); + + for item in metaa.tags { + result += &String::from(" "); + result += &item.0; + result += &item.1; + } + + Ok(result) + } + Err(err) => Err(err), + }, + /* + meta_type::Type::Title + meta_type::Type::Title + meta_type::Type::Title + meta_type::Type::Title + */ + _ => Err(std::io::Error::new( + std::io::ErrorKind::InvalidInput, + "Invalid", + )), + } + } + + fn new_meta(filepath: &String) -> Result { + let path = std::path::Path::new(&filepath); + metadata::MediaFileMetadata::new(&path) + } +} + #[cfg(test)] mod tests { use super::*; @@ -52,5 +92,16 @@ mod tests { println!("Path: {:?}", full_path); assert!(full_path.exists(), "Path does not exists {:?}", full_path); + let filepath = full_path.display().to_string(); + + match meta_nouveaou::get_meta(meta_type::Type::Title, &filepath) { + Ok(_title) => { + let found = _title.contains("Just"); + assert!(found, "Meta information was not found"); + } + Err(err) => { + assert!(false, "Error: {:?}", err); + } + } } } -- 2.43.0 From f424e8962cc7efa4fc3e4c10a615e896c3e2c7d9 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 12 Apr 2025 12:45:50 -0400 Subject: [PATCH 05/14] Added metadata dependency --- Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/Cargo.toml b/Cargo.toml index a18b9f7..a925774 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,4 +5,5 @@ edition = "2024" [dependencies] taglib = { version = "1.0.0" } +metadata = { version = "0.1.10" } icarus_models = { git = "ssh://git@git.kundeng.us/phoenix/icarus_models.git", tag = "v0.4.3" } -- 2.43.0 From 8555ca4ed28b16468ce4cec7342fb8e653866495 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 12 Apr 2025 12:51:53 -0400 Subject: [PATCH 06/14] Passing test --- src/lib.rs | 50 +++++++++++--------------------------------------- 1 file changed, 11 insertions(+), 39 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 24dab37..e8b9ce9 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -9,35 +9,6 @@ mod meta_type { } } -mod meta { - use super::*; - use taglib; - - pub fn get_meta(t: meta_type::Type, filepath: &String) -> Result { - match t { - meta_type::Type::Title => match get_file(filepath) { - Ok(file) => match get_tag(&file) { - Ok(tag) => match tag.title() { - Some(title) => Ok(title), - None => Err(taglib::FileError::NoAvailableTag), - }, - Err(err) => Err(err), - }, - Err(err) => Err(err), - }, - _ => Err(taglib::FileError::InvalidFile), - } - } - - fn get_file(filepath: &String) -> Result { - taglib::File::new(filepath) - } - - fn get_tag(tag: &taglib::File) -> Result { - tag.tag() - } -} - mod meta_nouveaou { use super::*; @@ -47,15 +18,16 @@ mod meta_nouveaou { match t { meta_type::Type::Title => match new_meta(&filepath) { Ok(metaa) => { - let mut result = String::new(); - for item in metaa.tags { - result += &String::from(" "); - result += &item.0; - result += &item.1; + if item.0 == "TITLE" { + return Ok(item.1); + } } - Ok(result) + Err(std::io::Error::new( + std::io::ErrorKind::InvalidData, + "Tag not found", + )) } Err(err) => Err(err), }, @@ -85,7 +57,7 @@ mod tests { #[test] fn test_get_title() { let filename = String::from("track01.flac"); - let dir = String::from("tests"); + let dir = String::from("tests/sample_tracks3"); let dir_path = std::path::Path::new(&dir); let full_path = dir_path.join(filename); @@ -95,9 +67,9 @@ mod tests { let filepath = full_path.display().to_string(); match meta_nouveaou::get_meta(meta_type::Type::Title, &filepath) { - Ok(_title) => { - let found = _title.contains("Just"); - assert!(found, "Meta information was not found"); + Ok(title) => { + let found = title == "Just roll it"; + assert!(found, "Meta information was not found {:?}", title); } Err(err) => { assert!(false, "Error: {:?}", err); -- 2.43.0 From 97808bbc1d2bd4d1072cfc87fa29d58bfbe86b9d Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 12 Apr 2025 12:52:18 -0400 Subject: [PATCH 07/14] Remove taglib dependency --- Cargo.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index a925774..3bc3eb5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,6 +4,5 @@ version = "0.1.0" edition = "2024" [dependencies] -taglib = { version = "1.0.0" } metadata = { version = "0.1.10" } icarus_models = { git = "ssh://git@git.kundeng.us/phoenix/icarus_models.git", tag = "v0.4.3" } -- 2.43.0 From d012f88cb51c94d8c97420d8472efbef88a1fca6 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 12 Apr 2025 13:08:34 -0400 Subject: [PATCH 08/14] Refactor --- src/lib.rs | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index e8b9ce9..846f80e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -18,6 +18,15 @@ mod meta_nouveaou { match t { meta_type::Type::Title => match new_meta(&filepath) { Ok(metaa) => { + match get_val(t, metaa.tags) { + Ok(val) => { + return Ok(val); + } + Err(err) => { + return Err(err); + } + } + /* for item in metaa.tags { if item.0 == "TITLE" { return Ok(item.1); @@ -28,6 +37,7 @@ mod meta_nouveaou { std::io::ErrorKind::InvalidData, "Tag not found", )) + */ } Err(err) => Err(err), }, @@ -44,6 +54,34 @@ mod meta_nouveaou { } } + fn get_type(t: meta_type::Type) -> Result { + match t { + meta_type::Type::Title => Ok("TITLE".to_string()), + meta_type::Type::Artist => Ok("ARTIST".to_string()), + meta_type::Type::Album => Ok("".to_string()), + meta_type::Type::Genre => Ok("".to_string()), + meta_type::Type::Year => Ok("".to_string()), + meta_type::Type::Track => Ok("".to_string()), + } + } + + fn get_val( + t: meta_type::Type, + tags: Vec<((String, String))>, + ) -> Result { + let type_ma: String = get_type(t).unwrap(); + for tag in tags { + if tag.0 == type_ma { + return Ok(tag.1); + } + } + + return Err(std::io::Error::new( + std::io::ErrorKind::InvalidInput, + "Invalid", + )); + } + fn new_meta(filepath: &String) -> Result { let path = std::path::Path::new(&filepath); metadata::MediaFileMetadata::new(&path) -- 2.43.0 From 4c427e618af80c86e1a369e0bab82ed128bbfa2e Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 12 Apr 2025 13:10:18 -0400 Subject: [PATCH 09/14] Cleanup --- src/lib.rs | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 846f80e..70cb004 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -26,18 +26,6 @@ mod meta_nouveaou { return Err(err); } } - /* - for item in metaa.tags { - if item.0 == "TITLE" { - return Ok(item.1); - } - } - - Err(std::io::Error::new( - std::io::ErrorKind::InvalidData, - "Tag not found", - )) - */ } Err(err) => Err(err), }, -- 2.43.0 From f2cd96c50c24016104b9117402434ae864d5ce16 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 12 Apr 2025 13:14:10 -0400 Subject: [PATCH 10/14] Added other types --- src/lib.rs | 77 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 62 insertions(+), 15 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 70cb004..4aed55e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -17,24 +17,71 @@ mod meta_nouveaou { pub fn get_meta(t: meta_type::Type, filepath: &String) -> Result { match t { meta_type::Type::Title => match new_meta(&filepath) { - Ok(metaa) => { - match get_val(t, metaa.tags) { - Ok(val) => { - return Ok(val); - } - Err(err) => { - return Err(err); - } + Ok(metaa) => match get_val(t, metaa.tags) { + Ok(val) => { + return Ok(val); } - } + Err(err) => { + return Err(err); + } + }, + Err(err) => Err(err), + }, + meta_type::Type::Artist => match new_meta(&filepath) { + Ok(metaa) => match get_val(t, metaa.tags) { + Ok(val) => { + return Ok(val); + } + Err(err) => { + return Err(err); + } + }, + Err(err) => Err(err), + }, + meta_type::Type::Album => match new_meta(&filepath) { + Ok(metaa) => match get_val(t, metaa.tags) { + Ok(val) => { + return Ok(val); + } + Err(err) => { + return Err(err); + } + }, + Err(err) => Err(err), + }, + meta_type::Type::Genre => match new_meta(&filepath) { + Ok(metaa) => match get_val(t, metaa.tags) { + Ok(val) => { + return Ok(val); + } + Err(err) => { + return Err(err); + } + }, + Err(err) => Err(err), + }, + meta_type::Type::Year => match new_meta(&filepath) { + Ok(metaa) => match get_val(t, metaa.tags) { + Ok(val) => { + return Ok(val); + } + Err(err) => { + return Err(err); + } + }, + Err(err) => Err(err), + }, + meta_type::Type::Track => match new_meta(&filepath) { + Ok(metaa) => match get_val(t, metaa.tags) { + Ok(val) => { + return Ok(val); + } + Err(err) => { + return Err(err); + } + }, Err(err) => Err(err), }, - /* - meta_type::Type::Title - meta_type::Type::Title - meta_type::Type::Title - meta_type::Type::Title - */ _ => Err(std::io::Error::new( std::io::ErrorKind::InvalidInput, "Invalid", -- 2.43.0 From a1d250a049d6427b59d97d2b562d5ed077a4dc36 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 12 Apr 2025 13:18:43 -0400 Subject: [PATCH 11/14] Refactor --- src/lib.rs | 75 +++++++++++++++--------------------------------------- 1 file changed, 21 insertions(+), 54 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 4aed55e..a006e31 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -12,80 +12,50 @@ mod meta_type { mod meta_nouveaou { use super::*; - use metadata; - pub fn get_meta(t: meta_type::Type, filepath: &String) -> Result { match t { - meta_type::Type::Title => match new_meta(&filepath) { + meta_type::Type::Title => match new_meta(filepath) { Ok(metaa) => match get_val(t, metaa.tags) { - Ok(val) => { - return Ok(val); - } - Err(err) => { - return Err(err); - } + Ok(val) => Ok(val), + Err(err) => Err(err), }, Err(err) => Err(err), }, - meta_type::Type::Artist => match new_meta(&filepath) { + meta_type::Type::Artist => match new_meta(filepath) { Ok(metaa) => match get_val(t, metaa.tags) { - Ok(val) => { - return Ok(val); - } - Err(err) => { - return Err(err); - } + Ok(val) => Ok(val), + Err(err) => Err(err), }, Err(err) => Err(err), }, - meta_type::Type::Album => match new_meta(&filepath) { + meta_type::Type::Album => match new_meta(filepath) { Ok(metaa) => match get_val(t, metaa.tags) { - Ok(val) => { - return Ok(val); - } - Err(err) => { - return Err(err); - } + Ok(val) => Ok(val), + Err(err) => Err(err), }, Err(err) => Err(err), }, - meta_type::Type::Genre => match new_meta(&filepath) { + meta_type::Type::Genre => match new_meta(filepath) { Ok(metaa) => match get_val(t, metaa.tags) { - Ok(val) => { - return Ok(val); - } - Err(err) => { - return Err(err); - } + Ok(val) => Ok(val), + Err(err) => Err(err), }, Err(err) => Err(err), }, - meta_type::Type::Year => match new_meta(&filepath) { + meta_type::Type::Year => match new_meta(filepath) { Ok(metaa) => match get_val(t, metaa.tags) { - Ok(val) => { - return Ok(val); - } - Err(err) => { - return Err(err); - } + Ok(val) => Ok(val), + Err(err) => Err(err), }, Err(err) => Err(err), }, - meta_type::Type::Track => match new_meta(&filepath) { + meta_type::Type::Track => match new_meta(filepath) { Ok(metaa) => match get_val(t, metaa.tags) { - Ok(val) => { - return Ok(val); - } - Err(err) => { - return Err(err); - } + Ok(val) => Ok(val), + Err(err) => Err(err), }, Err(err) => Err(err), }, - _ => Err(std::io::Error::new( - std::io::ErrorKind::InvalidInput, - "Invalid", - )), } } @@ -100,10 +70,7 @@ mod meta_nouveaou { } } - fn get_val( - t: meta_type::Type, - tags: Vec<((String, String))>, - ) -> Result { + fn get_val(t: meta_type::Type, tags: Vec<(String, String)>) -> Result { let type_ma: String = get_type(t).unwrap(); for tag in tags { if tag.0 == type_ma { @@ -111,10 +78,10 @@ mod meta_nouveaou { } } - return Err(std::io::Error::new( + Err(std::io::Error::new( std::io::ErrorKind::InvalidInput, "Invalid", - )); + )) } fn new_meta(filepath: &String) -> Result { -- 2.43.0 From 8ba11a60e7bf0baf137648ea3ee1919b15af3b8b Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 12 Apr 2025 13:21:05 -0400 Subject: [PATCH 12/14] Warning fixes --- src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index a006e31..1a2d6e3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,4 +1,4 @@ -mod meta_type { +pub mod meta_type { pub enum Type { Title, Artist, @@ -9,7 +9,7 @@ mod meta_type { } } -mod meta_nouveaou { +pub mod meta_nouveaou { use super::*; pub fn get_meta(t: meta_type::Type, filepath: &String) -> Result { -- 2.43.0 From ef7768d9c941153001446388d0d64834aaec6ec8 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 12 Apr 2025 13:25:33 -0400 Subject: [PATCH 13/14] Added dependency install workflow step --- .gitea/workflows/workflow.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/.gitea/workflows/workflow.yml b/.gitea/workflows/workflow.yml index 21ec691..79b5074 100644 --- a/.gitea/workflows/workflow.yml +++ b/.gitea/workflows/workflow.yml @@ -11,6 +11,24 @@ on: - devel jobs: + install_dependencies: + # runs-on: ubuntu-latest # Or similar Debian/Ubuntu based runner + runs-on: ubuntu-24.04 + container: rust:1.86.0 # Example using the official Rust image (Debian based) + steps: + - uses: actions/checkout@v3 # Or the Gitea equivalent checkout action + + - name: Install FFmpeg development libraries + run: | + apt-get update -y + apt-get install -y --no-install-recommends \ + libavutil-dev \ + libavformat-dev \ + libavcodec-dev \ + libswscale-dev \ + # Add other ffmpeg dev packages if needed by your specific crate + rm -rf /var/lib/apt/lists/* # Clean up + check: name: Check runs-on: ubuntu-24.04 -- 2.43.0 From ddf69ffdeb192ff9c843aaf8f5cc438e3a546df1 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 12 Apr 2025 13:29:57 -0400 Subject: [PATCH 14/14] Workflow fix --- .gitea/workflows/workflow.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.gitea/workflows/workflow.yml b/.gitea/workflows/workflow.yml index 79b5074..90ee13e 100644 --- a/.gitea/workflows/workflow.yml +++ b/.gitea/workflows/workflow.yml @@ -16,8 +16,6 @@ jobs: runs-on: ubuntu-24.04 container: rust:1.86.0 # Example using the official Rust image (Debian based) steps: - - uses: actions/checkout@v3 # Or the Gitea equivalent checkout action - - name: Install FFmpeg development libraries run: | apt-get update -y -- 2.43.0