use std::{
fs,
path::{Path, PathBuf},
};
use lunar_lib::config::Config;
use crate::{
config::common::{CommonConfig, TranscodeSettings},
media_container::{Codec, ContainerFormat},
utils::recurse_list_from_root,
};
impl Config for CommonConfig {
const CONFIG_FILE_NAME: &'static str = "common";
fn config_dir() -> Option<&'static Path> {
Some(crate::config_dir())
}
}
impl CommonConfig {
#[must_use]
pub fn library_dir(&self) -> Option<&Path> {
self.library.library_directory.as_deref()
}
#[must_use]
pub fn sources(&self) -> &[PathBuf] {
&self.library.source_directories
}
#[must_use]
pub fn get_source_files(&self) -> Vec<PathBuf> {
self.library
.source_directories
.iter()
.flat_map(|path| -> Vec<PathBuf> {
recurse_list_from_root(path, false)
.filter_map(|f| {
let mut file = fs::File::open(&f).ok()?;
ContainerFormat::from_file(&mut file)?;
Some(f)
})
.collect()
})
.collect()
}
#[must_use]
pub fn transcode_to(
&self,
container_format: ContainerFormat,
codec: Codec,
) -> Option<TranscodeSettings> {
self.library
.transcode_options
.iter()
.find(|s| {
s.from_format.is_none_or(|c| c == container_format)
&& s.from_codec.is_none_or(|c| c == codec)
})
.copied()
}
}