feat: added integration for VSC settings preview (#242)

This commit is contained in:
Alessio Occhipinti 2018-08-20 22:19:10 +02:00 committed by Mattia Astorino
parent e59b3e3eae
commit e783b1c67d
4 changed files with 48 additions and 31 deletions

View file

@ -35,37 +35,46 @@ const isValidColour = (colour: string | null | undefined): boolean =>
/** /**
* Sets workbench options * Sets workbench options
*/ */
const setWorkbenchOptions = (accentSelected: string | undefined, config: any): Thenable<string> => const setWorkbenchOptions = (config: any): Thenable<boolean> =>
vscode.workspace.getConfiguration().update('workbench.colorCustomizations', config, true) vscode.workspace.getConfiguration().update('workbench.colorCustomizations', config, true)
.then(() => updateAccent(accentSelected), .then(() => true, reason => vscode.window.showErrorMessage(reason));
reason => vscode.window.showErrorMessage(reason));
/** /**
* VSCode command * VSCode command
*/ */
export default async (): Promise<boolean> => { export default async (accent?: string): Promise<boolean> => {
const themeConfigCommon = getDefaultValues(); const themeConfigCommon = getDefaultValues();
const purgeColourKey: string = 'Remove accents'; const purgeColourKey: string = 'Remove accents';
const options: string[] = Object.keys(themeConfigCommon.accents).concat(purgeColourKey); const shouldUpdateAccent = Boolean(!accent);
let accentToSelect = accent;
// shows the quick pick dropdown and wait response // If called without accent shows the quick pick dropdown and wait response
const accentSelected = await vscode.window.showQuickPick(options); if (!accentToSelect) {
const options: string[] = Object.keys(themeConfigCommon.accents).concat(purgeColourKey);
const accentSelected = await vscode.window.showQuickPick(options);
if (accentSelected === null || accentSelected === undefined) { if (accentSelected === null || accentSelected === undefined) {
return Promise.resolve(null); return Promise.resolve(null);
}
accentToSelect = accentSelected;
} }
const config: any = vscode.workspace.getConfiguration().get('workbench.colorCustomizations'); const config: any = vscode.workspace.getConfiguration().get('workbench.colorCustomizations');
switch (accentSelected) { switch (accentToSelect) {
case purgeColourKey: case purgeColourKey:
assignColorCustomizations(undefined, config); assignColorCustomizations(undefined, config);
await setWorkbenchOptions(undefined, config); return setWorkbenchOptions(config)
return Promise.resolve(true); .then(() => updateAccent(undefined))
.then(() => Promise.resolve(true));
default: default:
assignColorCustomizations(themeConfigCommon.accents[accentSelected], config); assignColorCustomizations(themeConfigCommon.accents[accentToSelect], config);
await setWorkbenchOptions(accentSelected, config); return setWorkbenchOptions(config)
return Promise.resolve(true); .then(() =>
shouldUpdateAccent ? updateAccent(accentToSelect) : Promise.resolve(accentToSelect)
)
.then(() => Promise.resolve(true));
} }
}; };

View file

@ -29,8 +29,6 @@ const replaceIconPathWithAccent = (iconPath: string, accentName: string): string
return iconPath.replace('.svg', `.accent.${ accentName }.svg`); return iconPath.replace('.svg', `.accent.${ accentName }.svg`);
}; };
let fixIconsRunning: boolean = false;
/** /**
* Fix icons when flag auto-fix is active and current theme is Material * Fix icons when flag auto-fix is active and current theme is Material
*/ */
@ -41,10 +39,6 @@ export default async () => {
deferred.reject = reject; deferred.reject = reject;
}); });
if (fixIconsRunning) {
return deferred.resolve();
}
// Current theme id set on VSCode ("label" of the package.json) // Current theme id set on VSCode ("label" of the package.json)
const themeLabel = getCurrentThemeID(); const themeLabel = getCurrentThemeID();
@ -53,8 +47,6 @@ export default async () => {
return deferred.resolve(); return deferred.resolve();
} }
fixIconsRunning = true;
const DEFAULTS = getDefaultValues(); const DEFAULTS = getDefaultValues();
const CUSTOM_SETTINGS = getCustomSettings(); const CUSTOM_SETTINGS = getCustomSettings();
@ -96,8 +88,6 @@ export default async () => {
deferred.reject(err); deferred.reject(err);
return; return;
} }
fixIconsRunning = false;
deferred.resolve(); deferred.resolve();
}); });

View file

@ -1,10 +1,10 @@
import { import {
ConfigurationChangeEvent ConfigurationChangeEvent
} from 'vscode'; } from 'vscode';
import {isMaterialThemeIcons, isMaterialTheme} from './settings'; import {isMaterialThemeIcons, isMaterialTheme, getAccent} from './settings';
import {getCurrentThemeIconsID, getCurrentThemeID} from './vscode'; import {getCurrentThemeIconsID, getCurrentThemeID} from './vscode';
import handleAutoapply from './handle-autoapply'; import handleAutoapply from './handle-autoapply';
import {accentsSetter} from '../commands';
const onIconsChanged = () => { const onIconsChanged = () => {
const currentIconsTheme = getCurrentThemeIconsID(); const currentIconsTheme = getCurrentThemeIconsID();
@ -16,10 +16,24 @@ const onThemeChanged = () => {
return handleAutoapply(isMaterialTheme(currentTheme)); return handleAutoapply(isMaterialTheme(currentTheme));
}; };
const onAccentChanged = () => {
const currentTheme = getCurrentThemeID();
const currentIconsTheme = getCurrentThemeIconsID();
const currentAccent = getAccent();
return accentsSetter(currentAccent)
.then(() =>
handleAutoapply(
isMaterialTheme(currentTheme) && isMaterialThemeIcons(currentIconsTheme)
)
);
};
export const onChangeConfiguration = (event: ConfigurationChangeEvent) => { export const onChangeConfiguration = (event: ConfigurationChangeEvent) => {
const isColorTheme = event.affectsConfiguration('workbench.colorTheme'); const isColorTheme = event.affectsConfiguration('workbench.colorTheme');
const isIconTheme = event.affectsConfiguration('workbench.iconTheme'); const isIconTheme = event.affectsConfiguration('workbench.iconTheme');
const isAccent = event.affectsConfiguration('materialTheme.accent');
return isIconTheme ? onIconsChanged() : return isIconTheme ? onIconsChanged() :
isColorTheme ? onThemeChanged() : null; isColorTheme ? onThemeChanged() :
isAccent ? onAccentChanged() : null;
}; };

View file

@ -2,13 +2,16 @@ import {isAutoApplyEnable, isReloadNotificationEnable} from './settings';
import {infoMessage} from './messages'; import {infoMessage} from './messages';
import {fixIcons} from '../commands'; import {fixIcons} from '../commands';
let fixIconsRunning: boolean = false;
export default async (doubleCheck: boolean) => { export default async (doubleCheck: boolean) => {
if (!doubleCheck) { if (!doubleCheck || fixIconsRunning) {
return; return;
} }
if (isAutoApplyEnable()) { if (isAutoApplyEnable()) {
return fixIcons(); fixIconsRunning = true;
return fixIcons().then(() => fixIconsRunning = false);
} }
if (!isReloadNotificationEnable()) { if (!isReloadNotificationEnable()) {
@ -18,6 +21,7 @@ export default async (doubleCheck: boolean) => {
const result = await infoMessage(); const result = await infoMessage();
if (result.reload) { if (result.reload) {
return fixIcons(); fixIconsRunning = true;
return fixIcons().then(() => fixIconsRunning = false);
} }
}; };