Skip to main content

Mountain/IPC/WindServiceHandlers/Utilities/UserdataDir/
Ensure.rs

1#![allow(unused_variables, dead_code, unused_imports)]
2
3//! First-access scaffolding: creates userdata directories and default files.
4//! Idempotent - the atomic flag skips the walk after the first pass.
5
6use crate::dev_log;
7
8pub fn Fn() {
9	if super::INITIALIZED.swap(true, std::sync::atomic::Ordering::Relaxed) {
10		return;
11	}
12
13	let Base = super::Get::Fn();
14
15	let Dirs = [
16		format!("{}/User", Base),
17		format!("{}/User/globalStorage", Base),
18		format!("{}/User/profiles/__default__profile__", Base),
19		format!("{}/User/snippets", Base),
20		format!("{}/User/prompts", Base),
21		format!("{}/User/cacheHome", Base),
22		format!("{}/logs", Base),
23		format!("{}/User/workspaceStorage", Base),
24		format!(
25			"{}/CachedConfigurations/defaults/__default__profile__-configurationDefaultsOverrides",
26			Base
27		),
28	];
29
30	for Dir in &Dirs {
31		if let Err(E) = std::fs::create_dir_all(Dir) {
32			dev_log!("lifecycle", "Failed to create userdata dir {}: {}", Dir, E);
33		}
34	}
35
36	let DefaultFiles = [
37		(format!("{}/User/settings.json", Base), "{}"),
38		(format!("{}/User/keybindings.json", Base), "[]"),
39		(format!("{}/User/tasks.json", Base), "{}"),
40		(format!("{}/User/extensions.json", Base), "[]"),
41		(format!("{}/User/mcp.json", Base), "{}"),
42	];
43
44	for (FilePath, DefaultContent) in &DefaultFiles {
45		if !std::path::Path::new(FilePath).exists() {
46			if let Err(E) = std::fs::write(FilePath, DefaultContent) {
47				dev_log!("lifecycle", "Failed to create default file {}: {}", FilePath, E);
48			}
49		}
50	}
51
52	dev_log!("lifecycle", "userdata dirs initialized at: {}/User/", Base);
53}