提交 22ac7f71 编写于 作者: J Johannes Rieken

remember what extension were proposed

to avoid spamming the user we remember what extension in what version trigger the status bar indication. that combination won't trigger again for 28dys
上级 244d5b46
......@@ -5,6 +5,7 @@
import nls = require('vs/nls');
import Severity from 'vs/base/common/severity';
import {forEach} from 'vs/base/common/collections';
import errors = require('vs/base/common/errors');
import dom = require('vs/base/browser/dom');
import lifecycle = require('vs/base/common/lifecycle');
......@@ -13,6 +14,7 @@ import statusbar = require('vs/workbench/browser/parts/statusbar/statusbar');
import { IPluginService, IPluginStatus } from 'vs/platform/plugins/common/plugins';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { IMessageService, CloseAction } from 'vs/platform/message/common/message';
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
import { UninstallAction } from 'vs/workbench/parts/extensions/electron-browser/extensionsActions';
import { IQuickOpenService } from 'vs/workbench/services/quickopen/common/quickOpenService';
import { IExtensionsService, IGalleryService, IExtension, IExtensionTipsService } from 'vs/workbench/parts/extensions/common/extensions';
......@@ -87,15 +89,31 @@ export class ExtensionsStatusbarItem implements statusbar.IStatusbarItem {
export class ExtensionTipsStatusbarItem implements statusbar.IStatusbarItem {
private static _dontSuggestAgainTimeout = 1000 * 60 * 60 * 24 * 28; // 4 wks
private _domNode: HTMLElement;
private _label: OcticonLabel;
private _prevTips: IExtension[] = [];
constructor(
@IQuickOpenService private _quickOpenService: IQuickOpenService,
@IExtensionTipsService private _extensionTipsService: IExtensionTipsService
@IExtensionTipsService private _extensionTipsService: IExtensionTipsService,
@IStorageService private _storageService: IStorageService
) {
const previousTips = <{ [id: string]: number }>JSON.parse(this._storageService.get('extensionsAssistant/tips', StorageScope.GLOBAL, '{}'));
// forget previous tips after 28 days
const now = Date.now();
forEach(previousTips, (entry, rm) => {
if (now - entry.value > ExtensionTipsStatusbarItem._dontSuggestAgainTimeout) {
rm();
}
});
function extid(ext: IExtension): string {
return `${ext.publisher}.${ext.name}@${ext.version}`;
};
this._extensionTipsService.onDidChangeTips(tips => {
if (tips.length === 0) {
......@@ -106,17 +124,15 @@ export class ExtensionTipsStatusbarItem implements statusbar.IStatusbarItem {
// check for new tips
let hasNewTips = false;
for (let tip of tips) {
if (this._prevTips.indexOf(tip) < 0) {
this._prevTips.push(tip);
const id = extid(tip);
if (!previousTips[id]) {
previousTips[id] = Date.now();
hasNewTips = true;
}
}
if (hasNewTips) {
dom.addClass(this._domNode, 'active');
}
// only keep 10 tips
while (this._prevTips.length > 10) {
this._prevTips.shift();
this._storageService.store('extensionsAssistant/tips', JSON.stringify(previousTips), StorageScope.GLOBAL);
}
});
}
......
......@@ -43,6 +43,9 @@ export class ExtensionsWorkbenchExtension implements IWorkbenchContribution {
this.install(options.extensionsToInstall).done(null, errors.onUnexpectedError);
}
// add service
instantiationService.addSingleton(IExtensionTipsService, this.instantiationService.createInstance(ExtensionTipsService));
const extensionsCategory = nls.localize('extensionsCategory', "Extensions");
const actionRegistry = (<wbaregistry.IWorkbenchActionRegistry> platform.Registry.as(wbaregistry.Extensions.WorkbenchActions));
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(ListExtensionsAction, ListExtensionsAction.ID, ListExtensionsAction.LABEL), extensionsCategory);
......@@ -82,7 +85,6 @@ export class ExtensionsWorkbenchExtension implements IWorkbenchContribution {
);
// add extension tips services
instantiationService.addSingleton(IExtensionTipsService, this.instantiationService.createInstance(ExtensionTipsService));
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(ListSuggestedExtensionsAction, ListSuggestedExtensionsAction.ID, ListSuggestedExtensionsAction.LABEL), extensionsCategory);
(<IQuickOpenRegistry>platform.Registry.as(Extensions.Quickopen)).registerQuickOpenHandler(
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册