From e0f7df5cfa81a27e896ff496ec3b4e6b09dea2f8 Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Tue, 28 Nov 2017 17:53:18 +0100 Subject: [PATCH] Render messages --- .../mainThreadExtensionService.ts | 3 +++ src/vs/workbench/api/node/extHost.api.impl.ts | 3 +++ src/vs/workbench/api/node/extHost.protocol.ts | 1 + .../api/node/extHostExtensionService.ts | 4 +++ .../runtimeExtensionsEditor.ts | 25 +++++++++++++++++-- .../electron-browser/extensionService.ts | 14 +++++++++++ 6 files changed, 48 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/api/electron-browser/mainThreadExtensionService.ts b/src/vs/workbench/api/electron-browser/mainThreadExtensionService.ts index bb43ce6be29..5627ee185df 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadExtensionService.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadExtensionService.ts @@ -35,4 +35,7 @@ export class MainThreadExtensionService implements MainThreadExtensionServiceSha } $onExtensionActivationFailed(extensionId: string): void { } + $addMessage(extensionId: string, severity: Severity, message: string): void { + this._extensionService._addMessage(extensionId, severity, message); + } } diff --git a/src/vs/workbench/api/node/extHost.api.impl.ts b/src/vs/workbench/api/node/extHost.api.impl.ts index 26db99c16cb..75cceb7ece0 100644 --- a/src/vs/workbench/api/node/extHost.api.impl.ts +++ b/src/vs/workbench/api/node/extHost.api.impl.ts @@ -124,6 +124,8 @@ export function createApiFactory( return function (extension: IExtensionDescription): typeof vscode { + const EXTENSION_ID = extension.id; + if (extension.enableProposedApi && !extension.isBuiltin) { if ( @@ -386,6 +388,7 @@ export function createApiFactory( // namespace: workspace const workspace: typeof vscode.workspace = { get rootPath() { + extensionService.addMessage(EXTENSION_ID, Severity.Warning, 'workspace.rootPath is deprecated'); return extHostWorkspace.getPath(); }, set rootPath(value) { diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index 1cc33c183cc..7472f9e7f90 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -352,6 +352,7 @@ export interface MainThreadExtensionServiceShape extends IDisposable { $localShowMessage(severity: Severity, msg: string): void; $onExtensionActivated(extensionId: string, startup: boolean, codeLoadingTime: number, activateCallTime: number, activateResolvedTime: number, activationEvent: string): void; $onExtensionActivationFailed(extensionId: string): void; + $addMessage(extensionId: string, severity: Severity, message: string): void; } export interface SCMProviderFeatures { diff --git a/src/vs/workbench/api/node/extHostExtensionService.ts b/src/vs/workbench/api/node/extHostExtensionService.ts index 6037012551e..0d5d3c3207f 100644 --- a/src/vs/workbench/api/node/extHostExtensionService.ts +++ b/src/vs/workbench/api/node/extHostExtensionService.ts @@ -273,6 +273,10 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape { return result; } + public addMessage(extensionId: string, severity: Severity, message: string): void { + this._proxy.$addMessage(extensionId, severity, message); + } + // --- impl private _activateExtension(extensionDescription: IExtensionDescription, reason: ExtensionActivationReason): TPromise { diff --git a/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.ts b/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.ts index a19009dffa1..0c434ada242 100644 --- a/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.ts +++ b/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.ts @@ -22,7 +22,7 @@ import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/edi import { IExtensionService, IExtensionDescription, IExtensionsStatus } from 'vs/platform/extensions/common/extensions'; import { IDelegate, IRenderer } from 'vs/base/browser/ui/list/list'; import { WorkbenchList, IListService } from 'vs/platform/list/browser/listService'; -import { append, $, addDisposableListener, addClass, toggleClass } from 'vs/base/browser/dom'; +import { append, $, addDisposableListener, addClass, toggleClass, removeClass } from 'vs/base/browser/dom'; import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; import { IMessageService, Severity } from 'vs/platform/message/common/message'; import { dispose, IDisposable } from 'vs/base/common/lifecycle'; @@ -124,9 +124,14 @@ export class RuntimeExtensionsEditor extends BaseEditor { element: HTMLElement; icon: HTMLImageElement; name: HTMLElement; + timeContainer: HTMLElement; timeIcon: HTMLElement; timeLabel: HTMLElement; + + msgIcon: HTMLElement; + msgLabel: HTMLElement; + disposables: IDisposable[]; elementDisposables: IDisposable[]; } @@ -139,9 +144,15 @@ export class RuntimeExtensionsEditor extends BaseEditor { const desc = append(element, $('div.desc')); const name = append(desc, $('div.name')); + const timeContainer = append(desc, $('div.time')); const timeIcon = append(timeContainer, $('span.octicon.octicon-clock')); const timeLabel = append(timeContainer, $('span.time-label')); + + const msgContainer = append(desc, $('div.msg')); + const msgIcon = append(msgContainer, $('.')); + const msgLabel = append(msgContainer, $('span')); + const actionbar = new ActionBar(element, { animated: false, actionItemProvider: (action: Action) => { @@ -164,6 +175,8 @@ export class RuntimeExtensionsEditor extends BaseEditor { timeContainer, timeIcon, timeLabel, + msgIcon, + msgLabel, disposables, elementDisposables: [] }; @@ -208,7 +221,15 @@ export class RuntimeExtensionsEditor extends BaseEditor { if (activationTimes.startup) { data.timeIcon.className = 'octicon octicon-clock'; } else { - data.timeIcon.className = 'octicon octicon-rocket'; + data.timeIcon.className = 'octicon octicon-dashboard'; + } + + if (element.status.messages && element.status.messages.length > 0) { + data.msgIcon.className = 'octicon octicon-alert'; + data.msgLabel.textContent = element.status.messages[0].message; + } else { + data.msgIcon.className = ''; + data.msgLabel.textContent = ''; } }, diff --git a/src/vs/workbench/services/extensions/electron-browser/extensionService.ts b/src/vs/workbench/services/extensions/electron-browser/extensionService.ts index f19e7cd3d3a..1b24e124d6d 100644 --- a/src/vs/workbench/services/extensions/electron-browser/extensionService.ts +++ b/src/vs/workbench/services/extensions/electron-browser/extensionService.ts @@ -510,6 +510,20 @@ export class ExtensionService extends Disposable implements IExtensionService { this._extensionHostProcessActivationTimes[extensionId] = new ActivationTimes(startup, codeLoadingTime, activateCallTime, activateResolvedTime, activationEvent); this._onDidChangeExtensionsStatus.fire([extensionId]); } + + public _addMessage(extensionId: string, severity: Severity, message: string): void { + if (!this._extensionsMessages[extensionId]) { + this._extensionsMessages[extensionId] = []; + } + this._extensionsMessages[extensionId].push({ + type: severity, + message: message, + source: null, + extensionId: null, + extensionPointId: null + }); + this._onDidChangeExtensionsStatus.fire([extensionId]); + } } export class Logger implements ILog {