fixed excluding logic - now it works

This commit is contained in:
Daniel 2023-02-03 19:01:03 +01:00
parent ae0e8f6ebc
commit 61dcdb6e55
2 changed files with 25 additions and 6 deletions

View file

@ -22,11 +22,10 @@ impl FileSink {
} }
impl Open for FileSink { impl Open for FileSink {
// use the unwrap_or_else method instead of the if let statement to handle the absence of a path value
fn open(path: Option<String>, _audio_format: AudioFormat) -> Self { fn open(path: Option<String>, _audio_format: AudioFormat) -> Self {
let file = path.unwrap_or_else(|| panic!()); let file_path = path.unwrap_or_else(|| panic!());
FileSink { FileSink {
sink: file, sink: file_path,
content: Vec::new(), content: Vec::new(),
metadata: None metadata: None
} }

View file

@ -96,8 +96,28 @@ async fn download_tracks(session: &Session, destination: PathBuf, tracks: Vec<Sp
let path = joined_path.to_str().unwrap(); let path = joined_path.to_str().unwrap();
bar.set_message(full_track_name_clean.as_str()); bar.set_message(full_track_name_clean.as_str());
let path_with_no_extension = Path::new(path).with_extension("");
if !path_with_no_extension.exists() { let file_name = Path::new(path)
.file_stem()
.unwrap()
.to_str()
.unwrap();
let path_parent = Path::new(path).parent().unwrap();
let entries = path_parent.read_dir().unwrap();
let mut file_exists = false;
for entry in entries {
let entry = entry.unwrap();
let entry_path = entry.path();
let entry_file_name = entry_path.file_stem().unwrap().to_str().unwrap();
if entry_file_name == file_name {
file_exists = true;
break;
}
}
if !file_exists {
let mut file_sink = file_sink::FileSink::open(Some(path.to_owned()), librespot::playback::config::AudioFormat::S16); let mut file_sink = file_sink::FileSink::open(Some(path.to_owned()), librespot::playback::config::AudioFormat::S16);
file_sink.add_metadata(metadata); file_sink.add_metadata(metadata);
let (mut player, _) = Player::new(player_config.clone(), session.clone(), None, move || { let (mut player, _) = Player::new(player_config.clone(), session.clone(), None, move || {
@ -108,7 +128,7 @@ async fn download_tracks(session: &Session, destination: PathBuf, tracks: Vec<Sp
player.stop(); player.stop();
bar.inc(1); bar.inc(1);
} else { } else {
println!("File already exists: {}", path); // println!("File with the same name already exists, skipping: {}", path);
bar.inc(1); bar.inc(1);
} }
} }