From 0ecb7ff06690df9360d316d42616611ccac1a983 Mon Sep 17 00:00:00 2001 From: LasaleFamine Date: Sun, 12 Aug 2018 11:37:25 +0200 Subject: [PATCH] chore: check on installation type now as single module --- extensions/helpers/check-installation.ts | 34 ++++++++++++++++++++ extensions/helpers/should-show-changelog.ts | 35 --------------------- extensions/helpers/write-changelog.ts | 16 ++++++++++ extensions/interfaces/iinstallation-type.ts | 4 +++ extensions/material.theme.config.ts | 15 ++++----- 5 files changed, 62 insertions(+), 42 deletions(-) create mode 100644 extensions/helpers/check-installation.ts delete mode 100644 extensions/helpers/should-show-changelog.ts create mode 100644 extensions/helpers/write-changelog.ts create mode 100644 extensions/interfaces/iinstallation-type.ts diff --git a/extensions/helpers/check-installation.ts b/extensions/helpers/check-installation.ts new file mode 100644 index 0000000..fc52488 --- /dev/null +++ b/extensions/helpers/check-installation.ts @@ -0,0 +1,34 @@ +import {getDefaultValues, getPackageJSON} from './fs'; +import {IInstallationType} from '../interfaces/iinstallation-type'; + +const splitVersion = (input: string): {major: number; minor: number; patch: number} => { + const [major, minor, patch] = input.split('.').map(i => parseInt(i, 10)); + return {major, minor, patch}; +}; + +export default (): IInstallationType => { + const out: IInstallationType = { + isUpdate: false, + isFirstInstall: false + }; + + const defaults = getDefaultValues(); + const packageJSON = getPackageJSON(); + + const isFirstInstall = defaults.changelog === undefined || + (defaults.changelog !== undefined && typeof defaults.changelog.lastversion !== 'string'); + + if (isFirstInstall) { + return {...out, isFirstInstall}; + } + + const versionCurrent = splitVersion(packageJSON.version); + const versionOld = isFirstInstall ? null : splitVersion(defaults.changelog.lastversion); + + const isUpdate = !versionOld || + versionCurrent.major > versionOld.major || + versionCurrent.minor > versionOld.minor || + versionCurrent.patch > versionOld.patch; + + return {...out, isUpdate}; +}; diff --git a/extensions/helpers/should-show-changelog.ts b/extensions/helpers/should-show-changelog.ts deleted file mode 100644 index f05b780..0000000 --- a/extensions/helpers/should-show-changelog.ts +++ /dev/null @@ -1,35 +0,0 @@ -import * as path from 'path'; - -import {IDefaults} from './../interfaces/idefaults'; - -import {getDefaultValues, getPackageJSON, writeFile} from './fs'; - -const splitVersion = (input: string): {major: number; minor: number; patch: number} => { - const [major, minor, patch] = input.split('.').map(i => parseInt(i, 10)); - return {major, minor, patch}; -}; - -const writeDefaults = (defaults: IDefaults) => - writeFile(path.join('./extensions/defaults.json'), JSON.stringify(defaults, null, 2)); - -export default (): boolean => { - const defaults = getDefaultValues(); - const packageJSON = getPackageJSON(); - - const defaultsNotPresent = defaults.changelog === undefined || - (defaults.changelog !== undefined && typeof defaults.changelog.lastversion !== 'string'); - - const versionCurrent = splitVersion(packageJSON.version); - const versionOld = defaultsNotPresent ? null : splitVersion(defaults.changelog.lastversion); - - const out = !versionOld || - versionCurrent.major > versionOld.major || - versionCurrent.minor > versionOld.minor || - versionCurrent.patch > versionOld.patch; - - const newChangelog = {...defaults.changelog, lastversion: packageJSON.version}; - const newDefaults = {...defaults, changelog: newChangelog}; - writeDefaults(newDefaults); - - return out; -}; diff --git a/extensions/helpers/write-changelog.ts b/extensions/helpers/write-changelog.ts new file mode 100644 index 0000000..53fa129 --- /dev/null +++ b/extensions/helpers/write-changelog.ts @@ -0,0 +1,16 @@ +import * as path from 'path'; +import {getDefaultValues, getPackageJSON, writeFile} from './fs'; + +import {IDefaults} from './../interfaces/idefaults'; + +const writeDefaults = (defaults: IDefaults) => + writeFile(path.join('./extensions/defaults.json'), JSON.stringify(defaults, null, 2)); + +export default (): void => { + const defaults = getDefaultValues(); + const packageJSON = getPackageJSON(); + + const newChangelog = {...defaults.changelog, lastversion: packageJSON.version}; + const newDefaults = {...defaults, changelog: newChangelog}; + writeDefaults(newDefaults); +}; diff --git a/extensions/interfaces/iinstallation-type.ts b/extensions/interfaces/iinstallation-type.ts new file mode 100644 index 0000000..b3d6325 --- /dev/null +++ b/extensions/interfaces/iinstallation-type.ts @@ -0,0 +1,4 @@ +export interface IInstallationType { + isUpdate: boolean; + isFirstInstall: boolean; +} diff --git a/extensions/material.theme.config.ts b/extensions/material.theme.config.ts index e3086e9..b603979 100644 --- a/extensions/material.theme.config.ts +++ b/extensions/material.theme.config.ts @@ -7,10 +7,14 @@ import * as ThemeCommands from './commands'; import {isAutoApplyEnable} from './helpers/settings'; import {onChangeConfiguration} from './helpers/configuration-change'; import {infoMessage, changelogMessage} from './helpers/messages'; -import shouldShowChangelog from './helpers/should-show-changelog'; +import checkInstallation from './helpers/check-installation'; +import writeChangelog from './helpers/write-changelog'; export async function activate() { const config = Workspace.getConfiguration(); + const installationType = checkInstallation(); + + writeChangelog(); // Listen on set theme: when the theme is Material Theme, just adjust icon and accent. Workspace.onDidChangeConfiguration(onChangeConfiguration); @@ -20,17 +24,14 @@ export async function activate() { config.update('materialTheme.cache.workbench', undefined, true); } - if (shouldShowChangelog()) { - const show = await changelogMessage(); - if (show) { - ThemeCommands.showChangelog(); - } + const shouldShowChangelog = (installationType.isFirstInstall || installationType.isUpdate) && await changelogMessage(); + if (shouldShowChangelog) { + ThemeCommands.showChangelog(); } // Registering commands Commands.registerCommand('materialTheme.setAccent', async () => { const wasSet = await ThemeCommands.accentsSetter(); - if (wasSet) { return isAutoApplyEnable() ? ThemeCommands.fixIcons() : infoMessage(); }