From b1752ea6358f9c7695ab09662ed83e7763f1a2cb Mon Sep 17 00:00:00 2001 From: Karl Burtram Date: Thu, 26 Apr 2018 10:08:02 -0700 Subject: [PATCH] Show all available extensions in Extension Manager (#1273) * Show all available extensions in Extension Manager * Change name of functions * Minor cleanup --- package.json | 2 +- .../node/extensionGalleryService.ts | 4 +- .../electron-browser/extensionsViewlet.ts | 3 +- .../electron-browser/extensionsViews.ts | 47 ++++++++++++++++++- 4 files changed, 52 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 38f2047659..417589279a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sqlops", - "version": "0.28.6", + "version": "0.29.1", "distro": "8c3e97e3425cc9814496472ab73e076de2ba99ee", "author": { "name": "Microsoft Corporation" diff --git a/src/vs/platform/extensionManagement/node/extensionGalleryService.ts b/src/vs/platform/extensionManagement/node/extensionGalleryService.ts index 6e4fb6454a..f6a9dfaccf 100644 --- a/src/vs/platform/extensionManagement/node/extensionGalleryService.ts +++ b/src/vs/platform/extensionManagement/node/extensionGalleryService.ts @@ -435,7 +435,9 @@ export class ExtensionGalleryService implements IExtensionGalleryService { return this.queryGallery(query).then(({ galleryExtensions, total }) => { const extensions = galleryExtensions.map((e, index) => toExtension(e, this.extensionsGalleryUrl, index, query, options.source)); - const pageSize = query.pageSize; + + // {{SQL CARBON EDIT}} + const pageSize = extensions.length; const getPage = (pageIndex: number) => { const nextPageQuery = query.withPage(pageIndex + 1); return this.queryGallery(nextPageQuery) diff --git a/src/vs/workbench/parts/extensions/electron-browser/extensionsViewlet.ts b/src/vs/workbench/parts/extensions/electron-browser/extensionsViewlet.ts index d4137b9fd4..b1679a40f2 100644 --- a/src/vs/workbench/parts/extensions/electron-browser/extensionsViewlet.ts +++ b/src/vs/workbench/parts/extensions/electron-browser/extensionsViewlet.ts @@ -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')), diff --git a/src/vs/workbench/parts/extensions/electron-browser/extensionsViews.ts b/src/vs/workbench/parts/extensions/electron-browser/extensionsViews.ts index b55d628af4..33d5a7c7bd 100644 --- a/src/vs/workbench/parts/extensions/electron-browser/extensionsViews.ts +++ b/src/vs/workbench/parts/extensions/electron-browser/extensionsViews.ts @@ -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> { + 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> { - return super.show(!query.trim() ? '@recommended:all' : '@recommended'); + // {{SQL CARBON EDIT}} + return super.show('@allmarketplace'); } }