diff --git a/src/vs/platform/workspace/common/workspace.ts b/src/vs/platform/workspace/common/workspace.ts index 9763df16da3ab9273d78472cfdb01e71e3a4f62e..fbdfdf4981c9f592a83c5158de37ef59df38d310 100644 --- a/src/vs/platform/workspace/common/workspace.ts +++ b/src/vs/platform/workspace/common/workspace.ts @@ -108,6 +108,7 @@ export interface IEnvironment { }; releaseNotesUrl: string; + licenseUrl: string; productDownloadUrl: string; welcomePage: string; diff --git a/src/vs/workbench/electron-main/window.ts b/src/vs/workbench/electron-main/window.ts index 13f44960786798687ebc441ac8871308da2e041f..35eb707c9cff2a2d71c8597a768baa1bb3d711d1 100644 --- a/src/vs/workbench/electron-main/window.ts +++ b/src/vs/workbench/electron-main/window.ts @@ -117,6 +117,7 @@ export interface IWindowConfiguration extends env.ICommandLineArguments { }; welcomePage: string; releaseNotesUrl: string; + licenseUrl: string; productDownloadUrl: string; enableTelemetry: boolean; userEnv: env.IProcessEnvironment; diff --git a/src/vs/workbench/electron-main/windows.ts b/src/vs/workbench/electron-main/windows.ts index 95d882810538e6bc395b657df35dfbf3e9ce2da7..68605d04626cf8258002707c4127c10337ed9810 100644 --- a/src/vs/workbench/electron-main/windows.ts +++ b/src/vs/workbench/electron-main/windows.ts @@ -675,6 +675,7 @@ export class WindowsManager { configuration.welcomePage = env.product.welcomePage; configuration.productDownloadUrl = env.product.downloadUrl; configuration.releaseNotesUrl = env.product.releaseNotesUrl; + configuration.licenseUrl = env.product.licenseUrl; configuration.updateFeedUrl = UpdateManager.feedUrl; configuration.updateChannel = UpdateManager.channel; configuration.recentPaths = this.getRecentlyOpenedPaths(workspacePath, filesToOpen); diff --git a/src/vs/workbench/parts/releaseNotes/electron-browser/releaseNotes.contribution.ts b/src/vs/workbench/parts/update/electron-browser/update.contribution.ts similarity index 57% rename from src/vs/workbench/parts/releaseNotes/electron-browser/releaseNotes.contribution.ts rename to src/vs/workbench/parts/update/electron-browser/update.contribution.ts index d88620cba7b3c844e268eda5007b1605709dd58a..85ccc1594f81d9096562a092404c71b8c8d330eb 100644 --- a/src/vs/workbench/parts/releaseNotes/electron-browser/releaseNotes.contribution.ts +++ b/src/vs/workbench/parts/update/electron-browser/update.contribution.ts @@ -7,6 +7,7 @@ import * as nls from 'vs/nls'; import { Registry } from 'vs/platform/platform'; +import { TPromise } from 'vs/base/common/winjs.base'; import { IWorkbenchContribution } from 'vs/workbench/common/contributions'; import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions'; import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage'; @@ -15,10 +16,23 @@ import { IMessageService } from 'vs/platform/message/common/message'; import Severity from 'vs/base/common/severity'; import { ShowReleaseNotesAction } from 'vs/workbench/electron-browser/update'; import { Action } from 'vs/base/common/actions'; +import { shell } from 'electron'; +import * as semver from 'semver'; -export class ReleaseNotesContribution implements IWorkbenchContribution { +const CloseAction = new Action('close', nls.localize('close', "Close"), '', true, () => null); + +const ShowLicenseAction = (licenseUrl: string) => new Action( + 'update.showLicense', + nls.localize('license', "Read License"), + null, + true, + () => { shell.openExternal(licenseUrl); return TPromise.as(null); } +); + +export class UpdateContribution implements IWorkbenchContribution { private static KEY = 'releaseNotes/lastVersion'; + getId() { return 'vs.update'; } constructor( @IStorageService storageService: IStorageService, @@ -26,20 +40,15 @@ export class ReleaseNotesContribution implements IWorkbenchContribution { @IMessageService messageService: IMessageService ) { const env = contextService.getConfiguration().env; - - if (!env.releaseNotesUrl) { - return; - } - - const lastVersion = storageService.get(ReleaseNotesContribution.KEY, StorageScope.GLOBAL, ''); + const lastVersion = storageService.get(UpdateContribution.KEY, StorageScope.GLOBAL, ''); // was there an update? - if (lastVersion && env.version !== lastVersion) { + if (env.releaseNotesUrl && lastVersion && env.version !== lastVersion) { setTimeout(() => { messageService.show(Severity.Info, { message: nls.localize('releaseNotes', "Welcome to {0} v{1}! Would you like to read the Release Notes?", env.appName, env.version), actions: [ - new Action('close', nls.localize('close', "Close"), '', true, () => null), + CloseAction, ShowReleaseNotesAction(env.releaseNotesUrl, true) ] }); @@ -47,13 +56,23 @@ export class ReleaseNotesContribution implements IWorkbenchContribution { }, 0); } - storageService.store(ReleaseNotesContribution.KEY, env.version, StorageScope.GLOBAL); - } + // should we show the new license? + if (env.licenseUrl && lastVersion && semver.satisfies(lastVersion, '<1.0.0') && semver.satisfies(env.version, '>=1.0.0')) { + setTimeout(() => { + messageService.show(Severity.Info, { + message: nls.localize('licenseChanged', "Our license terms have changed, please go through them.", env.appName, env.version), + actions: [ + CloseAction, + ShowLicenseAction(env.licenseUrl) + ] + }); + + }, 0); + } - getId() { - return 'vs.releaseNotes'; + storageService.store(UpdateContribution.KEY, env.version, StorageScope.GLOBAL); } } Registry.as(WorkbenchExtensions.Workbench) - .registerWorkbenchContribution(ReleaseNotesContribution); \ No newline at end of file + .registerWorkbenchContribution(UpdateContribution); \ No newline at end of file diff --git a/src/vs/workbench/workbench.main.js b/src/vs/workbench/workbench.main.js index 6e665d584934e82e09e8f8eab1b2aef1a8033ca7..aa2dce212103536397735ea102ccdc2488d95fc3 100644 --- a/src/vs/workbench/workbench.main.js +++ b/src/vs/workbench/workbench.main.js @@ -81,7 +81,7 @@ define([ 'vs/workbench/parts/gettingStarted/electron-browser/electronGettingStarted.contribution', - 'vs/workbench/parts/releaseNotes/electron-browser/releaseNotes.contribution', + 'vs/workbench/parts/update/electron-browser/update.contribution', 'vs/workbench/electron-browser/darwin/cli.contribution',