Files
songparser/src/metadata/mod.rs
phoenix 3bb7fb1010
All checks were successful
Rust Build / Check (push) Successful in 34s
Rust Build / Test Suite (push) Successful in 34s
Rust Build / Rustfmt (push) Successful in 30s
Rust Build / Clippy (push) Successful in 36s
Rust Build / build (push) Successful in 40s
tsk-55: Utilize the expiration methods in icarus_models (#59)
Closes #55

Reviewed-on: #59
Co-authored-by: phoenix <kundeng00@pm.me>
Co-committed-by: phoenix <kundeng00@pm.me>
2025-10-20 17:45:05 +00:00

140 lines
5.5 KiB
Rust

pub async fn apply_metadata(
song_queue_path: &String,
coverart_queue_path: &String,
metadata: &crate::api::get_metadata_queue::response::Metadata,
) -> Result<bool, std::io::Error> {
// 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),
}
}