Compare commits

...

8 Commits

Author SHA1 Message Date
b96451bee5 tsk-44: Code formatting
Some checks are pending
Rust Build / Check (pull_request) Waiting to run
Rust Build / Test Suite (pull_request) Blocked by required conditions
Rust Build / Rustfmt (pull_request) Blocked by required conditions
Rust Build / Clippy (pull_request) Blocked by required conditions
Rust Build / build (pull_request) Blocked by required conditions
2025-10-20 20:55:07 -04:00
bfb7df2d03 tsk-44: Test changes 2025-10-20 20:54:51 -04:00
ff3171d9e7 tsk-44: Updating tests 2025-10-20 20:54:36 -04:00
4df6855ca4 tsk-44: Added rand crate 2025-10-20 20:54:21 -04:00
ab15fbcd1f tsk-44: Adding test 2025-10-20 20:33:45 -04:00
3055371248 tsk-44: cargo update 2025-10-20 20:24:08 -04:00
580d73eeb8 tsk-44: Added detection module
Some checks failed
Rust Build / Clippy (pull_request) Successful in 1m5s
Rust Build / Test Suite (pull_request) Successful in 58s
Rust Build / Check (pull_request) Successful in 47s
Rust Build / build (pull_request) Successful in 1m5s
Rust Build / Rustfmt (pull_request) Failing after 1m19s
2025-10-20 20:19:37 -04:00
9e30c6db00 tsk-44: Added imghdr crate 2025-10-20 20:06:30 -04:00
6 changed files with 137 additions and 23 deletions

93
Cargo.lock generated
View File

@@ -10,9 +10,9 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
[[package]]
name = "bitflags"
version = "2.9.4"
version = "2.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394"
checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3"
[[package]]
name = "byteorder"
@@ -22,9 +22,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
[[package]]
name = "cfg-if"
version = "1.0.3"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9"
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
[[package]]
name = "crc32fast"
@@ -69,24 +69,32 @@ dependencies = [
[[package]]
name = "getrandom"
version = "0.3.3"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
dependencies = [
"cfg-if",
"libc",
"r-efi",
"wasi",
"wasip2",
]
[[package]]
name = "icarus_meta"
version = "0.4.0"
dependencies = [
"imghdr",
"lofty",
"rand",
"tempfile",
]
[[package]]
name = "imghdr"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8b35f3ad95576ac81603375dfe47a0450b70a368aa34d2b6e5bb0a0d7f02428"
[[package]]
name = "libc"
version = "0.2.177"
@@ -162,6 +170,15 @@ version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
[[package]]
name = "ppv-lite86"
version = "0.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
dependencies = [
"zerocopy",
]
[[package]]
name = "proc-macro2"
version = "1.0.101"
@@ -186,6 +203,35 @@ version = "5.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
[[package]]
name = "rand"
version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
dependencies = [
"rand_chacha",
"rand_core",
]
[[package]]
name = "rand_chacha"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
dependencies = [
"ppv-lite86",
"rand_core",
]
[[package]]
name = "rand_core"
version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
dependencies = [
"getrandom",
]
[[package]]
name = "rustix"
version = "1.1.2"
@@ -207,9 +253,9 @@ checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
[[package]]
name = "syn"
version = "2.0.106"
version = "2.0.107"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6"
checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b"
dependencies = [
"proc-macro2",
"quote",
@@ -235,15 +281,6 @@ version = "1.0.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d"
[[package]]
name = "wasi"
version = "0.14.7+wasi-0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c"
dependencies = [
"wasip2",
]
[[package]]
name = "wasip2"
version = "1.0.1+wasi-0.2.4"
@@ -273,3 +310,23 @@ name = "wit-bindgen"
version = "0.46.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
[[package]]
name = "zerocopy"
version = "0.8.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c"
dependencies = [
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
version = "0.8.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831"
dependencies = [
"proc-macro2",
"quote",
"syn",
]

View File

@@ -6,6 +6,8 @@ rust-version = "1.90"
[dependencies]
lofty = { version = "0.22.4" }
imghdr = { version = "0.7.0" }
rand = { version = "0.9.2" }
[dev-dependencies]
tempfile = { version = "3.23.0" }

32
src/detection/coverart.rs Normal file
View File

@@ -0,0 +1,32 @@
/// Gets the file type of a CoverArt given it's path
pub fn file_type(filepath: &str) -> Result<String, std::io::Error> {
match imghdr::from_file(filepath) {
Ok(Some(imghdr::Type::Jpeg)) => Ok(String::from("jpeg")),
Ok(Some(imghdr::Type::Png)) => Ok(String::from("png")),
Ok(None) => Err(std::io::Error::other("Image file not supported")),
Err(err) => Err(err),
_ => Err(std::io::Error::other("Image file not supported")),
}
}
#[cfg(test)]
mod tests {
#[test]
fn test_coverart_file_type() {
let directory = String::from(crate::test_util::util::TESTFILEDIRECTORY);
let filename = String::from("Sample Tracks 3.png");
let filepath = format!("{directory}/{filename}");
match super::file_type(&filepath) {
Ok(filetype) => {
assert_eq!(
filetype, "png",
"The file type of the CoverArt should have been png"
);
}
Err(err) => {
assert!(false, "Error: {err:?}");
}
}
}
}

1
src/detection/mod.rs Normal file
View File

@@ -0,0 +1 @@
pub mod coverart;

View File

@@ -1,3 +1,4 @@
pub mod detection;
pub mod meta;
pub mod properties;
pub mod types;
@@ -6,6 +7,8 @@ pub mod test_util {
pub mod util {
use std::io::{self, Write};
use rand::Rng;
// Function to save a Vec<u8> to a file
pub fn save_bytes_to_file(bytes: &[u8], file_path: &String) -> io::Result<()> {
let file = std::path::Path::new(file_path);
@@ -43,6 +46,25 @@ pub mod test_util {
}
}
pub fn generate_filename() -> Result<String, std::io::Error> {
let mut filename = String::from("track-");
let length = 20;
let characters = "abcdef0123456789";
let amount_of_characters = characters.len() - 1;
let mut rng = rand::rng();
for _ in 0..length {
let index = rng.random_range(0..=amount_of_characters);
let random_c = characters.chars().nth(index);
if let Some(c) = random_c {
filename.push(c);
}
}
Ok(format!("{filename}.flac"))
}
fn path_buf(
directory: &String,
filename: &String,

View File

@@ -544,7 +544,7 @@ mod tests {
let temp_file = tempfile::tempdir().expect("Could not create test directory");
let test_dir = String::from(temp_file.path().to_str().unwrap());
let test_filename = String::from("track08.flac");
let test_filename = util::generate_filename().unwrap();
let new_filepath = test_dir + "/" + &test_filename;
match file_exists(&dir, &filename) {
@@ -597,7 +597,7 @@ mod tests {
let temp_file = tempfile::tempdir().expect("Could not create test directory");
let test_dir = String::from(temp_file.path().to_str().unwrap());
let test_filename = String::from("track08.flac");
let test_filename = util::generate_filename().unwrap();
let new_filepath = test_dir + "/" + &test_filename;
match file_exists(&dir, &filename) {
@@ -806,7 +806,7 @@ mod tests {
let temp_file = tempfile::tempdir().expect("Could not create test directory");
let test_dir = String::from(temp_file.path().to_str().unwrap());
let test_filename = String::from("track08.flac");
let test_filename = util::generate_filename().unwrap();
let new_filepath = test_dir + "/" + &test_filename;
match file_exists(&dir, &filename) {
@@ -907,7 +907,7 @@ mod tests {
let temp_file = tempfile::tempdir().expect("Could not create test directory");
let test_dir = String::from(temp_file.path().to_str().unwrap());
let test_filename = String::from("track08.flac");
let test_filename = util::generate_filename().unwrap();
let new_filepath = test_dir + "/" + &test_filename;
match file_exists(&dir, &filename) {
@@ -1021,7 +1021,7 @@ mod tests {
let temp_file = tempfile::tempdir().expect("Could not create test directory");
let test_dir = String::from(temp_file.path().to_str().unwrap());
let test_filename = String::from("track08.flac");
let test_filename = util::generate_filename().unwrap();
let new_filepath = test_dir + "/" + &test_filename;
match file_exists(&dir, &filename) {