Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
dennykorsukewitz committed Feb 5, 2024
1 parent 9126404 commit 87bd810
Showing 1 changed file with 81 additions and 66 deletions.
147 changes: 81 additions & 66 deletions src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,18 @@ export function activate(context: vscode.ExtensionContext) {
initAddFolderToWorkspace(context);

// This function removes the selected folder from workspace (VSC Workspace).
initRemoveFolderFromWorkspace(context);
// initRemoveFolderFromWorkspace(context);
}

function initAddFolderToWorkspace(context: vscode.ExtensionContext) {

const addFolderToWorkspaceId = 'addFolderToWorkspace';
context.subscriptions.push(vscode.commands.registerCommand(addFolderToWorkspaceId, async () => {

let workspaceDirectories = [],
newWorkspaceFound = 0,
manualWorkspace = '',
manualDirectoryString = '-- Add manually a directory --';
let workspaceDirectories: string[] = [],
newWorkspaceFound : Boolean = false,
manualWorkspace : string | undefined = '',
manualDirectoryString : string = '-- Add manually a directory --';

let config = vscode.workspace.getConfiguration('addFolderToWorkspace');

Expand All @@ -37,19 +37,11 @@ function initAddFolderToWorkspace(context: vscode.ExtensionContext) {
return;
}

// Get all stored workspaces / directories.
workspaceDirectories = await getWorkspaceDirectories();


// Add all stored workspaces / directories.
workspaceDirectories = config.workspaces || [];

// Get all first level directories from given directories.
config.recursiveWorkspaces.forEach(myWorkspace => {
let workspaceDirectory = fs.readdirSync(myWorkspace, { withFileTypes: true })
.filter(dir => dir.isDirectory())
.map(dir => myWorkspace + dir.name);

workspaceDirectories = workspaceDirectories.concat(workspaceDirectory);
})
console.log('workspaceDirectories getWorkspaceDirectories');
console.log(workspaceDirectories);

// Check if directories are defined.
if (!workspaceDirectories.length) {
Expand All @@ -67,13 +59,13 @@ function initAddFolderToWorkspace(context: vscode.ExtensionContext) {
title: 'AddFolderToWorkspace',
placeHolder: 'AddFolderToWorkspace: Select a folder...',
canPickMany: true,
})
if (!workspaces) return;
});
if (!workspaces) {return;}

if (workspaces.length && workspaces.includes(manualDirectoryString)) {

workspaces.shift(manualDirectoryString);
newWorkspaceFound = 1;
workspaces.shift();
newWorkspaceFound = true;

manualWorkspace = await vscode.window.showInputBox({
title: 'AddFolderToWorkspace',
Expand All @@ -84,7 +76,7 @@ function initAddFolderToWorkspace(context: vscode.ExtensionContext) {
workspaces.push(manualWorkspace);
}
}
if (!workspaces) return;
if (!workspaces) {return;}

let workspaceURIs = [];
for await (const workspace of workspaces) {
Expand All @@ -93,23 +85,23 @@ function initAddFolderToWorkspace(context: vscode.ExtensionContext) {
let URI = vscode.Uri.file(workspace),
URIexists = 0;

if (!URI) return;
if (!URI) {return;}

if (vscode.workspace.workspaceFolders) {
vscode.workspace.workspaceFolders.sort().forEach(function (workspaceFolder) {

if (URI.path == workspaceFolder.uri.path) {
if (URI.path === workspaceFolder.uri.path) {
URIexists = 1;
}
})
});
}

if (!URIexists) {
workspaceURIs.push({ uri: URI });
}
}

if (!workspaceURIs.length) return;
if (!workspaceURIs.length) {return;}

if (newWorkspaceFound) {
let addNewWorkspaceToConfig = await vscode.window.showQuickPick(['yes', 'no'], {
Expand All @@ -118,9 +110,9 @@ function initAddFolderToWorkspace(context: vscode.ExtensionContext) {
canPickMany: false,
});

if (addNewWorkspaceToConfig == 'yes') {
if (addNewWorkspaceToConfig === 'yes') {

if (!manualWorkspace.endsWith("/")) {
if (manualWorkspace && !manualWorkspace.endsWith("/")) {
manualWorkspace += '/';
}
let configWorkspaces = config.workspaces;
Expand All @@ -131,58 +123,58 @@ function initAddFolderToWorkspace(context: vscode.ExtensionContext) {
}

// Add selected Folder to Workspace.
await updateWorkspaceAndWait(0, null, workspaceURIs);
await updateWorkspaceAndWait(0, 0, workspaceURIs);

}))
}));
}

function initRemoveFolderFromWorkspace(context) {
// function initRemoveFolderFromWorkspace(context: vscode.ExtensionContext) {

const removeFolderFromWorkspaceId = 'removeFolderFromWorkspace';
context.subscriptions.push(vscode.commands.registerCommand(removeFolderFromWorkspaceId, async () => {
// const removeFolderFromWorkspaceId = 'removeFolderFromWorkspace';
// context.subscriptions.push(vscode.commands.registerCommand(removeFolderFromWorkspaceId, async () => {

// Check all current workspace folders.
let workspaceFolders = [];
vscode.workspace.workspaceFolders.sort().forEach(function (workspaceFolder) {
workspaceFolders.push(workspaceFolder.name)
})
// // Check all current workspace folders.
// let workspaceFolders = [];
// vscode.workspace.workspaceFolders.sort().forEach(function (workspaceFolder) {
// workspaceFolders.push(workspaceFolder.name);
// });

if (!workspaceFolders.length) return;
// if (!workspaceFolders.length) {return;}

// Create showQuickPick 'RemoveFolderFromWorkspace' selection.
let workspaces = await vscode.window.showQuickPick(workspaceFolders, {
title: 'RemoveFolderFromWorkspace',
placeHolder: 'RemoveFolderFromWorkspace: Select workspaces to be removed...',
canPickMany: true,
});
// // Create showQuickPick 'RemoveFolderFromWorkspace' selection.
// let workspaces = await vscode.window.showQuickPick(workspaceFolders, {
// title: 'RemoveFolderFromWorkspace',
// placeHolder: 'RemoveFolderFromWorkspace: Select workspaces to be removed...',
// canPickMany: true,
// });

if (!workspaces) return;
// if (!workspaces) {return;}

let removeIndexes = [];
// let removeIndexes = [];

// Sort and reverse selected 'remove' Folder from Workspace.
vscode.workspace.workspaceFolders.sort().forEach(function (workspaceFolder) {
// workspaceFolders.push(workspaceFolder.name)
let removeWorkspace = workspaces.includes(workspaceFolder.name);
// // Sort and reverse selected 'remove' Folder from Workspace.
// vscode.workspace.workspaceFolders.sort().forEach(function (workspaceFolder) {
// // workspaceFolders.push(workspaceFolder.name)
// let removeWorkspace = workspaces.includes(workspaceFolder.name);

if (removeWorkspace) {
removeIndexes.push(workspaceFolder.index)
}
})
// if (removeWorkspace) {
// removeIndexes.push(workspaceFolder.index);
// }
// });

// Remove selected Folder from Workspace.
for await (const removeIndex of removeIndexes.reverse()) {
await updateWorkspaceAndWait(removeIndex, 1, []);
}
}))
}
// // Remove selected Folder from Workspace.
// for await (const removeIndex of removeIndexes.reverse()) {
// await updateWorkspaceAndWait(removeIndex, 1, []);
// }
// }));
// }

function updateWorkspaceAndWait(start, deleteCount, workspaceFoldersToAdd) {
const success = vscode.workspace.updateWorkspaceFolders(start, deleteCount, ...workspaceFoldersToAdd)
function updateWorkspaceAndWait(start: number, deleteCount: number, workspaceFoldersToAdd: any[]) {
const success = vscode.workspace.updateWorkspaceFolders(start, deleteCount, ...workspaceFoldersToAdd);

if (success) {
const disps = []
return new Promise(resolve => {
const disps: vscode.Disposable[] = [];
return new Promise<void>(resolve => {

// Note: it is not valid to call updateWorkspaceFolders() multiple times
// without waiting for the onDidChangeWorkspaceFolders() to fire.
Expand All @@ -193,9 +185,32 @@ function updateWorkspaceAndWait(start, deleteCount, workspaceFoldersToAdd) {

}).finally(() => disps.forEach(disp => disp.dispose()));
} else {
return Promise.reject(new Error("Failed to update workspace"))
return Promise.reject(new Error("Failed to update workspace"));
}
}

async function getWorkspaceDirectories() {

let config = vscode.workspace.getConfiguration('addFolderToWorkspace');

let workspaceDirectories = config.workspaces || [];
let workspaceDirectory: string[] = [];

// Get all first level directories from given directories.
config.recursiveWorkspaces.forEach(async (myWorkspace: string) => {
let workspaceDirectory: string[] = [];
const workspaceDir = await vscode.workspace.fs.readDirectory(vscode.Uri.file(myWorkspace));

workspaceDir.forEach((dir) => {
if (dir[1] === vscode.FileType.Directory) {
workspaceDirectory.push(vscode.Uri.joinPath(vscode.Uri.file(myWorkspace), dir[0]).fsPath);
}
});
workspaceDirectories = workspaceDirectories.concat(workspaceDirectory);
});

return workspaceDirectories;
}

// This method is called when your extension is deactivated.
export function deactivate() { }

0 comments on commit 87bd810

Please sign in to comment.