From e5618fcd18e2faaa78f3cdacbeab0732e5141cc9 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 12 Apr 2025 02:16:33 +0000 Subject: [PATCH 1/7] Workflow changes (#7) Reviewed-on: https://git.kundeng.us/phoenix/icarus_meta/pulls/7 Co-authored-by: phoenix Co-committed-by: phoenix --- .gitea/workflows/tag_release.yml | 4 +--- .gitea/workflows/workflow.yml | 10 +++++----- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/.gitea/workflows/tag_release.yml b/.gitea/workflows/tag_release.yml index dab429f..cb4e556 100644 --- a/.gitea/workflows/tag_release.yml +++ b/.gitea/workflows/tag_release.yml @@ -5,8 +5,6 @@ on: branches: - main - devel - tags: - - 'v*' # Trigger on tags matching v* jobs: release: @@ -20,7 +18,7 @@ jobs: - name: Install Rust uses: actions-rs/toolchain@v1 with: - toolchain: 1.85.0 + toolchain: 1.86.0 components: cargo - name: Extract Version from Cargo.toml diff --git a/.gitea/workflows/workflow.yml b/.gitea/workflows/workflow.yml index 49dfdc3..21ec691 100644 --- a/.gitea/workflows/workflow.yml +++ b/.gitea/workflows/workflow.yml @@ -18,7 +18,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions-rust-lang/setup-rust-toolchain@v1 with: - toolchain: 1.85.0 + toolchain: 1.86.0 - run: | mkdir -p ~/.ssh echo "${{ secrets.MYREPO_TOKEN }}" > ~/.ssh/gitlab_deploy_key @@ -36,7 +36,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions-rust-lang/setup-rust-toolchain@v1 with: - toolchain: 1.85.0 + toolchain: 1.86.0 - run: | mkdir -p ~/.ssh echo "${{ secrets.MYREPO_TOKEN }}" > ~/.ssh/gitlab_deploy_key @@ -54,7 +54,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions-rust-lang/setup-rust-toolchain@v1 with: - toolchain: 1.85.0 + toolchain: 1.86.0 - run: rustup component add rustfmt - run: | mkdir -p ~/.ssh @@ -73,7 +73,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions-rust-lang/setup-rust-toolchain@v1 with: - toolchain: 1.85.0 + toolchain: 1.86.0 - run: rustup component add clippy - run: | mkdir -p ~/.ssh @@ -92,7 +92,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions-rust-lang/setup-rust-toolchain@v1 with: - toolchain: 1.85.0 + toolchain: 1.86.0 - run: | mkdir -p ~/.ssh echo "${{ secrets.MYREPO_TOKEN }}" > ~/.ssh/gitlab_deploy_key From b9da051438bf567ff3c092b1c1d4c1aaeaf5d666 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 12 Apr 2025 02:21:15 +0000 Subject: [PATCH 2/7] test_files (#6) Reviewed-on: https://git.kundeng.us/phoenix/icarus_meta/pulls/6 Co-authored-by: phoenix Co-committed-by: phoenix --- tests/sample_tracks3/track01.flac | Bin 0 -> 16402 bytes tests/sample_tracks3/track02.flac | Bin 0 -> 15484 bytes tests/sample_tracks3/track03.flac | Bin 0 -> 14175 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/sample_tracks3/track01.flac create mode 100644 tests/sample_tracks3/track02.flac create mode 100644 tests/sample_tracks3/track03.flac diff --git a/tests/sample_tracks3/track01.flac b/tests/sample_tracks3/track01.flac new file mode 100644 index 0000000000000000000000000000000000000000..eef4b8023a0a8e165c1c02f11bc59b57a7385fb8 GIT binary patch literal 16402 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 literal 0 HcmV?d00001 diff --git a/tests/sample_tracks3/track02.flac b/tests/sample_tracks3/track02.flac new file mode 100644 index 0000000000000000000000000000000000000000..88b5b90172e330c4159d1918a30f64212e81804f GIT binary patch literal 15484 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 PJkV-igZ%$i Date: Sat, 12 Apr 2025 02:33:31 +0000 Subject: [PATCH 3/7] Icarus-models update (#9) Reviewed-on: https://git.kundeng.us/phoenix/icarus_meta/pulls/9 Co-authored-by: phoenix Co-committed-by: phoenix --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 79ad9f1..a18b9f7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,4 +5,4 @@ edition = "2024" [dependencies] taglib = { version = "1.0.0" } -icarus_models = { git = "ssh://git@git.kundeng.us/phoenix/icarus_models.git", tag = "v0.2.0" } +icarus_models = { git = "ssh://git@git.kundeng.us/phoenix/icarus_models.git", tag = "v0.4.3" } From 0db41e55b43b39acdd0742e2849fde67484ab061 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 12 Apr 2025 17:31:15 +0000 Subject: [PATCH 4/7] Minimum rust version (#11) Reviewed-on: https://git.kundeng.us/phoenix/icarus_meta/pulls/11 Co-authored-by: phoenix Co-committed-by: phoenix --- Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/Cargo.toml b/Cargo.toml index a18b9f7..fa49de8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,6 +2,7 @@ name = "icarus_meta" version = "0.1.0" edition = "2024" +rust-version = "1.86" [dependencies] taglib = { version = "1.0.0" } From 84b9cf19b5744abe9274f84d2a6f1525ffd27060 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 12 Apr 2025 17:52:52 +0000 Subject: [PATCH 5/7] Added code to get tag info (#10) Reviewed-on: https://git.kundeng.us/phoenix/icarus_meta/pulls/10 Co-authored-by: phoenix Co-committed-by: phoenix --- .gitea/workflows/workflow.yml | 16 +++++ Cargo.toml | 2 +- src/lib.rs | 115 ++++++++++++++++++++++++++++++++-- 3 files changed, 127 insertions(+), 6 deletions(-) diff --git a/.gitea/workflows/workflow.yml b/.gitea/workflows/workflow.yml index 21ec691..90ee13e 100644 --- a/.gitea/workflows/workflow.yml +++ b/.gitea/workflows/workflow.yml @@ -11,6 +11,22 @@ 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: + - 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 diff --git a/Cargo.toml b/Cargo.toml index fa49de8..9971259 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,5 +5,5 @@ edition = "2024" rust-version = "1.86" [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" } diff --git a/src/lib.rs b/src/lib.rs index b93cf3f..1a2d6e3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,93 @@ -pub fn add(left: u64, right: u64) -> u64 { - left + right +pub mod meta_type { + pub enum Type { + Title, + Artist, + Album, + Genre, + Year, + Track, + } +} + +pub mod meta_nouveaou { + use super::*; + + 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) => Ok(val), + Err(err) => Err(err), + }, + Err(err) => Err(err), + }, + meta_type::Type::Artist => match new_meta(filepath) { + Ok(metaa) => match get_val(t, metaa.tags) { + Ok(val) => Ok(val), + Err(err) => Err(err), + }, + Err(err) => Err(err), + }, + meta_type::Type::Album => match new_meta(filepath) { + Ok(metaa) => match get_val(t, metaa.tags) { + Ok(val) => Ok(val), + Err(err) => Err(err), + }, + Err(err) => Err(err), + }, + meta_type::Type::Genre => match new_meta(filepath) { + Ok(metaa) => match get_val(t, metaa.tags) { + Ok(val) => Ok(val), + Err(err) => Err(err), + }, + Err(err) => Err(err), + }, + meta_type::Type::Year => match new_meta(filepath) { + Ok(metaa) => match get_val(t, metaa.tags) { + Ok(val) => Ok(val), + Err(err) => Err(err), + }, + Err(err) => Err(err), + }, + meta_type::Type::Track => match new_meta(filepath) { + Ok(metaa) => match get_val(t, metaa.tags) { + Ok(val) => Ok(val), + Err(err) => Err(err), + }, + Err(err) => Err(err), + }, + } + } + + 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); + } + } + + 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)] @@ -7,8 +95,25 @@ mod tests { use super::*; #[test] - fn it_works() { - let result = add(2, 2); - assert_eq!(result, 4); + fn test_get_title() { + let filename = String::from("track01.flac"); + let dir = String::from("tests/sample_tracks3"); + 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); + let filepath = full_path.display().to_string(); + + match meta_nouveaou::get_meta(meta_type::Type::Title, &filepath) { + Ok(title) => { + let found = title == "Just roll it"; + assert!(found, "Meta information was not found {:?}", title); + } + Err(err) => { + assert!(false, "Error: {:?}", err); + } + } } } From ed9cdf8d7ab825ba85463264e03c38269219c5d3 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 12 Apr 2025 18:37:00 +0000 Subject: [PATCH 6/7] workflow_fix (#12) Reviewed-on: https://git.kundeng.us/phoenix/icarus_meta/pulls/12 Co-authored-by: phoenix Co-committed-by: phoenix --- .gitea/workflows/workflow.yml | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/.gitea/workflows/workflow.yml b/.gitea/workflows/workflow.yml index 90ee13e..28ad362 100644 --- a/.gitea/workflows/workflow.yml +++ b/.gitea/workflows/workflow.yml @@ -11,22 +11,6 @@ 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: - - 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 @@ -116,5 +100,4 @@ jobs: ssh-keyscan ${{ vars.MYHOST }} >> ~/.ssh/known_hosts eval $(ssh-agent -s) ssh-add -v ~/.ssh/gitlab_deploy_key - cargo build --release - + cargo build --release \ No newline at end of file From 4a84fa15da725211678d835afa61db6a8e952ba0 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 12 Apr 2025 19:21:56 +0000 Subject: [PATCH 7/7] Dependency switch (#13) Reviewed-on: https://git.kundeng.us/phoenix/icarus_meta/pulls/13 Co-authored-by: phoenix Co-committed-by: phoenix --- Cargo.toml | 2 +- src/lib.rs | 168 +++++++++++++++++++++++++++-------------------------- 2 files changed, 87 insertions(+), 83 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 9971259..60c2c90 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,5 +5,5 @@ edition = "2024" rust-version = "1.86" [dependencies] -metadata = { version = "0.1.10" } +lofty = { version = "0.22.3" } icarus_models = { git = "ssh://git@git.kundeng.us/phoenix/icarus_models.git", tag = "v0.4.3" } diff --git a/src/lib.rs b/src/lib.rs index 1a2d6e3..e09f795 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -9,111 +9,115 @@ pub mod meta_type { } } -pub mod meta_nouveaou { - use super::*; +pub mod meta_next { + use lofty::file::AudioFile; - 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) => Ok(val), - Err(err) => Err(err), - }, - Err(err) => Err(err), - }, - meta_type::Type::Artist => match new_meta(filepath) { - Ok(metaa) => match get_val(t, metaa.tags) { - Ok(val) => Ok(val), - Err(err) => Err(err), - }, - Err(err) => Err(err), - }, - meta_type::Type::Album => match new_meta(filepath) { - Ok(metaa) => match get_val(t, metaa.tags) { - Ok(val) => Ok(val), - Err(err) => Err(err), - }, - Err(err) => Err(err), - }, - meta_type::Type::Genre => match new_meta(filepath) { - Ok(metaa) => match get_val(t, metaa.tags) { - Ok(val) => Ok(val), - Err(err) => Err(err), - }, - Err(err) => Err(err), - }, - meta_type::Type::Year => match new_meta(filepath) { - Ok(metaa) => match get_val(t, metaa.tags) { - Ok(val) => Ok(val), - Err(err) => Err(err), - }, - Err(err) => Err(err), - }, - meta_type::Type::Track => match new_meta(filepath) { - Ok(metaa) => match get_val(t, metaa.tags) { - Ok(val) => Ok(val), - Err(err) => Err(err), - }, - Err(err) => Err(err), - }, - } - } + use super::*; 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()), + meta_type::Type::Title => Ok("TITLE".to_owned()), + meta_type::Type::Artist => Ok("ARTIST".to_owned()), + meta_type::Type::Album => Ok("ALBUM".to_owned()), + meta_type::Type::Genre => Ok("GENRE".to_owned()), + meta_type::Type::Year => Ok("YEAR".to_owned()), + meta_type::Type::Track => Ok("TRACK".to_owned()), } } - 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); + pub fn get_meta(t: meta_type::Type, filepath: &String) -> Result { + match std::fs::File::open(filepath) { + Ok(mut content) => { + match lofty::flac::FlacFile::read_from( + &mut content, + lofty::config::ParseOptions::new(), + ) { + Ok(flac_file) => match flac_file.vorbis_comments() { + Some(vb) => { + let type_str: String = get_type(t).unwrap(); + match vb.get(&type_str) { + Some(val) => Ok(val.to_owned()), + None => Err(std::io::Error::new( + std::io::ErrorKind::InvalidData, + "Could not get tag data", + )), + } + } + None => Err(std::io::Error::new( + std::io::ErrorKind::InvalidData, + "No tags found", + )), + }, + Err(err) => Err(std::io::Error::new( + std::io::ErrorKind::InvalidData, + err.to_string(), + )), + } } + Err(err) => Err(err), } - - 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 util::{file_exists, get_full_path}; + use super::*; + mod util { + 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 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 fn test_file_directory() -> String { + String::from("tests/sample_tracks3") + } + } + #[test] fn test_get_title() { let filename = String::from("track01.flac"); - let dir = String::from("tests/sample_tracks3"); - let dir_path = std::path::Path::new(&dir); - let full_path = dir_path.join(filename); + let dir = util::test_file_directory(); - println!("Path: {:?}", full_path); + match file_exists(&dir, &filename) { + Ok(_) => { + let filepath = get_full_path(&dir, &filename).unwrap(); - 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 == "Just roll it"; - assert!(found, "Meta information was not found {:?}", title); + match meta_next::get_meta(meta_type::Type::Title, &filepath) { + Ok(title) => { + let found = title == "Just roll it"; + assert!(found, "Meta information was not found {:?}", title); + } + Err(err) => { + assert!(false, "Error: {:?}", err); + } + } } Err(err) => { - assert!(false, "Error: {:?}", err); + assert!(false, "Error: File does not exist {:?}", err.to_string()); } - } + }; } }