che-server/tests/e2e/utils/PreferencesHandler.ts

88 lines
3.3 KiB
TypeScript

/*********************************************************************
* Copyright (c) 2019 Red Hat, Inc.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
**********************************************************************/
import { injectable, inject } from 'inversify';
import { Logger } from './Logger';
import { CLASSES } from '../inversify.types';
import { CheApiRequestHandler } from './requestHandlers/CheApiRequestHandler';
export enum TerminalRendererType {
canvas = 'canvas',
dom = 'dom'
}
export enum AskForConfirmationType {
never = 'never',
ifRquired = 'ifRequired',
always = 'always'
}
@injectable()
export class PreferencesHandler {
constructor(@inject(CLASSES.CheApiRequestHandler) private readonly requestHandler: CheApiRequestHandler) {
}
/**
* Works properly only if set before workspace startup.
*/
public async setTerminalType(type: TerminalRendererType) {
Logger.debug('PreferencesHandler.setTerminalToDom');
await this.setPreference('terminal.integrated.rendererType', type);
}
/**
*
* @param askForConfirmation possible values are "never", "ifRequired" and "always"
*/
public async setConfirmExit(askForConfirmation: AskForConfirmationType) {
Logger.debug(`PreferencesHandler.setConfirmExit to ${askForConfirmation}`);
await this.setPreference(`application.confirmExit`, askForConfirmation);
}
/**
* Works properly only if set before workspace startup.
*/
public async setUseGoLanaguageServer() {
Logger.debug(`PreferencesHandler.setUseGoLanguageServer to true.`);
await this.setPreference('go.useLanguageServer', 'true');
}
private async setPreference(attribute: string, value: string) {
Logger.trace(`PreferencesHandler.setPreferences ${attribute} to ${value}`);
let response;
try {
response = await this.requestHandler.get('api/preferences');
} catch (e) {
Logger.error(`PreferencesHandler.setPreferences failed to get user preferences`);
throw e;
}
let userPref = response.data;
try {
let theiaPref = JSON.parse(userPref['theia-user-preferences']);
theiaPref[attribute] = value;
userPref['theia-user-preferences'] = JSON.stringify(theiaPref);
await this.requestHandler.post('api/preferences', userPref);
} catch (e) {
// setting terminal before running a workspace, so no theia preferences are set
Logger.warn(`PreferencesHandler.setPreference could not set theia-user-preferences from api/preferences response, forcing manually.`);
let theiaPref = `{ "${attribute}":"${value}" }`;
userPref['theia-user-preferences'] = JSON.stringify(JSON.parse(theiaPref));
try {
await this.requestHandler.post('api/preferences', userPref);
} catch (e) {
Logger.error(`PreferencesHandler.setPreference failed to manually set preferences value.`);
throw e;
}
}
Logger.trace(`PreferencesHandler.setPreferences ${attribute} to ${value} done.`);
}
}