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