api - remove add/removeWorkspaceFolder (for #37301)

This commit is contained in:
Benjamin Pasero
2017-11-01 15:02:57 +01:00
parent bab6929b45
commit 67ae810e04
6 changed files with 2 additions and 106 deletions

View File

@@ -14,13 +14,9 @@ import { MainThreadWorkspaceShape, ExtHostWorkspaceShape, ExtHostContext, MainCo
import { IFileService } from 'vs/platform/files/common/files';
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { extHostNamedCustomer } from 'vs/workbench/api/electron-browser/extHostCustomers';
import { IConfigurationService, ConfigurationTarget } from 'vs/platform/configuration/common/configuration';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { IRelativePattern } from 'vs/base/common/glob';
import { IWorkspaceEditingService } from 'vs/workbench/services/workspace/common/workspaceEditing';
import { IMessageService } from 'vs/platform/message/common/message';
import { localize } from 'vs/nls';
import { getPathLabel } from 'vs/base/common/labels';
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
@extHostNamedCustomer(MainContext.MainThreadWorkspace)
export class MainThreadWorkspace implements MainThreadWorkspaceShape {
@@ -36,9 +32,7 @@ export class MainThreadWorkspace implements MainThreadWorkspaceShape {
@ITextFileService private readonly _textFileService: ITextFileService,
@IConfigurationService private _configurationService: IConfigurationService,
@IFileService private readonly _fileService: IFileService,
@IWorkspaceEditingService private _workspaceEditingService: IWorkspaceEditingService,
@IMessageService private _messageService: IMessageService,
@IEnvironmentService private _environmentService: IEnvironmentService
@IWorkspaceEditingService private _workspaceEditingService: IWorkspaceEditingService
) {
this._proxy = extHostContext.get(ExtHostContext.ExtHostWorkspace);
this._contextService.onDidChangeWorkspaceFolders(this._onDidChangeWorkspace, this, this._toDispose);
@@ -60,51 +54,6 @@ export class MainThreadWorkspace implements MainThreadWorkspaceShape {
this._proxy.$acceptWorkspaceData(this._contextService.getWorkbenchState() === WorkbenchState.EMPTY ? null : this._contextService.getWorkspace());
}
$addFolder(extensionName: string, uri: URI, name?: string): Thenable<boolean> {
return this.confirmAddRemoveFolder(extensionName, uri, false).then(confirmed => {
if (!confirmed) {
return TPromise.as(false);
}
return this._workspaceEditingService.addFolders([{ uri, name }], true).then(() => true);
});
}
$removeFolder(extensionName: string, uri: URI): Thenable<boolean> {
return this.confirmAddRemoveFolder(extensionName, uri, true).then(confirmed => {
if (!confirmed) {
return TPromise.as(false);
}
return this._workspaceEditingService.removeFolders([uri], true).then(() => true);
});
}
private confirmAddRemoveFolder(extensionName, uri: URI, isRemove: boolean): Thenable<boolean> {
if (!this._configurationService.getValue<boolean>('workbench.confirmChangesToWorkspaceFromExtensions')) {
return TPromise.as(true); // return confirmed if the setting indicates this
}
return this._messageService.confirm({
message: isRemove ?
localize('folderMessageRemove', "Extension '{0}' wants to remove a folder from the workspace. Please confirm.", extensionName) :
localize('folderMessageAdd', "Extension '{0}' wants to add a folder to the workspace. Please confirm.", extensionName),
detail: localize('folderPath', "Folder path: {0}", uri.scheme === 'file' ? getPathLabel(uri.fsPath, null, this._environmentService) : uri.toString()),
type: 'question',
primaryButton: isRemove ? localize('removeFolder', "&&Remove Folder") : localize('addFolder', "&&Add Folder"),
checkbox: {
label: localize('doNotAskAgain', "Do not ask me again")
}
}).then(confirmation => {
let updateConfirmSettingsPromise: TPromise<void> = TPromise.as(void 0);
if (confirmation.confirmed && confirmation.checkboxChecked === true) {
updateConfirmSettingsPromise = this._configurationService.updateValue('workbench.confirmChangesToWorkspaceFromExtensions', false, ConfigurationTarget.USER);
}
return updateConfirmSettingsPromise.then(() => confirmation.confirmed);
});
}
// --- search ---
$startSearch(include: string | IRelativePattern, exclude: string | IRelativePattern, maxResults: number, requestId: number): Thenable<URI[]> {