提交 69de88a2 编写于 作者: S Sandeep Somavarapu

cache scanned extensions

上级 6babe3a5
...@@ -130,6 +130,9 @@ export class ExtensionsViewletViewsContribution implements IWorkbenchContributio ...@@ -130,6 +130,9 @@ export class ExtensionsViewletViewsContribution implements IWorkbenchContributio
if (this.extensionManagementServerService.remoteExtensionManagementServer) { if (this.extensionManagementServerService.remoteExtensionManagementServer) {
servers.push(this.extensionManagementServerService.remoteExtensionManagementServer); servers.push(this.extensionManagementServerService.remoteExtensionManagementServer);
} }
if (servers.length === 0 && this.extensionManagementServerService.webExtensionManagementServer) {
servers.push(this.extensionManagementServerService.webExtensionManagementServer);
}
const getViewName = (viewTitle: string, server: IExtensionManagementServer): string => { const getViewName = (viewTitle: string, server: IExtensionManagementServer): string => {
return servers.length > 1 ? `${server.label} - ${viewTitle}` : viewTitle; return servers.length > 1 ? `${server.label} - ${viewTitle}` : viewTitle;
}; };
......
...@@ -21,6 +21,8 @@ import { IGalleryExtension } from 'vs/platform/extensionManagement/common/extens ...@@ -21,6 +21,8 @@ import { IGalleryExtension } from 'vs/platform/extensionManagement/common/extens
import { groupByExtension, areSameExtensions, getGalleryExtensionId } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; import { groupByExtension, areSameExtensions, getGalleryExtensionId } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { IStaticExtension } from 'vs/workbench/workbench.web.api'; import { IStaticExtension } from 'vs/workbench/workbench.web.api';
import { Disposable } from 'vs/base/common/lifecycle';
import { Event } from 'vs/base/common/event';
interface IUserExtension { interface IUserExtension {
identifier: IExtensionIdentifier; identifier: IExtensionIdentifier;
...@@ -44,7 +46,7 @@ const AssetTypeWebResource = 'Microsoft.VisualStudio.Code.WebResources'; ...@@ -44,7 +46,7 @@ const AssetTypeWebResource = 'Microsoft.VisualStudio.Code.WebResources';
function getExtensionLocation(assetUri: URI): URI { return joinPath(assetUri, AssetTypeWebResource, 'extension'); } function getExtensionLocation(assetUri: URI): URI { return joinPath(assetUri, AssetTypeWebResource, 'extension'); }
export class WebExtensionsScannerService implements IWebExtensionsScannerService { export class WebExtensionsScannerService extends Disposable implements IWebExtensionsScannerService {
declare readonly _serviceBrand: undefined; declare readonly _serviceBrand: undefined;
...@@ -53,6 +55,8 @@ export class WebExtensionsScannerService implements IWebExtensionsScannerService ...@@ -53,6 +55,8 @@ export class WebExtensionsScannerService implements IWebExtensionsScannerService
private readonly extensionsResource: URI | undefined = undefined; private readonly extensionsResource: URI | undefined = undefined;
private readonly userExtensionsResourceLimiter: Queue<IUserExtension[]> = new Queue<IUserExtension[]>(); private readonly userExtensionsResourceLimiter: Queue<IUserExtension[]> = new Queue<IUserExtension[]>();
private userExtensionsPromise: Promise<IScannedExtension[]> | undefined;
constructor( constructor(
@IWorkbenchEnvironmentService private readonly environmentService: IWorkbenchEnvironmentService, @IWorkbenchEnvironmentService private readonly environmentService: IWorkbenchEnvironmentService,
@IBuiltinExtensionsScannerService private readonly builtinExtensionsScannerService: IBuiltinExtensionsScannerService, @IBuiltinExtensionsScannerService private readonly builtinExtensionsScannerService: IBuiltinExtensionsScannerService,
...@@ -61,10 +65,14 @@ export class WebExtensionsScannerService implements IWebExtensionsScannerService ...@@ -61,10 +65,14 @@ export class WebExtensionsScannerService implements IWebExtensionsScannerService
@ILogService private readonly logService: ILogService, @ILogService private readonly logService: ILogService,
@IConfigurationService private readonly configurationService: IConfigurationService, @IConfigurationService private readonly configurationService: IConfigurationService,
) { ) {
super();
if (isWeb) { if (isWeb) {
this.extensionsResource = joinPath(environmentService.userRoamingDataHome, 'extensions.json'); this.extensionsResource = joinPath(environmentService.userRoamingDataHome, 'extensions.json');
this.systemExtensionsPromise = this.builtinExtensionsScannerService.scanBuiltinExtensions(); this.systemExtensionsPromise = this.builtinExtensionsScannerService.scanBuiltinExtensions();
this.defaultExtensionsPromise = this.readDefaultExtensions(); this.defaultExtensionsPromise = this.readDefaultExtensions();
if (this.extensionsResource) {
this._register(Event.filter(this.fileService.onDidFilesChange, e => e.contains(this.extensionsResource!))(() => this.userExtensionsPromise = undefined));
}
} }
} }
...@@ -113,7 +121,10 @@ export class WebExtensionsScannerService implements IWebExtensionsScannerService ...@@ -113,7 +121,10 @@ export class WebExtensionsScannerService implements IWebExtensionsScannerService
if (type === undefined || type === ExtensionType.User) { if (type === undefined || type === ExtensionType.User) {
const staticExtensions = await this.defaultExtensionsPromise; const staticExtensions = await this.defaultExtensionsPromise;
extensions.push(...staticExtensions); extensions.push(...staticExtensions);
const userExtensions = await this.scanUserExtensions(); if (!this.userExtensionsPromise) {
this.userExtensionsPromise = this.scanUserExtensions();
}
const userExtensions = await this.userExtensionsPromise;
extensions.push(...userExtensions); extensions.push(...userExtensions);
} }
return extensions; return extensions;
...@@ -149,7 +160,7 @@ export class WebExtensionsScannerService implements IWebExtensionsScannerService ...@@ -149,7 +160,7 @@ export class WebExtensionsScannerService implements IWebExtensionsScannerService
async removeExtension(identifier: IExtensionIdentifier, version?: string): Promise<void> { async removeExtension(identifier: IExtensionIdentifier, version?: string): Promise<void> {
let userExtensions = await this.readUserExtensions(); let userExtensions = await this.readUserExtensions();
userExtensions = userExtensions.filter(extension => !(areSameExtensions(extension.identifier, identifier) && version ? extension.version === version : true)); userExtensions = userExtensions.filter(extension => !(areSameExtensions(extension.identifier, identifier) && (version ? extension.version === version : true)));
await this.writeUserExtensions(userExtensions); await this.writeUserExtensions(userExtensions);
} }
...@@ -226,6 +237,7 @@ export class WebExtensionsScannerService implements IWebExtensionsScannerService ...@@ -226,6 +237,7 @@ export class WebExtensionsScannerService implements IWebExtensionsScannerService
packageNLSUri: e.packageNLSUri?.toJSON(), packageNLSUri: e.packageNLSUri?.toJSON(),
})); }));
await this.fileService.writeFile(this.extensionsResource!, VSBuffer.fromString(JSON.stringify(storedUserExtensions))); await this.fileService.writeFile(this.extensionsResource!, VSBuffer.fromString(JSON.stringify(storedUserExtensions)));
this.userExtensionsPromise = undefined;
return userExtensions; return userExtensions;
}); });
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册