Mountain/Binary/Extension/
ScanPathConfigure.rs1use std::path::PathBuf;
6
7use crate::{
8 ApplicationState::{ApplicationState, MapLockError},
9 dev_log,
10};
11
12pub fn ScanPathConfigure(AppState:&std::sync::Arc<ApplicationState>) -> Result<Vec<PathBuf>, String> {
33 dev_log!("extensions", "[Extensions] [ScanPaths] Locking ExtensionScanPaths...");
34
35 let mut ScanPathsGuard = AppState
36 .Extension
37 .Registry
38 .ExtensionScanPaths
39 .lock()
40 .map_err(MapLockError)
41 .map_err(|e| format!("Failed to lock ExtensionScanPaths: {}", e))?;
42
43 dev_log!("extensions", "[Extensions] [ScanPaths] Adding default scan paths...");
44
45 if let Ok(ExecutableDirectory) = std::env::current_exe() {
47 if let Some(Parent) = ExecutableDirectory.parent() {
48 let ResourcesPath = Parent.join("../Resources/extensions");
52 dev_log!("extensions", "[Extensions] [ScanPaths] + {}", ResourcesPath.display());
53 ScanPathsGuard.push(ResourcesPath);
54
55 let ResourcesAppPath = Parent.join("../Resources/app/extensions");
59 dev_log!("extensions", "[Extensions] [ScanPaths] + {}", ResourcesAppPath.display());
60 ScanPathsGuard.push(ResourcesAppPath);
61
62 let LocalPath = Parent.join("extensions");
64 dev_log!("extensions", "[Extensions] [ScanPaths] + {}", LocalPath.display());
65 ScanPathsGuard.push(LocalPath);
66
67 #[cfg(debug_assertions)]
72 {
73 let SkyTargetPath = Parent.join("../../../Sky/Target/Static/Application/extensions");
76 if SkyTargetPath.exists() {
77 dev_log!(
78 "extensions",
79 "[Extensions] [ScanPaths] + {} (Sky Target, dev)",
80 SkyTargetPath.display()
81 );
82 ScanPathsGuard.push(SkyTargetPath);
83 }
84
85 let DependencyPath = Parent.join("../../../../Dependency/Microsoft/Dependency/Editor/extensions");
88 if DependencyPath.exists() {
89 dev_log!(
90 "extensions",
91 "[Extensions] [ScanPaths] + {} (VS Code Dependency, dev)",
92 DependencyPath.display()
93 );
94 ScanPathsGuard.push(DependencyPath);
95 }
96 }
97 }
98 }
99
100 if let Some(HomeDirectory) = dirs::home_dir() {
104 let UserExtensionPath = HomeDirectory.join(".land/extensions");
105 dev_log!(
106 "extensions",
107 "[Extensions] [ScanPaths] + {} (User)",
108 UserExtensionPath.display()
109 );
110 ScanPathsGuard.push(UserExtensionPath);
111 }
112
113 let ScanPaths = ScanPathsGuard.clone();
114
115 dev_log!("extensions", "[Extensions] [ScanPaths] Configured: {:?}", ScanPaths);
116
117 Ok(ScanPaths)
118}