use std::process::{Command, Stdio};
pub fn check_dependencies() -> Result<(), Vec<String>> {
let mut missing = Vec::new();
let yt_dlp_status = Command::new("yt-dlp")
.arg("--version")
.stdout(Stdio::null())
.stderr(Stdio::null())
.status();
if yt_dlp_status.map(|s| !s.success()).unwrap_or(true) {
missing.push("yt-dlp is not installed or not accessible.".to_string());
}
let ffmpeg_status = Command::new("ffmpeg")
.arg("-version")
.stdout(Stdio::null())
.stderr(Stdio::null())
.status();
if ffmpeg_status.map(|s| !s.success()).unwrap_or(true) {
missing.push("ffmpeg is not installed or not accessible.".to_string());
}
if missing.is_empty() {
Ok(())
} else {
Err(missing)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
#[ignore] fn test_check_dependencies_with_both_installed() {
let result = check_dependencies();
assert!(
result.is_ok(),
"Expected both dependencies to be available, but got: {:?}",
result.err()
);
}
#[test]
#[ignore] fn test_check_dependencies_returns_empty_on_success() {
let result = check_dependencies();
if let Err(errors) = &result {
for error in errors {
eprintln!("Missing dependency: {}", error);
}
}
assert!(result.is_ok());
}
}