mangofetch_core/core/
paths.rs1pub 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}