@@ -7,7 +7,7 @@ import { tmpdir } from 'os';
77import * as path from 'path' ;
88import { distinct } from 'vs/base/common/arrays' ;
99import { getErrorMessage , isPromiseCanceledError , canceled } from 'vs/base/common/errors' ;
10- import { StatisticType , IGalleryExtension , IExtensionGalleryService , IGalleryExtensionAsset , IQueryOptions , SortBy , SortOrder , IExtensionIdentifier , IReportedExtension , InstallOperation , ITranslation , IGalleryExtensionVersion , IGalleryExtensionAssets } from 'vs/platform/extensionManagement/common/extensionManagement' ;
10+ import { StatisticType , IGalleryExtension , IExtensionGalleryService , IGalleryExtensionAsset , IQueryOptions , SortBy , SortOrder , IExtensionIdentifier , IReportedExtension , InstallOperation , ITranslation , IGalleryExtensionVersion , IGalleryExtensionAssets , isIExtensionIdentifier } from 'vs/platform/extensionManagement/common/extensionManagement' ;
1111import { getGalleryExtensionId , getGalleryExtensionTelemetryData , adoptToGalleryExtensionId } from 'vs/platform/extensionManagement/common/extensionManagementUtil' ;
1212import { assign , getOrDefault } from 'vs/base/common/objects' ;
1313import { IRequestService } from 'vs/platform/request/node/request' ;
@@ -351,29 +351,49 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
351351 return ! ! this . extensionsGalleryUrl ;
352352 }
353353
354- getExtension ( { id, uuid } : IExtensionIdentifier , version ?: string ) : Promise < IGalleryExtension | null > {
354+ getCompatibleExtension ( arg1 : IExtensionIdentifier | IGalleryExtension , version ?: string ) : Promise < IGalleryExtension | null > {
355+ const extension : IGalleryExtension | null = isIExtensionIdentifier ( arg1 ) ? null : arg1 ;
356+ if ( extension && extension . properties . engine && isEngineValid ( extension . properties . engine ) ) {
357+ return Promise . resolve ( extension ) ;
358+ }
359+ const { id, uuid } = extension ? extension . identifier : < IExtensionIdentifier > arg1 ;
355360 let query = new Query ( )
356361 . withFlags ( Flags . IncludeAssetUri , Flags . IncludeStatistics , Flags . IncludeFiles , Flags . IncludeVersionProperties , Flags . ExcludeNonValidated )
357362 . withPage ( 1 , 1 )
358363 . withFilter ( FilterType . Target , 'Microsoft.VisualStudio.Code' )
359- . withFilter ( FilterType . ExcludeWithFlags , flagsToString ( Flags . Unpublished ) ) ;
364+ . withFilter ( FilterType . ExcludeWithFlags , flagsToString ( Flags . Unpublished ) )
365+ . withAssetTypes ( AssetType . Manifest , AssetType . VSIX ) ;
360366
361367 if ( uuid ) {
362368 query = query . withFilter ( FilterType . ExtensionId , uuid ) ;
363369 } else {
364370 query = query . withFilter ( FilterType . ExtensionName , id ) ;
365371 }
366372
367- return this . queryGallery ( query , CancellationToken . None ) . then ( ( { galleryExtensions } ) => {
368- if ( galleryExtensions . length ) {
369- const galleryExtension = galleryExtensions [ 0 ] ;
370- const versionAsset = version ? galleryExtension . versions . filter ( v => v . version === version ) [ 0 ] : galleryExtension . versions [ 0 ] ;
371- if ( versionAsset ) {
372- return toExtension ( galleryExtension , versionAsset , 0 , query ) ;
373+ return this . queryGallery ( query , CancellationToken . None )
374+ . then ( ( { galleryExtensions } ) => {
375+ const [ rawExtension ] = galleryExtensions ;
376+ if ( ! rawExtension || ! rawExtension . versions . length ) {
377+ return null ;
373378 }
374- }
375- return null ;
376- } ) ;
379+ if ( version ) {
380+ const versionAsset = rawExtension . versions . filter ( v => v . version === version ) [ 0 ] ;
381+ if ( versionAsset ) {
382+ const extension = toExtension ( rawExtension , versionAsset , 0 , query ) ;
383+ if ( extension . properties . engine && isEngineValid ( extension . properties . engine ) ) {
384+ return extension ;
385+ }
386+ }
387+ return null ;
388+ }
389+ return this . getLastValidExtensionVersion ( rawExtension , rawExtension . versions )
390+ . then ( rawVersion => {
391+ if ( rawVersion ) {
392+ return toExtension ( rawExtension , rawVersion , 0 , query ) ;
393+ }
394+ return null ;
395+ } ) ;
396+ } ) ;
377397 }
378398
379399 query ( options : IQueryOptions = { } ) : Promise < IPager < IGalleryExtension > > {
@@ -604,59 +624,6 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
604624 } ) ;
605625 }
606626
607- loadCompatibleVersion ( extension : IGalleryExtension , fromVersion : string = extension . version ) : Promise < IGalleryExtension | null > {
608- if ( extension . version === fromVersion && extension . properties . engine && isEngineValid ( extension . properties . engine ) ) {
609- return Promise . resolve ( extension ) ;
610- }
611- const query = new Query ( )
612- . withFlags ( Flags . IncludeVersions , Flags . IncludeFiles , Flags . IncludeVersionProperties , Flags . ExcludeNonValidated )
613- . withPage ( 1 , 1 )
614- . withFilter ( FilterType . Target , 'Microsoft.VisualStudio.Code' )
615- . withFilter ( FilterType . ExcludeWithFlags , flagsToString ( Flags . Unpublished ) )
616- . withAssetTypes ( AssetType . Manifest , AssetType . VSIX )
617- . withFilter ( FilterType . ExtensionId , extension . identifier . uuid ) ;
618-
619- return this . queryGallery ( query , CancellationToken . None )
620- . then ( ( { galleryExtensions } ) => {
621- const [ rawExtension ] = galleryExtensions ;
622-
623- if ( ! rawExtension ) {
624- return null ;
625- }
626-
627- const versions : IRawGalleryExtensionVersion [ ] = this . getVersionsFrom ( rawExtension . versions , fromVersion ) ;
628- if ( ! versions . length ) {
629- return null ;
630- }
631-
632- return this . getLastValidExtensionVersion ( rawExtension , versions )
633- . then ( rawVersion => {
634- if ( rawVersion ) {
635- return toExtension ( rawExtension , rawVersion , 0 , query ) ;
636- }
637- return null ;
638- } ) ;
639- } ) ;
640- }
641-
642- private getVersionsFrom ( versions : IRawGalleryExtensionVersion [ ] , version : string ) : IRawGalleryExtensionVersion [ ] {
643- if ( versions [ 0 ] . version === version ) {
644- return versions ;
645- }
646- const result : IRawGalleryExtensionVersion [ ] = [ ] ;
647- let currentVersion : IRawGalleryExtensionVersion | null = null ;
648- for ( const v of versions ) {
649- if ( ! currentVersion ) {
650- if ( v . version === version ) {
651- currentVersion = v ;
652- }
653- }
654- if ( currentVersion ) {
655- result . push ( v ) ;
656- }
657- }
658- return result ;
659- }
660627
661628 private loadDependencies ( extensionNames : string [ ] , token : CancellationToken ) : Promise < IGalleryExtension [ ] > {
662629 if ( ! extensionNames || extensionNames . length === 0 ) {
0 commit comments