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}