Notify workspace recommendations

This commit is contained in:
Sandeep Somavarapu 2016-09-15 17:40:09 +02:00
parent 6e76999ad1
commit 07bb653f20

View file

@ -17,7 +17,7 @@ import {IStorageService, StorageScope} from 'vs/platform/storage/common/storage'
import product from 'vs/platform/product';
import { IMessageService, CloseAction } from 'vs/platform/message/common/message';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { ShowRecommendedExtensionsAction } from './extensionsActions';
import { ShowRecommendedExtensionsAction, ShowWorkspaceRecommendedExtensionsAction } from './extensionsActions';
import Severity from 'vs/base/common/severity';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
@ -44,17 +44,29 @@ export class ExtensionTipsService implements IExtensionTipsService {
return;
}
const extensionTips = product.extensionTips;
this._suggestTips();
this._suggestWorkspaceRecommendations();
}
getWorkspaceRecommendations(): string[] {
let configuration = this.configurationService.getConfiguration<IExtensionsConfiguration>(EXTENSIONS_CONFIGURAION_NAME);
return configuration.recommendations ? configuration.recommendations : [];
}
getRecommendations(): string[] {
return Object.keys(this._recommendations);
}
private _suggestTips() {
const extensionTips = product.extensionTips;
if (!extensionTips) {
return;
}
this.importantRecommendations = product.extensionImportantTips || Object.create(null);
this.importantRecommendationsIgnoreList = <string[]>JSON.parse(storageService.get('extensionsAssistant/importantRecommendationsIgnore', StorageScope.GLOBAL, '[]'));
this.importantRecommendationsIgnoreList = <string[]>JSON.parse(this.storageService.get('extensionsAssistant/importantRecommendationsIgnore', StorageScope.GLOBAL, '[]'));
// retrieve ids of previous recommendations
const storedRecommendations = <string[]>JSON.parse(storageService.get('extensionsAssistant/recommendations', StorageScope.GLOBAL, '[]'));
const storedRecommendations = <string[]>JSON.parse(this.storageService.get('extensionsAssistant/recommendations', StorageScope.GLOBAL, '[]'));
for (let id of storedRecommendations) {
this._recommendations[id] = true;
}
@ -75,15 +87,6 @@ export class ExtensionTipsService implements IExtensionTipsService {
this._modelService.getModels().forEach(model => this._suggest(model.uri));
}
getWorkspaceRecommendations(): string[] {
let configuration = this.configurationService.getConfiguration<IExtensionsConfiguration>(EXTENSIONS_CONFIGURAION_NAME);
return configuration.recommendations ? configuration.recommendations : [];
}
getRecommendations(): string[] {
return Object.keys(this._recommendations);
}
private _suggest(uri: URI): Promise<any> {
if (!uri) {
return;
@ -140,6 +143,31 @@ export class ExtensionTipsService implements IExtensionTipsService {
});
}
private _suggestWorkspaceRecommendations() {
const storageKey = 'extensionsAssistant/workspaceRecommendationsIgnore';
if (this.storageService.getBoolean(storageKey, StorageScope.WORKSPACE, false)) {
return;
}
let workspaceRecommendations = this.getWorkspaceRecommendations();
if (!workspaceRecommendations.length) {
return;
}
this.extensionsService.getInstalled().done(local => {
if (workspaceRecommendations.filter(id => local.every(local => `${local.manifest.publisher}.${local.manifest.name}` !== id)).length) {
const message = localize('workspaceRecommended', "This workspace has some extensions recommended to install.");
const neverAgainAction = new Action('neverShowAgain', localize('neverShowAgain', "Don't show again"), null, true, () => {
this.storageService.store(storageKey, true, StorageScope.WORKSPACE);
return Promise.as(true);
});
const recommendationsAction = this.instantiationService.createInstance(ShowWorkspaceRecommendedExtensionsAction, ShowWorkspaceRecommendedExtensionsAction.ID, localize('showRecommendations', "Show Recommendations"));
this.messageService.show(Severity.Info, {
message,
actions: [recommendationsAction, neverAgainAction, CloseAction]
});
}
});
}
dispose() {
this._disposables = dispose(this._disposables);
}