diff --git a/Cargo.lock b/Cargo.lock index 4ac3d21..89c15e7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -142,7 +142,7 @@ checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" [[package]] name = "icarus_models" -version = "0.6.0" +version = "0.6.2" dependencies = [ "josekit", "rand", diff --git a/Cargo.toml b/Cargo.toml index 122c8ac..16eb4de 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "icarus_models" -version = "0.6.0" +version = "0.6.2" edition = "2024" rust-version = "1.88" description = "models used for the icarus project" diff --git a/src/song.rs b/src/song.rs index f5488fe..5735ee6 100644 --- a/src/song.rs +++ b/src/song.rs @@ -7,6 +7,8 @@ use crate::constants; use crate::init; use crate::types; +const FILENAME_LENGTH: i32 = 16; + #[derive(Clone, Debug, Default, Deserialize, Serialize, utoipa::ToSchema)] pub struct Song { #[serde(skip_serializing_if = "init::is_uuid_nil")] @@ -90,48 +92,6 @@ impl Song { } } - // TODO: Make this available as a function - pub fn generate_filename(&self, typ: types::MusicTypes, randomize: bool) -> String { - let mut filename: String = String::new(); - let filename_len = 10; - - 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) - } - types::MusicTypes::FlacExtension => { - String::from(constants::file_extensions::audio::FLACEXTENSION) - } - types::MusicTypes::MPThreeExtension => { - String::from(constants::file_extensions::audio::MPTHREEEXTENSION) - } - }; - - if randomize { - let some_chars: String = String::from("abcdefghij0123456789"); - let mut rng = rand::rng(); - - for _i in 0..filename_len { - let random_number: i32 = rng.random_range(0..=19); - let index = random_number as usize; - let rando_char = some_chars.chars().nth(index); - - if let Some(c) = rando_char { - filename.push(c); - } - } - } else { - filename += "track-output"; - } - - filename += &file_extension; - - filename - } /// Saves the song to the filesystem using the song's data pub fn save_to_filesystem(&self) -> Result<(), std::io::Error> { @@ -150,6 +110,45 @@ impl Song { // TODO: Add function to remove file from the filesystem } + +/// Generates a filename. In order to save a song to the filesystem, the song must have +/// a directory and filename +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) + } + types::MusicTypes::FlacExtension => { + String::from(constants::file_extensions::audio::FLACEXTENSION) + } + types::MusicTypes::MPThreeExtension => { + String::from(constants::file_extensions::audio::MPTHREEEXTENSION) + } + }; + + if randomize { + let mut filename: String = String::new(); + let some_chars: String = String::from("abcdefghij0123456789"); + let mut rng = rand::rng(); + + for _ in 0..FILENAME_LENGTH { + let index = rng.random_range(0..=19); + 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 + } +} + /// I/O operations for songs pub mod io { use std::io::Read; diff --git a/tests/tests.rs b/tests/tests.rs index d0a04df..aeff5fb 100644 --- a/tests/tests.rs +++ b/tests/tests.rs @@ -107,7 +107,7 @@ mod song_tests { }; assert_eq!(song.directory.is_empty(), false); - song_cpy.filename = song.generate_filename(types::MusicTypes::FlacExtension, true); + song_cpy.filename = song::generate_filename(types::MusicTypes::FlacExtension, true); println!("Directory: {:?}", song_cpy.directory); println!("File to be created: {:?}", song_cpy.filename);