提交 6f594d08 编写于 作者: S Sandeep Somavarapu

exploration

上级 138e66a7
......@@ -15,6 +15,7 @@ import { URI } from 'vs/base/common/uri';
import { Disposable } from 'vs/base/common/lifecycle';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { CancellationToken } from 'vs/base/common/cancellation';
import { IRemoteAuthorityResolverService, IRemoteAuthorityResolver } from 'vs/platform/remote/common/remoteAuthorityResolver';
export class MulitExtensionManagementService extends Disposable implements IExtensionManagementService {
......@@ -30,7 +31,8 @@ export class MulitExtensionManagementService extends Disposable implements IExte
constructor(
@IExtensionManagementServerService private extensionManagementServerService: IExtensionManagementServerService,
@IExtensionGalleryService private extensionGalleryService: IExtensionGalleryService,
@IConfigurationService private configurationService: IConfigurationService
@IConfigurationService private configurationService: IConfigurationService,
@IRemoteAuthorityResolverService private remoteAuthorityResolverService: IRemoteAuthorityResolverService
) {
super();
this.servers = this.extensionManagementServerService.otherExtensionManagementServer ? [this.extensionManagementServerService.localExtensionManagementServer, this.extensionManagementServerService.otherExtensionManagementServer] : [this.extensionManagementServerService.localExtensionManagementServer];
......@@ -83,9 +85,9 @@ export class MulitExtensionManagementService extends Disposable implements IExte
if (!this.extensionManagementServerService.otherExtensionManagementServer) {
return this.extensionManagementServerService.localExtensionManagementServer.extensionManagementService.installFromGallery(gallery);
}
return this.extensionGalleryService.getManifest(gallery, CancellationToken.None)
.then(manifest => {
const servers = !isUIExtension(manifest, this.configurationService) ? this.servers : [this.extensionManagementServerService.localExtensionManagementServer];
return Promise.all([this.extensionGalleryService.getManifest(gallery, CancellationToken.None), this.hasToSyncExtensions()])
.then(([manifest, syncExtensions]) => {
const servers = isUIExtension(manifest, this.configurationService) ? [this.extensionManagementServerService.localExtensionManagementServer] : syncExtensions ? this.servers : [this.extensionManagementServerService.otherExtensionManagementServer];
return Promise.all(servers.map(server => server.extensionManagementService.installFromGallery(gallery)))
.then(() => null);
});
......@@ -98,4 +100,15 @@ export class MulitExtensionManagementService extends Disposable implements IExte
private getServer(extension: ILocalExtension): IExtensionManagementServer {
return this.extensionManagementServerService.getExtensionManagementServer(extension.location);
}
private _remoteAuthorityResolverPromise: Thenable<IRemoteAuthorityResolver>;
private hasToSyncExtensions(): Thenable<boolean> {
if (!this.extensionManagementServerService.otherExtensionManagementServer) {
return Promise.resolve(false);
}
if (!this._remoteAuthorityResolverPromise) {
this._remoteAuthorityResolverPromise = this.remoteAuthorityResolverService.getRemoteAuthorityResolver(this.extensionManagementServerService.otherExtensionManagementServer.authority);
}
return this._remoteAuthorityResolverPromise.then(({ syncExtensions }) => !!syncExtensions);
}
}
\ No newline at end of file
......@@ -28,11 +28,12 @@ export interface IRemoteAuthorityResolverService {
resolveAuthority(authority: string): Thenable<ResolvedAuthority>;
getLabel(authority: string): Thenable<string | null>;
getRemoteAuthorityResolver(authority: string): Thenable<IRemoteAuthorityResolver | null>;
}
export interface IRemoteAuthorityResolver {
label: string;
path: string;
authorityPrefix: string;
syncExtensions?: boolean;
}
......@@ -5,7 +5,7 @@
import { IChannel, IServerChannel } from 'vs/base/parts/ipc/node/ipc';
import { Event, buffer } from 'vs/base/common/event';
import { ResolvedAuthority, IResolvingProgressEvent, IRemoteAuthorityResolverService } from 'vs/platform/remote/common/remoteAuthorityResolver';
import { ResolvedAuthority, IResolvingProgressEvent, IRemoteAuthorityResolverService, IRemoteAuthorityResolver } from 'vs/platform/remote/common/remoteAuthorityResolver';
export class RemoteAuthorityResolverChannel implements IServerChannel {
......@@ -26,7 +26,7 @@ export class RemoteAuthorityResolverChannel implements IServerChannel {
call(_, command: string, args?: any): Thenable<any> {
switch (command) {
case 'resolveAuthority': return this.service.resolveAuthority(args[0]);
case 'getLabel': return this.service.getLabel(args[0]);
case 'getRemoteAuthorityResolver': return this.service.getRemoteAuthorityResolver(args[0]);
}
throw new Error('Invalid call');
......@@ -51,8 +51,8 @@ export class RemoteAuthorityResolverChannelClient implements IRemoteAuthorityRes
return this._resolveAuthorityCache[authority];
}
getLabel(authority: string): Thenable<string | null> {
return this.channel.call('getLabel', [authority]);
getRemoteAuthorityResolver(authority: string): Thenable<IRemoteAuthorityResolver | null> {
return this.channel.call('getRemoteAuthorityResolver', [authority]);
}
private _resolveAuthority(authority: string): Thenable<ResolvedAuthority> {
......
......@@ -3,7 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { IRemoteAuthorityResolverService, ResolvedAuthority, IResolvingProgressEvent } from 'vs/platform/remote/common/remoteAuthorityResolver';
import { IRemoteAuthorityResolverService, ResolvedAuthority, IResolvingProgressEvent, IRemoteAuthorityResolver } from 'vs/platform/remote/common/remoteAuthorityResolver';
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { ILogService } from 'vs/platform/log/common/log';
......@@ -31,7 +31,7 @@ export class RemoteAuthorityResolverService extends Disposable implements IRemot
throw new Error(`Not implemented`);
}
async getLabel(authority: string): Promise<string | null> {
async getRemoteAuthorityResolver(authority: string): Promise<IRemoteAuthorityResolver | null> {
throw new Error(`Not implemented`);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册