提交 f586943e 编写于 作者: J Joao Moreno

propagate update service errors to UI

fixes #57664
fixes #7426
上级 a7996af3
......@@ -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),
......
......@@ -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 {
......
......@@ -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));
});
}
......
......@@ -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));
});
}
......
......@@ -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,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册