From 7fd4a286715588afe3b698b20488e0efa9b6259a Mon Sep 17 00:00:00 2001 From: Joao Moreno Date: Mon, 15 Aug 2016 15:42:07 +0200 Subject: [PATCH] show license link only if extension sets one fixes #10464 --- .../common/extensionManagement.ts | 1 + .../node/extensionGalleryService.ts | 34 ++++++++++--------- .../electron-browser/extensionEditor.ts | 11 ++++-- .../extensions/electron-browser/extensions.ts | 1 + .../extensionsWorkbenchService.ts | 8 +++++ 5 files changed, 37 insertions(+), 18 deletions(-) diff --git a/src/vs/platform/extensionManagement/common/extensionManagement.ts b/src/vs/platform/extensionManagement/common/extensionManagement.ts index df2c7b25e93..d5b93c04211 100644 --- a/src/vs/platform/extensionManagement/common/extensionManagement.ts +++ b/src/vs/platform/extensionManagement/common/extensionManagement.ts @@ -29,6 +29,7 @@ export interface IGalleryVersion { readmeUrl: string; downloadUrl: string; iconUrl: string; + licenseUrl: string; downloadHeaders: { [key: string]: string; }; } diff --git a/src/vs/platform/extensionManagement/node/extensionGalleryService.ts b/src/vs/platform/extensionManagement/node/extensionGalleryService.ts index c23444a192d..d5c8e5e9012 100644 --- a/src/vs/platform/extensionManagement/node/extensionGalleryService.ts +++ b/src/vs/platform/extensionManagement/node/extensionGalleryService.ts @@ -68,7 +68,8 @@ const AssetType = { Icon: 'Microsoft.VisualStudio.Services.Icons.Default', Details: 'Microsoft.VisualStudio.Services.Content.Details', Manifest: 'Microsoft.VisualStudio.Code.Manifest', - VSIX: 'Microsoft.VisualStudio.Services.VSIXPackage' + VSIX: 'Microsoft.VisualStudio.Services.VSIXPackage', + License: 'Microsoft.VisualStudio.Services.Content.License' }; interface ICriterium { @@ -152,21 +153,22 @@ function getStatistic(statistics: IRawGalleryExtensionStatistics[], name: string return result ? result.value : 0; } +function getAssetSource(files: IRawGalleryExtensionFile[], type: string): string { + const result = files.filter(f => f.assetType === type)[0]; + return result && result.source; +} + function toExtension(galleryExtension: IRawGalleryExtension, extensionsGalleryUrl: string, downloadHeaders: any): IGalleryExtension { - 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 - }; - }); + 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: getAssetSource(v.files, AssetType.Icon) || require.toUrl('./media/defaultIcon.png'), + licenseUrl: getAssetSource(v.files, AssetType.License) + })); return { id: galleryExtension.extensionId, @@ -222,7 +224,7 @@ export class ExtensionGalleryService implements IExtensionGalleryService { .withFlags(Flags.IncludeVersions, Flags.IncludeCategoryAndTags, Flags.IncludeAssetUri, Flags.IncludeStatistics, Flags.IncludeFiles) .withPage(1, pageSize) .withFilter(FilterType.Target, 'Microsoft.VisualStudio.Code') - .withAssetTypes(AssetType.Icon); + .withAssetTypes(AssetType.Icon, AssetType.License); if (text) { query = query.withFilter(FilterType.SearchText, text).withSortBy(SortBy.NoneOrRelevance); diff --git a/src/vs/workbench/parts/extensions/electron-browser/extensionEditor.ts b/src/vs/workbench/parts/extensions/electron-browser/extensionEditor.ts index d6fe2af2d09..5e5ff68cecc 100644 --- a/src/vs/workbench/parts/extensions/electron-browser/extensionEditor.ts +++ b/src/vs/workbench/parts/extensions/electron-browser/extensionEditor.ts @@ -109,6 +109,7 @@ export class ExtensionEditor extends BaseEditor { this.license = append(subtitle, $('a.license')); this.license.href = '#'; this.license.textContent = localize('license', 'License'); + this.license.style.display = 'none'; this.description = append(details, $('.description')); @@ -131,16 +132,22 @@ export class ExtensionEditor extends BaseEditor { if (product.extensionsGallery) { const extensionUrl = `${ product.extensionsGallery.itemUrl }?itemName=${ extension.publisher }.${ extension.name }`; - const licenseUrl = `${ product.extensionsGallery.itemUrl }/${ extension.publisher }.${ extension.name }/license`; this.name.onclick = finalHandler(() => shell.openExternal(extensionUrl)); - this.license.onclick = finalHandler(() => shell.openExternal(licenseUrl)); this.rating.onclick = finalHandler(() => shell.openExternal(`${ extensionUrl }#review-details`)); this.publisher.onclick = finalHandler(() => { this.viewletService.openViewlet(VIEWLET_ID, true) .then(viewlet => viewlet as IExtensionsViewlet) .done(viewlet => viewlet.search(`publisher:"${ extension.publisherDisplayName }"`, true)); }); + + if (extension.licenseUrl) { + this.license.onclick = finalHandler(() => shell.openExternal(extension.licenseUrl)); + this.license.style.display = 'initial'; + } else { + this.license.onclick = null; + this.license.style.display = 'none'; + } } const install = this.instantiationService.createInstance(InstallWidget, this.installCount, { extension }); diff --git a/src/vs/workbench/parts/extensions/electron-browser/extensions.ts b/src/vs/workbench/parts/extensions/electron-browser/extensions.ts index 098c6301291..25c7d7281df 100644 --- a/src/vs/workbench/parts/extensions/electron-browser/extensions.ts +++ b/src/vs/workbench/parts/extensions/electron-browser/extensions.ts @@ -34,6 +34,7 @@ export interface IExtension { description: string; readmeUrl: string; iconUrl: string; + licenseUrl: string; installCount: number; rating: number; ratingCount: number; diff --git a/src/vs/workbench/parts/extensions/electron-browser/extensionsWorkbenchService.ts b/src/vs/workbench/parts/extensions/electron-browser/extensionsWorkbenchService.ts index f4f450a990e..32e32d6aa33 100644 --- a/src/vs/workbench/parts/extensions/electron-browser/extensionsWorkbenchService.ts +++ b/src/vs/workbench/parts/extensions/electron-browser/extensionsWorkbenchService.ts @@ -98,6 +98,14 @@ class Extension implements IExtension { return require.toUrl('./media/defaultIcon.png'); } + get licenseUrl(): string { + if (this.gallery) { + return this.gallery.versions[0].licenseUrl; + } + + return null; + } + get state(): ExtensionState { return this.stateProvider(this); } -- GitLab