Show all available extensions in Extension Manager (#1273)

* Show all available extensions in Extension Manager

* Change name of functions

* Minor cleanup
This commit is contained in:
Karl Burtram
2018-04-26 10:08:02 -07:00
committed by GitHub
parent ec150917c2
commit b1752ea635
4 changed files with 52 additions and 4 deletions

View File

@@ -177,7 +177,8 @@ export class ExtensionsViewlet extends PersistentViewsViewlet implements IExtens
private createDefaultRecommendedExtensionsListViewDescriptor(): IViewDescriptor {
return {
id: 'extensions.recommendedList',
name: localize('recommendedExtensions', "Recommended"),
// {{ SQL CARBON EDIT}}
name: localize('recommendedExtensions', "Marketplace"),
location: ViewLocation.Extensions,
ctor: RecommendedExtensionsView,
when: ContextKeyExpr.and(ContextKeyExpr.not('searchExtensions'), ContextKeyExpr.has('defaultRecommendedExtensions')),

View File

@@ -234,6 +234,9 @@ export class ExtensionsListView extends ViewsViewletPanel {
return this.getAllRecommendationsModel(query, options);
} else if (ExtensionsListView.isRecommendedExtensionsQuery(query.value)) {
return this.getRecommendationsModel(query, options);
// {{SQL CARBON EDIT}}
} else if (ExtensionsListView.isAllMarketplaceExtensionsQuery(query.value)) {
return this.getAllMarketplaceModel(query, options);
}
let text = query.value;
@@ -363,6 +366,42 @@ export class ExtensionsListView extends ViewsViewletPanel {
});
}
// {{SQL CARBON EDIT}}
private getAllMarketplaceModel(query: Query, options: IQueryOptions): TPromise<IPagedModel<IExtension>> {
const value = query.value.trim().toLowerCase();
return this.extensionsWorkbenchService.queryLocal()
.then(result => result.filter(e => e.type === LocalExtensionType.User))
.then(local => {
return this.tipsService.getOtherRecommendations().then((recommmended) => {
const installedExtensions = local.map(x => `${x.publisher}.${x.name}`);
options = assign(options, { text: value, source: 'searchText' });
return TPromise.as(this.extensionsWorkbenchService.queryGallery(options).then((pager) => {
// filter out installed extensions
pager.firstPage = pager.firstPage.filter((p) => {
return installedExtensions.indexOf(`${p.publisher}.${p.name}`) === -1;
});
// sort the marketplace extensions
pager.firstPage.sort((a, b) => {
let isRecommendedA: boolean = recommmended.indexOf(`${a.publisher}.${a.name}`) > -1;
let isRecommendedB: boolean = recommmended.indexOf(`${b.publisher}.${b.name}`) > -1;
// sort recommeded extensions before other extensions
if (isRecommendedA !== isRecommendedB) {
return (isRecommendedA && !isRecommendedB) ? -1 : 1;
}
// otherwise sort by name
return a.displayName.toLowerCase() < b.displayName.toLowerCase() ? -1 : 1;
});
pager.total = pager.firstPage.length;
pager.pageSize = pager.firstPage.length;
return new PagedModel(pager || []);
}));
});
});
}
// Given all recommendations, trims and returns recommendations in the relevant order after filtering out installed extensions
private getTrimmedRecommendations(installedExtensions: string[], value: string, fileBasedRecommendations: string[], otherRecommendations: string[], workpsaceRecommendations: string[], ) {
const totalCount = 8;
@@ -524,6 +563,11 @@ export class ExtensionsListView extends ViewsViewletPanel {
static isKeymapsRecommendedExtensionsQuery(query: string): boolean {
return /@recommended:keymaps/i.test(query);
}
// {{SQL CARBON EDIT}}
static isAllMarketplaceExtensionsQuery(query: string): boolean {
return /@allmarketplace/i.test(query);
}
}
export class InstalledExtensionsView extends ExtensionsListView {
@@ -560,7 +604,8 @@ export class BuiltInExtensionsView extends ExtensionsListView {
export class RecommendedExtensionsView extends ExtensionsListView {
async show(query: string): TPromise<IPagedModel<IExtension>> {
return super.show(!query.trim() ? '@recommended:all' : '@recommended');
// {{SQL CARBON EDIT}}
return super.show('@allmarketplace');
}
}