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
This commit is contained in:
parent
244d5b460b
commit
22ac7f71b1
|
@ -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(
|
||||
|
|
Loading…
Reference in a new issue