use crate::config::Config;
use anyhow::{Context, Result};
use log::debug;
use std::env;
use std::path::PathBuf;
enum AudioDirSource {
CliArgument(String),
EnvVar(String),
FromConfigFile(String),
Default,
}
pub fn get_audio_dir(cli_audio: Option<String>, config: &Config) -> Result<PathBuf> {
debug!("Determining audio directory...");
let config_audio_dir = config.audio_path.clone().filter(|s| !s.trim().is_empty());
let audio_dir_source = if let Some(cli_dir) = cli_audio {
debug!(
"Using audio directory provided via CLI argument: {}",
cli_dir
);
AudioDirSource::CliArgument(cli_dir)
} else if let Ok(env_dir) = env::var("FXP_VIDEOCLIPPER_AUDIO") {
debug!(
"Using audio directory from environment variable FXP_VIDEOCLIPPER_AUDIO: {}",
env_dir
);
AudioDirSource::EnvVar(env_dir)
} else if let Some(cfg_dir) = config_audio_dir {
debug!("Using audio directory from configuration file: {}", cfg_dir);
AudioDirSource::FromConfigFile(cfg_dir)
} else {
debug!("No audio directory provided. Defaulting to current directory.");
AudioDirSource::Default
};
let audio_dir = match audio_dir_source {
AudioDirSource::CliArgument(ref path)
| AudioDirSource::EnvVar(ref path)
| AudioDirSource::FromConfigFile(ref path) => {
if path.trim() == "None" {
debug!("Config file audio directory is 'None'. Defaulting to current directory.");
std::env::current_dir().context("Failed to get current directory")?
} else {
PathBuf::from(path)
}
}
AudioDirSource::Default => {
std::env::current_dir().context("Failed to get current directory")?
}
};
debug!("Resolved audio directory: {:?}", audio_dir);
Ok(audio_dir)
}