Mountain/IPC/WindServiceHandlers/UI/
WorkspacesAddFolder.rs1use std::sync::Arc;
4
5use serde_json::Value;
6
7use crate::{
8 ApplicationState::{
9 DTO::WorkspaceFolderStateDTO::WorkspaceFolderStateDTO,
10 State::WorkspaceState::WorkspaceDelta::UpdateWorkspaceFoldersAndNotify,
11 },
12 IPC::WindServiceHandlers::Utilities::JsonValueHelpers::arg_string,
13 RunTime::ApplicationRunTime::ApplicationRunTime,
14};
15
16pub async fn Fn(RunTime:Arc<ApplicationRunTime>, Arguments:Vec<Value>) -> Result<Value, String> {
17 use url::Url;
18
19 let UriStr = Arguments
20 .first()
21 .and_then(|V| V.as_str())
22 .ok_or("workspaces:addFolder requires uri as first argument".to_string())?
23 .to_string();
24
25 let Name = arg_string(&Arguments, 1);
26
27 let Workspace = &RunTime.Environment.ApplicationState.Workspace;
28
29 let mut Folders = Workspace.GetWorkspaceFolders();
30
31 let Index = Folders.len();
32
33 let URI = Url::parse(&UriStr).map_err(|E| format!("workspaces:addFolder invalid URI: {}", E))?;
34
35 if let Ok(Folder) = WorkspaceFolderStateDTO::New(URI, Name, Index) {
36 Folders.push(Folder);
37
38 UpdateWorkspaceFoldersAndNotify(Workspace, Folders);
39 }
40
41 Ok(Value::Null)
42}