propagate extension installation errors to UI

fixes #9979
This commit is contained in:
Joao Moreno 2016-08-31 11:28:47 +02:00
parent df2bf8b841
commit 3e14ed6a02
2 changed files with 20 additions and 3 deletions

View file

@ -127,6 +127,7 @@ export class ExtensionManagementService implements IExtensionManagementService {
};
return this.galleryService.download(extension)
.then(zipPath => validate(zipPath).then(() => zipPath))
.then(zipPath => this.installExtension(zipPath, id, metadata))
.then(
local => this._onDidInstallExtension.fire({ id, local }),

View file

@ -11,10 +11,11 @@ import { TPromise } from 'vs/base/common/winjs.base';
import { marked } from 'vs/base/common/marked/marked';
import { always } from 'vs/base/common/async';
import * as arrays from 'vs/base/common/arrays';
import Event, { Emitter, once } from 'vs/base/common/event';
import Event, { Emitter, once, fromEventEmitter, filterEvent, mapEvent } from 'vs/base/common/event';
import Cache from 'vs/base/common/cache';
import { Action } from 'vs/base/common/actions';
import { onUnexpectedError } from 'vs/base/common/errors';
import { isPromiseCanceledError, onUnexpectedError } from 'vs/base/common/errors';
import Severity from 'vs/base/common/severity';
import { IDisposable, empty, dispose, toDisposable } from 'vs/base/common/lifecycle';
import { Builder } from 'vs/base/browser/builder';
import { domEvent } from 'vs/base/browser/event';
@ -41,6 +42,7 @@ import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/edi
import { Keybinding } from 'vs/base/common/keyCodes';
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
import { DomScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement';
import { IMessageService } from 'vs/platform/message/common/message';
function renderBody(body: string): string {
return `<!DOCTYPE html>
@ -138,7 +140,8 @@ export class ExtensionEditor extends BaseEditor {
@IExtensionsWorkbenchService private extensionsWorkbenchService: IExtensionsWorkbenchService,
@IThemeService private themeService: IThemeService,
@IWorkbenchEditorService private editorService: IWorkbenchEditorService,
@IKeybindingService private keybindingService: IKeybindingService
@IKeybindingService private keybindingService: IKeybindingService,
@IMessageService private messageService: IMessageService
) {
super(ExtensionEditor.ID, telemetryService);
this._highlight = null;
@ -183,6 +186,11 @@ export class ExtensionEditor extends BaseEditor {
this.extensionActionBar = new ActionBar(extensionActions, { animated: false });
this.disposables.push(this.extensionActionBar);
let onActionError = fromEventEmitter<{ error?: any; }>(this.extensionActionBar, 'run');
onActionError = mapEvent(onActionError, ({ error }) => error);
onActionError = filterEvent(onActionError, error => !!error);
onActionError(this.onError, this, this.disposables);
const body = append(root, $('.body'));
this.navbar = new NavBar(body);
@ -553,6 +561,14 @@ export class ExtensionEditor extends BaseEditor {
this.editorService.closeEditor(this.position, this.input).done(null, onUnexpectedError);
}
private onError(err: any): void {
if (isPromiseCanceledError(err)) {
return;
}
this.messageService.show(Severity.Error, err);
}
dispose(): void {
this._highlight = null;
this.transientDisposables = dispose(this.transientDisposables);