From b61aee0a6a338569e9894ca0e1b8720b5ba55a8e Mon Sep 17 00:00:00 2001 From: Serial <69764315+Serial-ATA@users.noreply.github.com> Date: Tue, 22 Mar 2022 17:32:31 -0400 Subject: [PATCH] Cleanup `cue` module Signed-off-by: Serial <69764315+Serial-ATA@users.noreply.github.com> --- src/cue.rs | 81 +++++++++++++++++++++++++++--------------------------- 1 file changed, 40 insertions(+), 41 deletions(-) diff --git a/src/cue.rs b/src/cue.rs index 09ad8e6..25431c9 100644 --- a/src/cue.rs +++ b/src/cue.rs @@ -32,7 +32,7 @@ pub fn parse(audio_path: &PathBuf, cue_path: &PathBuf) -> Vec { let mut resp: Vec = Vec::new(); match parse_from_file(&cue_path.to_string_lossy(), false) { - Ok(cue) => { + Ok(mut cue) => { let album = cue.title.unwrap_or(String::new()); let album_artist = cue.performer.unwrap_or(String::new()); let mut genre = String::new(); @@ -41,47 +41,45 @@ pub fn parse(audio_path: &PathBuf, cue_path: &PathBuf) -> Vec { genre = comment.1; } } - if 1 == cue.files.len() { - for file in cue.files { - for track in file.tracks { - match track.indices.get(0) { - Some((_, start)) => { - let mut track_path = audio_path.clone(); - let ext = audio_path.extension().unwrap().to_string_lossy(); - track_path.set_extension(format!( - "{}{}{}", - ext, - MARKER, - resp.len() + 1 - )); - let mut ctrack = CueTrack { - audio_path: audio_path.clone(), - track_path: track_path, - title: track.title.unwrap_or(String::new()), - artist: track.performer.unwrap_or(String::new()), - album_artist: album_artist.clone(), - album: album.clone(), - genre: genre.clone(), - start: start.clone(), - duration: Duration::new(LAST_TRACK_DURATION, 0), - }; - if ctrack.artist.is_empty() && !ctrack.album_artist.is_empty() { - ctrack.artist = ctrack.album_artist.clone(); - } - if ctrack.album.is_empty() { - let mut path = audio_path.clone(); - path.set_extension(""); - match path.file_name() { - Some(n) => { - ctrack.album = String::from(n.to_string_lossy()); - } - None => {} - } - } - resp.push(ctrack); + + if let Some(file) = cue.files.pop() { + for track in file.tracks { + match track.indices.get(0) { + Some((_, start)) => { + let mut track_path = audio_path.clone(); + let ext = audio_path.extension().unwrap().to_string_lossy(); + track_path.set_extension(format!( + "{}{}{}", + ext, + MARKER, + resp.len() + 1 + )); + + let mut ctrack = CueTrack { + audio_path: audio_path.clone(), + track_path, + title: track.title.unwrap_or_default(), + artist: track.performer.unwrap_or_default(), + album_artist: album_artist.clone(), + album: album.clone(), + genre: genre.clone(), + start: start.clone(), + duration: Duration::new(LAST_TRACK_DURATION, 0), + }; + + if ctrack.artist.is_empty() && !ctrack.album_artist.is_empty() { + ctrack.artist = ctrack.album_artist.clone(); } - None => {} + + if ctrack.album.is_empty() { + if let Some(name) = audio_path.file_name() { + ctrack.album = String::from(name.to_string_lossy()); + } + } + + resp.push(ctrack); } + None => {} } } } @@ -92,7 +90,7 @@ pub fn parse(audio_path: &PathBuf, cue_path: &PathBuf) -> Vec { } for i in 0..(resp.len() - 1) { - let mut next_start = Duration::new(0, 0); + let mut next_start = Duration::ZERO; if let Some(next) = resp.get(i + 1) { next_start = next.start; } @@ -100,5 +98,6 @@ pub fn parse(audio_path: &PathBuf, cue_path: &PathBuf) -> Vec { (*elem).duration = next_start - elem.start; } } + resp }