diff --git a/src/vs/platform/extensionManagement/node/extensionGalleryService.ts b/src/vs/platform/extensionManagement/node/extensionGalleryService.ts index 2143f3bd5a2c4..c23444a192df7 100644 --- a/src/vs/platform/extensionManagement/node/extensionGalleryService.ts +++ b/src/vs/platform/extensionManagement/node/extensionGalleryService.ts @@ -15,6 +15,7 @@ import product from 'vs/platform/product'; interface IRawGalleryExtensionFile { assetType: string; + source: string; } interface IRawGalleryExtensionVersion { @@ -152,15 +153,20 @@ function getStatistic(statistics: IRawGalleryExtensionStatistics[], name: string } function toExtension(galleryExtension: IRawGalleryExtension, extensionsGalleryUrl: string, downloadHeaders: any): IGalleryExtension { - const versions = galleryExtension.versions.map(v => ({ - version: v.version, - date: v.lastUpdated, - downloadHeaders, - downloadUrl: `${ v.assetUri }/${ AssetType.VSIX }?install=true`, - manifestUrl: `${ v.assetUri }/${ AssetType.Manifest }`, - readmeUrl: `${ v.assetUri }/${ AssetType.Details }`, - iconUrl: `${ v.assetUri }/${ AssetType.Icon }` - })); + const versions = galleryExtension.versions.map(v => { + const iconFile = v.files.filter(f => f.assetType === AssetType.Icon)[0]; + const iconUrl = iconFile ? iconFile.source : require.toUrl('./media/defaultIcon.png'); + + return { + version: v.version, + date: v.lastUpdated, + downloadHeaders, + downloadUrl: `${ v.assetUri }/${ AssetType.VSIX }?install=true`, + manifestUrl: `${ v.assetUri }/${ AssetType.Manifest }`, + readmeUrl: `${ v.assetUri }/${ AssetType.Details }`, + iconUrl + }; + }); return { id: galleryExtension.extensionId, @@ -213,9 +219,10 @@ export class ExtensionGalleryService implements IExtensionGalleryService { this.telemetryService.publicLog('galleryService:query', { type, text }); let query = new Query() - .withFlags(Flags.IncludeVersions, Flags.IncludeCategoryAndTags, Flags.IncludeAssetUri, Flags.IncludeStatistics) + .withFlags(Flags.IncludeVersions, Flags.IncludeCategoryAndTags, Flags.IncludeAssetUri, Flags.IncludeStatistics, Flags.IncludeFiles) .withPage(1, pageSize) - .withFilter(FilterType.Target, 'Microsoft.VisualStudio.Code'); + .withFilter(FilterType.Target, 'Microsoft.VisualStudio.Code') + .withAssetTypes(AssetType.Icon); if (text) { query = query.withFilter(FilterType.SearchText, text).withSortBy(SortBy.NoneOrRelevance); diff --git a/src/vs/platform/extensionManagement/node/media/defaultIcon.png b/src/vs/platform/extensionManagement/node/media/defaultIcon.png new file mode 100644 index 0000000000000..2f36a94347418 Binary files /dev/null and b/src/vs/platform/extensionManagement/node/media/defaultIcon.png differ diff --git a/src/vs/workbench/parts/extensions/electron-browser/extensionsWorkbenchService.ts b/src/vs/workbench/parts/extensions/electron-browser/extensionsWorkbenchService.ts index 3155ca1d20568..8d1b2d28a0688 100644 --- a/src/vs/workbench/parts/extensions/electron-browser/extensionsWorkbenchService.ts +++ b/src/vs/workbench/parts/extensions/electron-browser/extensionsWorkbenchService.ts @@ -91,7 +91,7 @@ class Extension implements IExtension { return URI.file(path.join(this.local.path, this.local.manifest.icon)).toString(); } - if (this.gallery && this.gallery.versions[0].iconUrl) { + if (this.gallery) { return this.gallery.versions[0].iconUrl; }