Skip to main content

Mountain/IPC/WindServiceHandlers/UI/
WorkspacesRemoveFolder.rs

1//! Wire method: `workspaces:removeFolder`.
2
3use std::sync::Arc;
4
5use serde_json::Value;
6
7use crate::{
8	ApplicationState::State::WorkspaceState::WorkspaceDelta::UpdateWorkspaceFoldersAndNotify,
9	RunTime::ApplicationRunTime::ApplicationRunTime,
10};
11
12pub async fn Fn(RunTime:Arc<ApplicationRunTime>, Arguments:Vec<Value>) -> Result<Value, String> {
13	let UriStr = Arguments
14		.first()
15		.and_then(|V| V.as_str())
16		.ok_or("workspaces:removeFolder requires uri as first argument".to_string())?
17		.to_string();
18
19	let Workspace = &RunTime.Environment.ApplicationState.Workspace;
20
21	let mut Folders = Workspace.GetWorkspaceFolders();
22
23	Folders.retain(|F| F.URI.to_string() != UriStr);
24
25	for (I, F) in Folders.iter_mut().enumerate() {
26		F.Index = I;
27	}
28
29	UpdateWorkspaceFoldersAndNotify(Workspace, Folders);
30
31	Ok(Value::Null)
32}