Path: blob/main/src/vs/workbench/services/extensionManagement/common/remoteExtensionManagementService.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { IChannel } from '../../../../base/parts/ipc/common/ipc.js';6import { URI } from '../../../../base/common/uri.js';7import { DidChangeProfileEvent, IProfileAwareExtensionManagementService } from './extensionManagement.js';8import { IUriIdentityService } from '../../../../platform/uriIdentity/common/uriIdentity.js';9import { IRemoteUserDataProfilesService } from '../../userDataProfile/common/remoteUserDataProfiles.js';10import { ProfileAwareExtensionManagementChannelClient } from './extensionManagementChannelClient.js';11import { IUserDataProfileService } from '../../userDataProfile/common/userDataProfile.js';12import { IUserDataProfilesService } from '../../../../platform/userDataProfile/common/userDataProfile.js';13import { ExtensionIdentifier } from '../../../../platform/extensions/common/extensions.js';14import { IProductService } from '../../../../platform/product/common/productService.js';15import { IAllowedExtensionsService } from '../../../../platform/extensionManagement/common/extensionManagement.js';1617export class RemoteExtensionManagementService extends ProfileAwareExtensionManagementChannelClient implements IProfileAwareExtensionManagementService {1819constructor(20channel: IChannel,21@IProductService productService: IProductService,22@IAllowedExtensionsService allowedExtensionsService: IAllowedExtensionsService,23@IUserDataProfileService userDataProfileService: IUserDataProfileService,24@IUserDataProfilesService private readonly userDataProfilesService: IUserDataProfilesService,25@IRemoteUserDataProfilesService private readonly remoteUserDataProfilesService: IRemoteUserDataProfilesService,26@IUriIdentityService uriIdentityService: IUriIdentityService27) {28super(channel, productService, allowedExtensionsService, userDataProfileService, uriIdentityService);29}3031protected async filterEvent(profileLocation: URI, applicationScoped: boolean): Promise<boolean> {32if (applicationScoped) {33return true;34}35if (!profileLocation && this.userDataProfileService.currentProfile.isDefault) {36return true;37}38const currentRemoteProfile = await this.remoteUserDataProfilesService.getRemoteProfile(this.userDataProfileService.currentProfile);39if (this.uriIdentityService.extUri.isEqual(currentRemoteProfile.extensionsResource, profileLocation)) {40return true;41}42return false;43}4445protected override getProfileLocation(profileLocation: URI): Promise<URI>;46protected override getProfileLocation(profileLocation?: URI): Promise<URI | undefined>;47protected override async getProfileLocation(profileLocation?: URI): Promise<URI | undefined> {48if (!profileLocation && this.userDataProfileService.currentProfile.isDefault) {49return undefined;50}51profileLocation = await super.getProfileLocation(profileLocation);52let profile = this.userDataProfilesService.profiles.find(p => this.uriIdentityService.extUri.isEqual(p.extensionsResource, profileLocation));53if (profile) {54profile = await this.remoteUserDataProfilesService.getRemoteProfile(profile);55} else {56profile = (await this.remoteUserDataProfilesService.getRemoteProfiles()).find(p => this.uriIdentityService.extUri.isEqual(p.extensionsResource, profileLocation));57}58return profile?.extensionsResource;59}6061protected override async switchExtensionsProfile(previousProfileLocation: URI, currentProfileLocation: URI, preserveExtensions?: ExtensionIdentifier[]): Promise<DidChangeProfileEvent> {62const remoteProfiles = await this.remoteUserDataProfilesService.getRemoteProfiles();63const previousProfile = remoteProfiles.find(p => this.uriIdentityService.extUri.isEqual(p.extensionsResource, previousProfileLocation));64const currentProfile = remoteProfiles.find(p => this.uriIdentityService.extUri.isEqual(p.extensionsResource, currentProfileLocation));65if (previousProfile?.id === currentProfile?.id) {66return { added: [], removed: [] };67}68return super.switchExtensionsProfile(previousProfileLocation, currentProfileLocation, preserveExtensions);69}70}717273