Skip to content

Commit 28ab934

Browse files
authored
1 parent c5549bc commit 28ab934

File tree

3 files changed

+49
-67
lines changed

3 files changed

+49
-67
lines changed

src/vs/workbench/contrib/extensions/electron-sandbox/extensions.contribution.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ import { DebugExtensionHostAction, DebugExtensionsContribution } from './debugEx
2323
import { ExtensionHostProfileService } from './extensionProfileService.js';
2424
import { CleanUpExtensionsFolderAction, OpenExtensionsFolderAction } from './extensionsActions.js';
2525
import { ExtensionsAutoProfiler } from './extensionsAutoProfiler.js';
26-
import { InstallFailedExtensions } from './installFailedExtensions.js';
27-
import { RemoteExtensionsInitializerContribution } from './remoteExtensionsInit.js';
26+
import { InstallFailedRemoteExtensionsContribution, RemoteExtensionsInitializerContribution } from './remoteExtensionsInit.js';
2827
import { IExtensionHostProfileService, OpenExtensionHostProfileACtion, RuntimeExtensionsEditor, SaveExtensionHostProfileAction, StartExtensionHostProfileAction, StopExtensionHostProfileAction } from './runtimeExtensionsEditor.js';
2928

3029
// Singletons
@@ -72,8 +71,8 @@ const workbenchRegistry = Registry.as<IWorkbenchContributionsRegistry>(Workbench
7271
workbenchRegistry.registerWorkbenchContribution(ExtensionsContributions, LifecyclePhase.Restored);
7372
workbenchRegistry.registerWorkbenchContribution(ExtensionsAutoProfiler, LifecyclePhase.Eventually);
7473
workbenchRegistry.registerWorkbenchContribution(RemoteExtensionsInitializerContribution, LifecyclePhase.Restored);
74+
workbenchRegistry.registerWorkbenchContribution(InstallFailedRemoteExtensionsContribution, LifecyclePhase.Restored);
7575
workbenchRegistry.registerWorkbenchContribution(DebugExtensionsContribution, LifecyclePhase.Restored);
76-
workbenchRegistry.registerWorkbenchContribution(InstallFailedExtensions, LifecyclePhase.Restored);
7776

7877
// Register Commands
7978

@@ -82,4 +81,3 @@ registerAction2(StartExtensionHostProfileAction);
8281
registerAction2(StopExtensionHostProfileAction);
8382
registerAction2(SaveExtensionHostProfileAction);
8483
registerAction2(OpenExtensionHostProfileACtion);
85-

src/vs/workbench/contrib/extensions/electron-sandbox/installFailedExtensions.ts

Lines changed: 0 additions & 62 deletions
This file was deleted.

src/vs/workbench/contrib/extensions/electron-sandbox/remoteExtensionsInit.ts

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@
55

66
import { CancellationToken } from '../../../../base/common/cancellation.js';
77
import { IEnvironmentService } from '../../../../platform/environment/common/environment.js';
8-
import { IExtensionGalleryService, IExtensionManagementService } from '../../../../platform/extensionManagement/common/extensionManagement.js';
8+
import { IExtensionGalleryService, IExtensionManagementService, InstallExtensionInfo } from '../../../../platform/extensionManagement/common/extensionManagement.js';
99
import { areSameExtensions } from '../../../../platform/extensionManagement/common/extensionManagementUtil.js';
1010
import { IFileService } from '../../../../platform/files/common/files.js';
1111
import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';
1212
import { ServiceCollection } from '../../../../platform/instantiation/common/serviceCollection.js';
1313
import { ILogService } from '../../../../platform/log/common/log.js';
1414
import { IRemoteAuthorityResolverService } from '../../../../platform/remote/common/remoteAuthorityResolver.js';
15+
import { IRemoteExtensionsScannerService } from '../../../../platform/remote/common/remoteExtensionsScanner.js';
1516
import { IStorageService, IS_NEW_KEY, StorageScope, StorageTarget } from '../../../../platform/storage/common/storage.js';
1617
import { IUriIdentityService } from '../../../../platform/uriIdentity/common/uriIdentity.js';
1718
import { IUserDataProfilesService } from '../../../../platform/userDataProfile/common/userDataProfile.js';
@@ -25,6 +26,51 @@ import { IExtensionManagementServerService } from '../../../services/extensionMa
2526
import { IExtensionManifestPropertiesService } from '../../../services/extensions/common/extensionManifestPropertiesService.js';
2627
import { IRemoteAgentService } from '../../../services/remote/common/remoteAgentService.js';
2728

29+
export class InstallFailedRemoteExtensionsContribution implements IWorkbenchContribution {
30+
constructor(
31+
@IRemoteAgentService private readonly remoteAgentService: IRemoteAgentService,
32+
@IRemoteExtensionsScannerService private readonly remoteExtensionsScannerService: IRemoteExtensionsScannerService,
33+
@IExtensionGalleryService private readonly extensionGalleryService: IExtensionGalleryService,
34+
@IExtensionManagementServerService private readonly extensionManagementServerService: IExtensionManagementServerService,
35+
@ILogService private readonly logService: ILogService
36+
) {
37+
this.installFailedRemoteExtensions();
38+
}
39+
40+
private async installFailedRemoteExtensions(): Promise<void> {
41+
if (!this.remoteAgentService.getConnection()) {
42+
return;
43+
}
44+
45+
const { failed } = await this.remoteExtensionsScannerService.whenExtensionsReady();
46+
if (failed.length === 0) {
47+
this.logService.trace('No extensions relayed from server');
48+
return;
49+
}
50+
51+
if (!this.extensionManagementServerService.remoteExtensionManagementServer) {
52+
this.logService.error('No remote extension management server available');
53+
return;
54+
}
55+
56+
this.logService.info(`Installing '${failed.length}' extensions relayed from server`);
57+
const galleryExtensions = await this.extensionGalleryService.getExtensions(failed.map(({ id }) => ({ id })), CancellationToken.None);
58+
const installExtensionInfo: InstallExtensionInfo[] = [];
59+
for (const { id, installOptions } of failed) {
60+
const extension = galleryExtensions.find(e => areSameExtensions(e.identifier, { id }));
61+
if (extension) {
62+
installExtensionInfo.push({ extension, options: installOptions });
63+
} else {
64+
this.logService.warn(`Relayed failed extension '${id}' from server is not found in the gallery`);
65+
}
66+
}
67+
68+
if (installExtensionInfo.length) {
69+
await this.extensionManagementServerService.remoteExtensionManagementServer.extensionManagementService.installGalleryExtensions(installExtensionInfo);
70+
}
71+
}
72+
}
73+
2874
export class RemoteExtensionsInitializerContribution implements IWorkbenchContribution {
2975
constructor(
3076
@IExtensionManagementServerService private readonly extensionManagementServerService: IExtensionManagementServerService,

0 commit comments

Comments
 (0)