Use editbale configuration target while editing.

Adopt user remote target
This commit is contained in:
Sandeep Somavarapu
2019-04-12 10:06:11 +02:00
parent bcb4b3fa78
commit 10736e07cf
4 changed files with 119 additions and 72 deletions

View File

@@ -21,7 +21,7 @@ import { Registry } from 'vs/platform/registry/common/platform';
import { IConfigurationRegistry, Extensions, allSettings, windowSettings, resourceSettings, applicationSettings, machineSettings } from 'vs/platform/configuration/common/configurationRegistry';
import { IWorkspaceIdentifier, isWorkspaceIdentifier, IStoredWorkspaceFolder, isStoredWorkspaceFolder, IWorkspaceFolderCreationData, ISingleFolderWorkspaceIdentifier, isSingleFolderWorkspaceIdentifier, IWorkspaceInitializationPayload, isSingleFolderWorkspaceInitializationPayload, ISingleFolderWorkspaceInitializationPayload, IEmptyWorkspaceInitializationPayload, useSlashForPath, getStoredWorkspaceFolder } from 'vs/platform/workspaces/common/workspaces';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { ConfigurationEditingService } from 'vs/workbench/services/configuration/common/configurationEditingService';
import { ConfigurationEditingService, EditableConfigurationTarget } from 'vs/workbench/services/configuration/common/configurationEditingService';
import { WorkspaceConfiguration, FolderConfiguration, RemoteUserConfiguration, UserConfiguration } from 'vs/workbench/services/configuration/browser/configuration';
import { JSONEditingService } from 'vs/workbench/services/configuration/common/jsonEditingService';
import { IJSONSchema, IJSONSchemaMap } from 'vs/base/common/jsonSchema';
@@ -269,6 +269,8 @@ export class WorkspaceService extends Disposable implements IConfigurationServic
inspect<T>(key: string, overrides?: IConfigurationOverrides): {
default: T,
user: T,
userLocal?: T,
userRemote?: T,
workspace?: T,
workspaceFolder?: T,
memory?: T,
@@ -419,8 +421,15 @@ export class WorkspaceService extends Disposable implements IConfigurationServic
}
private reloadUserConfiguration(key?: string): Promise<{ local: ConfigurationModel, remote: ConfigurationModel }> {
return Promise.all([this.localUserConfiguration ? this.localUserConfiguration.reload() : Promise.resolve(new ConfigurationModel()), this.remoteUserConfiguration ? this.remoteUserConfiguration.reload() : Promise.resolve(new ConfigurationModel())])
.then(([local, remote]) => ({ local, remote }));
return Promise.all([this.reloadLocalUserConfiguration(), this.reloadRemoeUserConfiguration()]).then(([local, remote]) => ({ local, remote }));
}
private reloadLocalUserConfiguration(key?: string): Promise<ConfigurationModel> {
return this.localUserConfiguration ? this.localUserConfiguration.reload() : Promise.resolve(new ConfigurationModel());
}
private reloadRemoeUserConfiguration(key?: string): Promise<ConfigurationModel> {
return this.remoteUserConfiguration ? this.remoteUserConfiguration.reload() : Promise.resolve(new ConfigurationModel());
}
private reloadWorkspaceConfiguration(key?: string): Promise<void> {
@@ -615,20 +624,25 @@ export class WorkspaceService extends Disposable implements IConfigurationServic
return Promise.resolve(undefined);
}
return this.configurationEditingService.writeConfiguration(target, { key, value }, { scopes: overrides, donotNotifyError })
const editableConfigurationTarget = this.toEditableConfigurationTarget(target, key);
if (!editableConfigurationTarget) {
return Promise.reject(new Error('Invalid configuration target'));
}
if (editableConfigurationTarget === EditableConfigurationTarget.USER_REMOTE && !this.remoteUserConfiguration) {
return Promise.reject(new Error('Invalid configuration target'));
}
return this.configurationEditingService.writeConfiguration(editableConfigurationTarget, { key, value }, { scopes: overrides, donotNotifyError })
.then(() => {
switch (target) {
case ConfigurationTarget.USER:
return this.reloadUserConfiguration()
.then(({ local, remote }) => {
this.onLocalUserConfigurationChanged(local);
if (this.remoteUserConfiguration) {
this.onRemoteUserConfigurationChanged(remote);
}
});
case ConfigurationTarget.WORKSPACE:
switch (editableConfigurationTarget) {
case EditableConfigurationTarget.USER_LOCAL:
return this.reloadLocalUserConfiguration().then(local => this.onLocalUserConfigurationChanged(local));
case EditableConfigurationTarget.USER_REMOTE:
return this.reloadRemoeUserConfiguration().then(remote => this.onRemoteUserConfigurationChanged(remote));
case EditableConfigurationTarget.WORKSPACE:
return this.reloadWorkspaceConfiguration();
case ConfigurationTarget.WORKSPACE_FOLDER:
case EditableConfigurationTarget.WORKSPACE_FOLDER:
const workspaceFolder = overrides && overrides.resource ? this.workspace.getFolder(overrides.resource) : null;
if (workspaceFolder) {
return this.reloadWorkspaceFolderConfiguration(workspaceFolder, key);
@@ -683,4 +697,26 @@ export class WorkspaceService extends Disposable implements IConfigurationServic
}
return {};
}
private toEditableConfigurationTarget(target: ConfigurationTarget, key: string): EditableConfigurationTarget | null {
if (target === ConfigurationTarget.USER) {
if (this.inspect(key).userRemote !== undefined) {
return EditableConfigurationTarget.USER_REMOTE;
}
return EditableConfigurationTarget.USER_LOCAL;
}
if (target === ConfigurationTarget.USER_LOCAL) {
return EditableConfigurationTarget.USER_LOCAL;
}
if (target === ConfigurationTarget.USER_REMOTE) {
return EditableConfigurationTarget.USER_REMOTE;
}
if (target === ConfigurationTarget.WORKSPACE) {
return EditableConfigurationTarget.WORKSPACE;
}
if (target === ConfigurationTarget.WORKSPACE_FOLDER) {
return EditableConfigurationTarget.WORKSPACE_FOLDER;
}
return null;
}
}