Skip to main content

Mountain/IPC/WindServiceHandlers/UI/
WorkspacesAddFolder.rs

1#![allow(unused_variables)]
2
3//! Wire method: `workspaces:addFolder`.
4
5use 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}