Pour tout problème contactez-nous par mail : support@froggit.fr | La FAQ :grey_question: | Rejoignez-nous sur le Chat :speech_balloon:

Skip to content
Snippets Groups Projects
static_files.rs 1.89 KiB
Newer Older
peterrabbit's avatar
peterrabbit committed
use crate::app_state::AppState;
peterrabbit's avatar
peterrabbit committed
use std::path::PathBuf;

pub struct StaticFilesManager {
peterrabbit's avatar
peterrabbit committed
    dir: PathBuf,
peterrabbit's avatar
peterrabbit committed
    index: Vec<String>,
}

impl StaticFilesManager {
peterrabbit's avatar
peterrabbit committed
    fn create_dir_if_missing(app_dir: &PathBuf) -> Result<PathBuf, String> {
        let static_dir = app_dir.join("static");

        if !static_dir.exists() {
            match std::fs::create_dir_all(&static_dir) {
                Ok(_) => {
                    if let Err(err) = Self::copy_default(&static_dir) {
                        return Err(format!("{}", err));
                    }
                }
peterrabbit's avatar
peterrabbit committed
                Err(err) => return Err(format!("{}", err)),
            }
        }

peterrabbit's avatar
peterrabbit committed
        Ok(static_dir)
peterrabbit's avatar
peterrabbit committed
    fn copy_default(static_dir: &PathBuf) -> Result<(), String> {
        let local_default_static = std::env::current_dir().unwrap().join("default_static");
        let default_static = static_dir.join("default");
        match std::fs::create_dir_all(&default_static) {
            Err(err) => Err(format!("{}", err)),
            Ok(_) => {
                let mut copy_default_options = fs_extra::dir::CopyOptions::new();
                copy_default_options.content_only = true;
                match fs_extra::dir::copy(
                    local_default_static,
                    default_static,
                    &copy_default_options,
                ) {
                    Err(err) => Err(format!("{}", err)),
                    Ok(_) => Ok(()),
                }
            }
peterrabbit's avatar
peterrabbit committed
    pub fn new(app_state: &AppState) -> Result<Self, String> {
        match Self::create_dir_if_missing(&app_state.config.storage_dir) {
            Ok(dir) => Ok(StaticFilesManager {
                index: Vec::new(),
                dir,
            }),
            Err(msg) => Err(msg),
peterrabbit's avatar
peterrabbit committed
        }
    }

    pub fn build_index(&mut self) -> Result<(), String> {
        self.index.push("TODO".to_string());
        Ok(())
    }
}