提交 4cf316aa 编写于 作者: I isidor

add a badge to extensions activity action

上级 9958eab8
......@@ -8,14 +8,14 @@ import toolbar = require('vs/base/browser/ui/toolbar/toolbar');
import actionbar = require('vs/base/browser/ui/actionbar/actionbar');
import platform = require('vs/platform/platform');
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
import { IPluginService } from 'vs/platform/plugins/common/plugins';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import actionbarregistry = require('vs/workbench/browser/actionBarRegistry');
import { ExtensionsStatusbarItem } from 'vs/workbench/parts/extensions/electron-browser/extensionsWidgets';
import { IGalleryService } from 'vs/workbench/parts/extensions/common/extensions';
import { GlobalExtensionsAction } from './extensionsActions';
import { GlobalExtensionsAction, GlobalExtensionsActionItem } from './extensionsActions';
import { GalleryService } from 'vs/workbench/parts/extensions/node/vsoGalleryService';
import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions';
import { ExtensionsWorkbenchExtension } from 'vs/workbench/parts/extensions/electron-browser/extensionsWorkbenchExtension';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
// Register Gallery Service
registerSingleton(IGalleryService, GalleryService);
......@@ -28,12 +28,13 @@ registerSingleton(IGalleryService, GalleryService);
class GlobalExtensionsActionContributor extends actionbarregistry.ActionBarContributor {
constructor(
@IInstantiationService private instantiationService:IInstantiationService
@IInstantiationService private instantiationService: IInstantiationService,
@IPluginService private pluginService: IPluginService
) {
super();
}
public hasActions(context:any):boolean {
public hasActions(context:any): boolean {
return context === toolbar.CONTEXT;
}
......@@ -43,13 +44,13 @@ class GlobalExtensionsActionContributor extends actionbarregistry.ActionBarContr
];
}
// public getActionItem(context: any, action: actions.Action): actionbar.BaseActionItem {
// if (action.id === GlobalExtensionsAction.ID) {
// return this.instantiationService.createInstance(GlobalExtensionsActionItem, action);
// }
public getActionItem(context: any, action: actions.Action): actionbar.BaseActionItem {
if (action.id === GlobalExtensionsAction.ID) {
return new GlobalExtensionsActionItem(this.pluginService, action);
}
// return null;
// }
return null;
}
}
// Register Global Extensions Action
......
......@@ -4,8 +4,11 @@
*--------------------------------------------------------------------------------------------*/
import nls = require('vs/nls');
import Severity from 'vs/base/common/severity';
import { Promise } from 'vs/base/common/winjs.base';
import { Action } from 'vs/base/common/actions';
import { IPluginService, IPluginStatus } from 'vs/platform/plugins/common/plugins';
import { NumberBadge } from 'vs/workbench/services/activity/common/activityService';
import { ActivityActionItem } from 'vs/workbench/browser/parts/activityBar/activityAction';
import { IExtensionsService } from 'vs/workbench/parts/extensions/common/extensions';
import { IQuickOpenService } from 'vs/workbench/services/quickopen/browser/quickOpenService';
......@@ -100,3 +103,30 @@ export class GlobalExtensionsAction extends Action {
return true;
}
}
export class GlobalExtensionsActionItem extends ActivityActionItem {
private status: { [id: string]: IPluginStatus };
private severity: Severity;
private messageCount: number;
constructor(
private pluginService: IPluginService,
action: Action
) {
super(action);
this.severity = Severity.Ignore;
this.messageCount = 0;
this.pluginService.onReady().then(() => {
this.status = this.pluginService.getPluginsStatus();
Object.keys(this.status).forEach(key => {
this.severity = this.status[key].messages.reduce((maxSeverity, message) => Math.max(maxSeverity, message.type), this.severity);
this.messageCount += this.status[key].messages.length;
});
if (this.severity > Severity.Info) {
this.setBadge(new NumberBadge(this.messageCount, () => nls.localize('extensionsMessages', "There are extensions messages")));
}
});
}
}
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import nls = require('vs/nls');
import Severity from 'vs/base/common/severity';
import dom = require('vs/base/browser/dom');
import lifecycle = require('vs/base/common/lifecycle');
import statusbar = require('vs/workbench/browser/parts/statusbar/statusbar');
import { IPluginService, IPluginStatus } from 'vs/platform/plugins/common/plugins';
import { IMessageService } from 'vs/platform/message/common/message';
var $ = dom.emmet;
export class ExtensionsStatusbarItem implements statusbar.IStatusbarItem {
private toDispose: lifecycle.IDisposable[];
private severity: Severity;
private domNode: HTMLElement;
private status: { [id: string]: IPluginStatus };
constructor(
@IPluginService private pluginService: IPluginService,
@IMessageService private messageService: IMessageService
) {
this.toDispose = [];
this.severity = Severity.Ignore;
this.pluginService.onReady().then(() => {
this.status = this.pluginService.getPluginsStatus();
Object.keys(this.status).forEach(key => {
this.severity = this.status[key].messages.reduce((maxSeverity, message) => Math.max(maxSeverity, message.type), this.severity);
});
this.domNode.hidden = this.severity === Severity.Ignore;
});
}
public render(container: HTMLElement): lifecycle.IDisposable {
this.domNode = dom.append(container, $('.extensions-statusbar octicon octicon-package'));
this.domNode.title = nls.localize('extensionsStatus', "Extensions Status"),
this.domNode.hidden = true;
this.toDispose.push(dom.addDisposableListener(this.domNode, 'click', () => {
Object.keys(this.status).forEach(key => {
this.status[key].messages.forEach(m => {
if (m.type === this.severity) {
this.messageService.show(m.type, m.message);
}
});
});
}));
return {
dispose: () => lifecycle.disposeAll(this.toDispose)
};
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册