mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-17 02:51:36 -05:00
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:
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "sqlops",
|
"name": "sqlops",
|
||||||
"version": "0.28.6",
|
"version": "0.29.1",
|
||||||
"distro": "8c3e97e3425cc9814496472ab73e076de2ba99ee",
|
"distro": "8c3e97e3425cc9814496472ab73e076de2ba99ee",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Microsoft Corporation"
|
"name": "Microsoft Corporation"
|
||||||
|
|||||||
@@ -435,7 +435,9 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
|
|||||||
|
|
||||||
return this.queryGallery(query).then(({ galleryExtensions, total }) => {
|
return this.queryGallery(query).then(({ galleryExtensions, total }) => {
|
||||||
const extensions = galleryExtensions.map((e, index) => toExtension(e, this.extensionsGalleryUrl, index, query, options.source));
|
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 getPage = (pageIndex: number) => {
|
||||||
const nextPageQuery = query.withPage(pageIndex + 1);
|
const nextPageQuery = query.withPage(pageIndex + 1);
|
||||||
return this.queryGallery(nextPageQuery)
|
return this.queryGallery(nextPageQuery)
|
||||||
|
|||||||
@@ -177,7 +177,8 @@ export class ExtensionsViewlet extends PersistentViewsViewlet implements IExtens
|
|||||||
private createDefaultRecommendedExtensionsListViewDescriptor(): IViewDescriptor {
|
private createDefaultRecommendedExtensionsListViewDescriptor(): IViewDescriptor {
|
||||||
return {
|
return {
|
||||||
id: 'extensions.recommendedList',
|
id: 'extensions.recommendedList',
|
||||||
name: localize('recommendedExtensions', "Recommended"),
|
// {{ SQL CARBON EDIT}}
|
||||||
|
name: localize('recommendedExtensions', "Marketplace"),
|
||||||
location: ViewLocation.Extensions,
|
location: ViewLocation.Extensions,
|
||||||
ctor: RecommendedExtensionsView,
|
ctor: RecommendedExtensionsView,
|
||||||
when: ContextKeyExpr.and(ContextKeyExpr.not('searchExtensions'), ContextKeyExpr.has('defaultRecommendedExtensions')),
|
when: ContextKeyExpr.and(ContextKeyExpr.not('searchExtensions'), ContextKeyExpr.has('defaultRecommendedExtensions')),
|
||||||
|
|||||||
@@ -234,6 +234,9 @@ export class ExtensionsListView extends ViewsViewletPanel {
|
|||||||
return this.getAllRecommendationsModel(query, options);
|
return this.getAllRecommendationsModel(query, options);
|
||||||
} else if (ExtensionsListView.isRecommendedExtensionsQuery(query.value)) {
|
} else if (ExtensionsListView.isRecommendedExtensionsQuery(query.value)) {
|
||||||
return this.getRecommendationsModel(query, options);
|
return this.getRecommendationsModel(query, options);
|
||||||
|
// {{SQL CARBON EDIT}}
|
||||||
|
} else if (ExtensionsListView.isAllMarketplaceExtensionsQuery(query.value)) {
|
||||||
|
return this.getAllMarketplaceModel(query, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
let text = query.value;
|
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
|
// 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[], ) {
|
private getTrimmedRecommendations(installedExtensions: string[], value: string, fileBasedRecommendations: string[], otherRecommendations: string[], workpsaceRecommendations: string[], ) {
|
||||||
const totalCount = 8;
|
const totalCount = 8;
|
||||||
@@ -524,6 +563,11 @@ export class ExtensionsListView extends ViewsViewletPanel {
|
|||||||
static isKeymapsRecommendedExtensionsQuery(query: string): boolean {
|
static isKeymapsRecommendedExtensionsQuery(query: string): boolean {
|
||||||
return /@recommended:keymaps/i.test(query);
|
return /@recommended:keymaps/i.test(query);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// {{SQL CARBON EDIT}}
|
||||||
|
static isAllMarketplaceExtensionsQuery(query: string): boolean {
|
||||||
|
return /@allmarketplace/i.test(query);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class InstalledExtensionsView extends ExtensionsListView {
|
export class InstalledExtensionsView extends ExtensionsListView {
|
||||||
@@ -560,7 +604,8 @@ export class BuiltInExtensionsView extends ExtensionsListView {
|
|||||||
export class RecommendedExtensionsView extends ExtensionsListView {
|
export class RecommendedExtensionsView extends ExtensionsListView {
|
||||||
|
|
||||||
async show(query: string): TPromise<IPagedModel<IExtension>> {
|
async show(query: string): TPromise<IPagedModel<IExtension>> {
|
||||||
return super.show(!query.trim() ? '@recommended:all' : '@recommended');
|
// {{SQL CARBON EDIT}}
|
||||||
|
return super.show('@allmarketplace');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user