use std::{
fs,
io::Read,
path::{Path, PathBuf},
};
use lunar_lib::config::Config;
use crate::{
config::CommonConfig, media_container::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 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()?;
let mut buf = [0_u8; 16];
file.read_exact(&mut buf).ok()?;
ContainerFormat::from_buf(&buf)?;
Some(f)
})
.collect()
})
.collect()
}
}