From f586943ea596794e3b04d1e8adb6cdb972c8179f Mon Sep 17 00:00:00 2001 From: Joao Moreno Date: Thu, 27 Sep 2018 15:31:55 +0200 Subject: [PATCH] propagate update service errors to UI fixes #57664 fixes #7426 --- src/vs/platform/update/common/update.ts | 4 ++-- .../electron-main/updateService.darwin.ts | 4 ++-- .../update/electron-main/updateService.linux.ts | 2 +- .../update/electron-main/updateService.win32.ts | 2 +- .../parts/update/electron-browser/update.ts | 17 ++++++++++++++--- 5 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/vs/platform/update/common/update.ts b/src/vs/platform/update/common/update.ts index 62c53443088..3009b67e3cf 100644 --- a/src/vs/platform/update/common/update.ts +++ b/src/vs/platform/update/common/update.ts @@ -54,7 +54,7 @@ export const enum UpdateType { } export type Uninitialized = { type: StateType.Uninitialized }; -export type Idle = { type: StateType.Idle, updateType: UpdateType }; +export type Idle = { type: StateType.Idle, updateType: UpdateType, error?: string; }; export type CheckingForUpdates = { type: StateType.CheckingForUpdates, context: any }; export type AvailableForDownload = { type: StateType.AvailableForDownload, update: IUpdate }; export type Downloading = { type: StateType.Downloading, update: IUpdate }; @@ -66,7 +66,7 @@ export type State = Uninitialized | Idle | CheckingForUpdates | AvailableForDown export const State = { Uninitialized: { type: StateType.Uninitialized } as Uninitialized, - Idle: (updateType: UpdateType) => ({ type: StateType.Idle, updateType }) as Idle, + Idle: (updateType: UpdateType, error?: string) => ({ type: StateType.Idle, updateType, error }) as Idle, CheckingForUpdates: (context: any) => ({ type: StateType.CheckingForUpdates, context } as CheckingForUpdates), AvailableForDownload: (update: IUpdate) => ({ type: StateType.AvailableForDownload, update } as AvailableForDownload), Downloading: (update: IUpdate) => ({ type: StateType.Downloading, update } as Downloading), diff --git a/src/vs/platform/update/electron-main/updateService.darwin.ts b/src/vs/platform/update/electron-main/updateService.darwin.ts index 8ac8357ef63..1b99fbda07f 100644 --- a/src/vs/platform/update/electron-main/updateService.darwin.ts +++ b/src/vs/platform/update/electron-main/updateService.darwin.ts @@ -45,8 +45,8 @@ export class DarwinUpdateService extends AbstractUpdateService { } private onError(err: string): void { - this.logService.error('UpdateService error: ', err); - this.setState(State.Idle(UpdateType.Archive)); + this.logService.error('UpdateService error:', err); + this.setState(State.Idle(UpdateType.Archive, err)); } protected buildUpdateFeedUrl(quality: string): string | undefined { diff --git a/src/vs/platform/update/electron-main/updateService.linux.ts b/src/vs/platform/update/electron-main/updateService.linux.ts index cce8a725374..cd52409f323 100644 --- a/src/vs/platform/update/electron-main/updateService.linux.ts +++ b/src/vs/platform/update/electron-main/updateService.linux.ts @@ -70,7 +70,7 @@ export class LinuxUpdateService extends AbstractUpdateService { } */ this.telemetryService.publicLog('update:notAvailable', { explicit: !!context }); - this.setState(State.Idle(UpdateType.Archive)); + this.setState(State.Idle(UpdateType.Archive, err.message || err)); }); } diff --git a/src/vs/platform/update/electron-main/updateService.win32.ts b/src/vs/platform/update/electron-main/updateService.win32.ts index 3d1772cfe97..80e5216c001 100644 --- a/src/vs/platform/update/electron-main/updateService.win32.ts +++ b/src/vs/platform/update/electron-main/updateService.win32.ts @@ -182,7 +182,7 @@ export class Win32UpdateService extends AbstractUpdateService { } */ this.telemetryService.publicLog('update:notAvailable', { explicit: !!context }); - this.setState(State.Idle(getUpdateType())); + this.setState(State.Idle(getUpdateType(), err.message || err)); }); } diff --git a/src/vs/workbench/parts/update/electron-browser/update.ts b/src/vs/workbench/parts/update/electron-browser/update.ts index 719aec3b50d..d4568c6bbc1 100644 --- a/src/vs/workbench/parts/update/electron-browser/update.ts +++ b/src/vs/workbench/parts/update/electron-browser/update.ts @@ -24,7 +24,7 @@ import { IStorageService, StorageScope } from 'vs/platform/storage/common/storag import { IUpdateService, State as UpdateState, StateType, IUpdate } from 'vs/platform/update/common/update'; import * as semver from 'semver'; import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { INotificationService, INotificationHandle } from 'vs/platform/notification/common/notification'; +import { INotificationService, INotificationHandle, Severity } from 'vs/platform/notification/common/notification'; import { IDialogService } from 'vs/platform/dialogs/common/dialogs'; import { IWindowService } from 'vs/platform/windows/common/windows'; import { ReleaseNotesManager } from './releaseNotesEditor'; @@ -179,7 +179,6 @@ export class Win3264BitContribution implements IWorkbenchContribution { constructor( @IStorageService storageService: IStorageService, - @IInstantiationService instantiationService: IInstantiationService, @INotificationService notificationService: INotificationService, @IEnvironmentService environmentService: IEnvironmentService ) { @@ -277,7 +276,9 @@ export class UpdateContribution implements IGlobalActivity { private onUpdateStateChange(state: UpdateState): void { switch (state.type) { case StateType.Idle: - if (this.state.type === StateType.CheckingForUpdates && this.state.context && this.state.context.windowId === this.windowService.getCurrentWindowId()) { + if (state.error) { + this.onError(state.error); + } else if (this.state.type === StateType.CheckingForUpdates && this.state.context && this.state.context.windowId === this.windowService.getCurrentWindowId()) { this.onUpdateNotAvailable(); } break; @@ -318,6 +319,16 @@ export class UpdateContribution implements IGlobalActivity { this.state = state; } + private onError(error: string): void { + error = error.replace(/See (.*) for more information/, 'See [this link]($1) for more information'); + + this.notificationService.notify({ + severity: Severity.Error, + message: error, + source: nls.localize('update service', "Update Service"), + }); + } + private onUpdateNotAvailable(): void { this.dialogService.show( severity.Info, -- GitLab