diff --git a/Cargo.lock b/Cargo.lock index 89c15e7..5bd15fa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -142,7 +142,7 @@ checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" [[package]] name = "icarus_models" -version = "0.6.2" +version = "0.6.3" dependencies = [ "josekit", "rand", diff --git a/Cargo.toml b/Cargo.toml index 16eb4de..6379891 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "icarus_models" -version = "0.6.2" +version = "0.6.3" edition = "2024" rust-version = "1.88" description = "models used for the icarus project" diff --git a/src/song.rs b/src/song.rs index 5735ee6..183d08b 100644 --- a/src/song.rs +++ b/src/song.rs @@ -7,6 +7,7 @@ use crate::constants; use crate::init; use crate::types; +/// Length of characters of a filename to be generated const FILENAME_LENGTH: i32 = 16; #[derive(Clone, Debug, Default, Deserialize, Serialize, utoipa::ToSchema)] @@ -92,7 +93,6 @@ impl Song { } } - /// Saves the song to the filesystem using the song's data pub fn save_to_filesystem(&self) -> Result<(), std::io::Error> { match self.song_path() { @@ -107,10 +107,25 @@ impl Song { } } - // TODO: Add function to remove file from the filesystem + /// Removes the song from the filesystem + pub fn remove_from_filesystem(&self) -> Result<(), std::io::Error> { + match self.song_path() { + Ok(song_path) => { + let p = std::path::Path::new(&song_path); + if p.exists() { + match std::fs::remove_file(&p) { + Ok(_) => Ok(()), + Err(err) => Err(err), + } + } else { + Ok(()) + } + } + Err(err) => Err(err), + } + } } - /// 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 { diff --git a/tests/tests.rs b/tests/tests.rs index aeff5fb..386940b 100644 --- a/tests/tests.rs +++ b/tests/tests.rs @@ -120,7 +120,7 @@ mod song_tests { } #[test] - fn test_save_song_to_filesystem() { + fn test_save_song_to_filesystem_and_remove() { let mut song = song::Song::default(); song.directory = utils::get_tests_directory(); song.filename = String::from("track02.flac"); @@ -132,7 +132,12 @@ mod song_tests { }; match song::io::copy_song(&song, &mut copied_song) { - Ok(_) => {} + Ok(_) => match copied_song.remove_from_filesystem() { + Ok(_) => {} + Err(err) => { + assert!(false, "Error: {err:?}") + } + }, Err(err) => { assert!(false, "Error: {err:?}") } @@ -142,7 +147,6 @@ mod song_tests { #[cfg(test)] mod album_tests { - use crate::utils; use icarus_models::album;