Skip to main content

mangofetch_core/core/
paths.rs

1pub fn app_data_dir() -> Option<std::path::PathBuf> {
2    if let Ok(dir) = std::env::var("MANGOFETCH_DATA_DIR") {
3        return Some(std::path::PathBuf::from(dir));
4    }
5
6    let base = dirs::data_dir()?;
7    let new_path = base.join("mangofetch");
8    let old_path = base.join("omniget");
9
10    if old_path.exists() {
11        let _ = std::fs::create_dir_all(&new_path);
12
13        for dir_name in &["bin", "plugins"] {
14            let src = old_path.join(dir_name);
15            let dst = new_path.join(dir_name);
16            if src.exists() && !dst.exists() {
17                let _ = copy_dir_recursive(&src, &dst);
18            }
19        }
20
21        if let Ok(entries) = std::fs::read_dir(&old_path) {
22            for entry in entries.flatten() {
23                if entry.file_type().map(|t| t.is_file()).unwrap_or(false) {
24                    let dest = new_path.join(entry.file_name());
25                    if !dest.exists() {
26                        let _ = std::fs::copy(entry.path(), &dest);
27                    }
28                }
29            }
30        }
31    }
32
33    Some(new_path)
34}
35
36fn copy_dir_recursive(src: &std::path::Path, dst: &std::path::Path) -> std::io::Result<()> {
37    if src.is_dir() {
38        std::fs::create_dir_all(dst)?;
39        for entry in std::fs::read_dir(src)? {
40            let entry = entry?;
41            let dest = dst.join(entry.file_name());
42            copy_dir_recursive(&entry.path(), &dest)?;
43        }
44    } else {
45        std::fs::copy(src, dst)?;
46    }
47    Ok(())
48}