make download_from_youtube return Result

This commit is contained in:
Oleg Sobolev 2024-03-25 16:56:06 +07:00
parent cae6454f96
commit 91eca478c4

View file

@ -1,7 +1,10 @@
use crate::track::TrackInfo; use crate::track::TrackInfo;
use std::{path::Path, process::Command}; use std::{path::Path, process::Command};
pub fn download_from_youtube(url: &str) -> TrackInfo { #[derive(Debug, Clone, Copy)]
pub struct DownloadError;
pub fn download_from_youtube(url: &str) -> Result<TrackInfo, DownloadError> {
let output = Command::new("yt-dlp") let output = Command::new("yt-dlp")
.args([ .args([
"-o", "-o",
@ -16,10 +19,14 @@ pub fn download_from_youtube(url: &str) -> TrackInfo {
.output() .output()
.unwrap(); .unwrap();
if !output.stderr.is_empty() {
return Err(DownloadError);
}
let filename = std::str::from_utf8(output.stdout.as_slice()) let filename = std::str::from_utf8(output.stdout.as_slice())
.unwrap() .unwrap()
.replace('\n', "") .replace('\n', "")
+ ".mp3"; + ".mp3";
TrackInfo::new(&Path::new(filename.as_str())) Ok(TrackInfo::new(&Path::new(filename.as_str())))
} }