use anyhow::Result;
use std::fs;
use std::path::Path;
pub struct FileManager {
output_dir: String,
spine_name: String,
has_additional_files: bool, }
impl FileManager {
pub fn new(output_dir: &str, spine_name: &str, has_additional_files: bool) -> Self {
Self {
output_dir: output_dir.to_string(),
spine_name: spine_name.to_string(),
has_additional_files,
}
}
pub fn create_output_dirs(&self, count: u32) -> Result<()> {
if !Path::new(&self.output_dir).exists() {
fs::create_dir_all(&self.output_dir)?;
}
if !self.has_additional_files {
return Ok(());
}
for i in 1..=count {
let dir_name = if count > 99 {
format!("{}_{:03}", self.spine_name, i)
} else {
format!("{}_{:02}", self.spine_name, i)
};
let dir_path = format!("{}/{}", self.output_dir, dir_name);
if Path::new(&dir_path).exists() {
fs::remove_dir_all(&dir_path)?;
}
fs::create_dir_all(&dir_path)?;
}
Ok(())
}
pub fn copy_files(
&self,
dir_name: &str,
atlas_path: &str,
skel_path: &str,
has_atlas: bool,
has_skel: bool,
) -> Result<()> {
if !self.has_additional_files {
return Ok(());
}
let target_dir = format!("{}/{}", self.output_dir, dir_name);
if has_atlas {
let atlas_target = format!("{}/{}.atlas", target_dir, self.spine_name);
fs::copy(atlas_path, &atlas_target)?;
}
if has_skel {
let skel_target = format!("{}/{}.skel", target_dir, self.spine_name);
fs::copy(skel_path, &skel_target)?;
}
Ok(())
}
pub fn copy_spine_files(
&self,
dir_name: &str,
atlas_path: &str,
_png_path: &str,
skel_path: &str,
) -> Result<()> {
self.copy_files(dir_name, atlas_path, skel_path, true, true)
}
}