diff --git a/src/main.rs b/src/main.rs index debd542..a20fc31 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,7 @@ pub mod api; pub mod auth; pub mod config; +pub mod metadata; pub mod util; pub const SECONDS_TO_SLEEP: u64 = 5; @@ -34,7 +35,6 @@ async fn main() -> Result<(), Box> { if app.token.token_expired() { println!("Token expired"); - // login_result.token_expired() app.token = match auth::get_refresh_token(&app).await { Ok(login_result) => login_result, Err(err) => { @@ -213,7 +213,7 @@ async fn some_work( println!("CoverArt path: {coverart_queue_path:?}"); - match apply_metadata(&song_queue_path, &coverart_queue_path, &metadata).await { + match metadata::apply_metadata(&song_queue_path, &coverart_queue_path, &metadata).await { Ok(_applied) => { match api::update_queued_song::update_queued_song( app, @@ -439,143 +439,3 @@ pub async fn generate_coverart_queue_dir_and_filename() -> (String, String) { (directory, filename) } - -pub async fn apply_metadata( - song_queue_path: &String, - coverart_queue_path: &String, - metadata: &api::get_metadata_queue::response::Metadata, -) -> Result { - // Apply metadata fields - let types = icarus_meta::types::all_metadata_types(); - - for t in types { - match t { - icarus_meta::types::Type::Album => { - let meta_type = - icarus_meta::types::MetadataType::from_string(metadata.album.clone()); - match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { - Ok(_) => {} - Err(_err) => { - return Err(_err); - } - } - } - icarus_meta::types::Type::AlbumArtist => { - let meta_type = - icarus_meta::types::MetadataType::from_string(metadata.album_artist.clone()); - match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { - Ok(_) => {} - Err(_err) => { - return Err(_err); - } - } - } - icarus_meta::types::Type::Artist => { - let meta_type = - icarus_meta::types::MetadataType::from_string(metadata.artist.clone()); - match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { - Ok(_) => {} - Err(_err) => { - return Err(_err); - } - } - } - icarus_meta::types::Type::Date => { - // TODO: Do something about this discrepancy - let meta_type = - icarus_meta::types::MetadataType::from_string(metadata.year.to_string()); - match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { - Ok(_) => {} - Err(_err) => { - return Err(_err); - } - } - } - icarus_meta::types::Type::Disc => { - let meta_type = icarus_meta::types::MetadataType::from_int(metadata.disc); - match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { - Ok(_) => {} - Err(_err) => { - return Err(_err); - } - } - } - icarus_meta::types::Type::Genre => { - let meta_type = - icarus_meta::types::MetadataType::from_string(metadata.genre.clone()); - match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { - Ok(_) => {} - Err(_err) => { - return Err(_err); - } - } - } - icarus_meta::types::Type::Title => { - let meta_type = - icarus_meta::types::MetadataType::from_string(metadata.title.clone()); - match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { - Ok(_) => {} - Err(_err) => { - return Err(_err); - } - } - } - icarus_meta::types::Type::Track => { - let meta_type = icarus_meta::types::MetadataType::from_int(metadata.track); - match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { - Ok(_) => {} - Err(_err) => { - return Err(_err); - } - } - } - icarus_meta::types::Type::TrackCount => { - let meta_type = icarus_meta::types::MetadataType::from_int(metadata.track_count); - match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { - Ok(_) => {} - Err(_err) => { - return Err(_err); - } - } - } - icarus_meta::types::Type::DiscCount => { - let meta_type = icarus_meta::types::MetadataType::from_int(metadata.disc_count); - match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { - Ok(_) => {} - Err(_err) => { - return Err(_err); - } - } - } - } - } - - // Apply coverart - match icarus_meta::meta::coverart::contains_coverart(song_queue_path) { - Ok((exists, size)) => { - if exists { - println!("Coverart exists: {size:?} size"); - match icarus_meta::meta::coverart::remove_coverart(song_queue_path) { - Ok(_data) => {} - Err(err) => { - return Err(err); - } - } - } - - match icarus_meta::meta::coverart::set_coverart(song_queue_path, coverart_queue_path) { - Ok(_data) => { - if _data.is_empty() { - println!("There was an issue"); - Ok(false) - } else { - println!("Success in applying coverart to song"); - Ok(true) - } - } - Err(err) => Err(err), - } - } - Err(err) => Err(err), - } -} diff --git a/src/metadata/mod.rs b/src/metadata/mod.rs new file mode 100644 index 0000000..150868c --- /dev/null +++ b/src/metadata/mod.rs @@ -0,0 +1,139 @@ +pub async fn apply_metadata( + song_queue_path: &String, + coverart_queue_path: &String, + metadata: &crate::api::get_metadata_queue::response::Metadata, +) -> Result { + // Apply metadata fields + let types = icarus_meta::types::all_metadata_types(); + + for t in types { + match t { + icarus_meta::types::Type::Album => { + let meta_type = + icarus_meta::types::MetadataType::from_string(metadata.album.clone()); + match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { + Ok(_) => {} + Err(_err) => { + return Err(_err); + } + } + } + icarus_meta::types::Type::AlbumArtist => { + let meta_type = + icarus_meta::types::MetadataType::from_string(metadata.album_artist.clone()); + match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { + Ok(_) => {} + Err(_err) => { + return Err(_err); + } + } + } + icarus_meta::types::Type::Artist => { + let meta_type = + icarus_meta::types::MetadataType::from_string(metadata.artist.clone()); + match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { + Ok(_) => {} + Err(_err) => { + return Err(_err); + } + } + } + icarus_meta::types::Type::Date => { + // TODO: Do something about this discrepancy + let meta_type = + icarus_meta::types::MetadataType::from_string(metadata.year.to_string()); + match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { + Ok(_) => {} + Err(_err) => { + return Err(_err); + } + } + } + icarus_meta::types::Type::Disc => { + let meta_type = icarus_meta::types::MetadataType::from_int(metadata.disc); + match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { + Ok(_) => {} + Err(_err) => { + return Err(_err); + } + } + } + icarus_meta::types::Type::Genre => { + let meta_type = + icarus_meta::types::MetadataType::from_string(metadata.genre.clone()); + match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { + Ok(_) => {} + Err(_err) => { + return Err(_err); + } + } + } + icarus_meta::types::Type::Title => { + let meta_type = + icarus_meta::types::MetadataType::from_string(metadata.title.clone()); + match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { + Ok(_) => {} + Err(_err) => { + return Err(_err); + } + } + } + icarus_meta::types::Type::Track => { + let meta_type = icarus_meta::types::MetadataType::from_int(metadata.track); + match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { + Ok(_) => {} + Err(_err) => { + return Err(_err); + } + } + } + icarus_meta::types::Type::TrackCount => { + let meta_type = icarus_meta::types::MetadataType::from_int(metadata.track_count); + match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { + Ok(_) => {} + Err(_err) => { + return Err(_err); + } + } + } + icarus_meta::types::Type::DiscCount => { + let meta_type = icarus_meta::types::MetadataType::from_int(metadata.disc_count); + match icarus_meta::meta::metadata::set_meta_value(t, song_queue_path, meta_type) { + Ok(_) => {} + Err(_err) => { + return Err(_err); + } + } + } + } + } + + // Apply coverart + match icarus_meta::meta::coverart::contains_coverart(song_queue_path) { + Ok((exists, size)) => { + if exists { + println!("Coverart exists: {size:?} size"); + match icarus_meta::meta::coverart::remove_coverart(song_queue_path) { + Ok(_data) => {} + Err(err) => { + return Err(err); + } + } + } + + match icarus_meta::meta::coverart::set_coverart(song_queue_path, coverart_queue_path) { + Ok(_data) => { + if _data.is_empty() { + println!("There was an issue"); + Ok(false) + } else { + println!("Success in applying coverart to song"); + Ok(true) + } + } + Err(err) => Err(err), + } + } + Err(err) => Err(err), + } +}