From 02b6157e0d52bda935f9f8353a9666a58af44386 Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 24 Oct 2025 16:19:38 +0000 Subject: [PATCH] tsk-79: Create function to generate CoverArt filename (#80) Closes #79 Reviewed-on: https://git.kundeng.us/phoenix/icarus_models/pulls/80 Co-authored-by: phoenix Co-committed-by: phoenix --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/coverart.rs | 37 +++++++++++++++++++++++++++++++++++++ src/song.rs | 4 +--- src/types.rs | 8 ++++++++ 5 files changed, 48 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ad462e4..1298cee 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -149,7 +149,7 @@ checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" [[package]] name = "icarus_models" -version = "0.8.0" +version = "0.8.1" dependencies = [ "josekit", "rand", diff --git a/Cargo.toml b/Cargo.toml index 615ee65..8c04753 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "icarus_models" -version = "0.8.0" +version = "0.8.1" edition = "2024" rust-version = "1.90" description = "models used for the icarus project" diff --git a/src/coverart.rs b/src/coverart.rs index 259ed35..0d50feb 100644 --- a/src/coverart.rs +++ b/src/coverart.rs @@ -1,7 +1,10 @@ use std::io::Write; +use rand::Rng; use serde::{Deserialize, Serialize}; +const FILENAME_LENGTH: i32 = 16; + #[derive(Clone, Debug, Default, Deserialize, Serialize, utoipa::ToSchema)] pub struct CoverArt { pub id: uuid::Uuid, @@ -89,6 +92,40 @@ impl CoverArt { } } +/// Generates filename for a CoverArt +pub fn generate_filename(typ: crate::types::CoverArtTypes, randomize: bool) -> String { + let file_extension = match typ { + crate::types::CoverArtTypes::PngExtension => { + String::from(crate::constants::file_extensions::image::PNGEXTENSION) + } + crate::types::CoverArtTypes::JpegExtension => { + String::from(crate::constants::file_extensions::image::JPEGEXTENSION) + } + crate::types::CoverArtTypes::JpgExtension => { + String::from(crate::constants::file_extensions::image::JPGEXTENSION) + } + }; + + if randomize { + let mut filename: String = String::new(); + let some_chars: String = String::from("abcdefghij0123456789"); + let some_chars_length = some_chars.len(); + let mut rng = rand::rng(); + + for _ in 0..FILENAME_LENGTH { + let index = rng.random_range(0..=some_chars_length); + let rando_char = some_chars.chars().nth(index); + + if let Some(c) = rando_char { + filename.push(c); + } + } + filename + &file_extension + } else { + "track-output".to_string() + &file_extension + } +} + pub mod io { use std::io::Read; diff --git a/src/song.rs b/src/song.rs index af0f209..5d5f35d 100644 --- a/src/song.rs +++ b/src/song.rs @@ -129,14 +129,12 @@ impl Song { } } -/// Generates a filename. In order to save a song to the filesystem, the song must have -/// a directory and filename +/// Generates a filename. In order to save a song to the filesystem pub fn generate_filename(typ: types::MusicTypes, randomize: bool) -> String { let file_extension = match typ { types::MusicTypes::DefaultMusicExtension => { String::from(constants::file_extensions::audio::DEFAULTMUSICEXTENSION) } - types::MusicTypes::WavExtension => { String::from(constants::file_extensions::audio::WAVEXTENSION) } diff --git a/src/types.rs b/src/types.rs index e518320..f9e145f 100644 --- a/src/types.rs +++ b/src/types.rs @@ -1,6 +1,14 @@ +#[derive(Debug)] pub enum MusicTypes { DefaultMusicExtension, WavExtension, FlacExtension, MPThreeExtension, } + +#[derive(Debug)] +pub enum CoverArtTypes { + PngExtension, + JpegExtension, + JpgExtension, +}