mirror of
https://github.com/microsoft/vscode.git
synced 2026-07-09 00:05:28 +01:00
Move uri transformer to shared process
This commit is contained in:
@@ -47,6 +47,7 @@ import { RemoteAuthorityResolverService } from 'vs/platform/remote/node/remoteAu
|
||||
import { IRemoteAuthorityResolverService } from 'vs/platform/remote/common/remoteAuthorityResolver';
|
||||
import { RemoteAuthorityResolverChannel } from 'vs/platform/remote/node/remoteAuthorityResolverChannel';
|
||||
import { StaticRouter } from 'vs/base/parts/ipc/node/ipc';
|
||||
import { DefaultURITransformer } from 'vs/base/common/uriIpc';
|
||||
|
||||
export interface ISharedProcessConfiguration {
|
||||
readonly machineId: string;
|
||||
@@ -141,7 +142,7 @@ function main(server: Server, initData: ISharedProcessInitData, configuration: I
|
||||
server.registerChannel('remoteAuthorityResolver', remoteAuthorityResolverChannel);
|
||||
|
||||
const extensionManagementService = accessor.get(IExtensionManagementService);
|
||||
const channel = new ExtensionManagementChannel(extensionManagementService);
|
||||
const channel = new ExtensionManagementChannel(extensionManagementService, () => DefaultURITransformer);
|
||||
server.registerChannel('extensions', channel);
|
||||
|
||||
// clean up deprecated extensions
|
||||
|
||||
@@ -45,10 +45,10 @@ export class DownloadServiceChannelClient implements IDownloadService {
|
||||
|
||||
_serviceBrand: any;
|
||||
|
||||
constructor(private channel: IChannel, private uriTransformer: IURITransformer) { }
|
||||
constructor(private channel: IChannel, private getUriTransformer: () => IURITransformer) { }
|
||||
|
||||
download(from: URI, to: string): Promise<void> {
|
||||
from = this.uriTransformer.transformOutgoing(from);
|
||||
from = this.getUriTransformer().transformOutgoing(from);
|
||||
const dirName = path.dirname(to);
|
||||
let out: fs.WriteStream;
|
||||
return new Promise((c, e) => {
|
||||
|
||||
@@ -16,17 +16,18 @@ export class ExtensionManagementChannel implements IServerChannel {
|
||||
onUninstallExtension: Event<IExtensionIdentifier>;
|
||||
onDidUninstallExtension: Event<DidUninstallExtensionEvent>;
|
||||
|
||||
constructor(private service: IExtensionManagementService) {
|
||||
constructor(private service: IExtensionManagementService, private getUriTransformer: (requestContext: any) => IURITransformer) {
|
||||
this.onInstallExtension = buffer(service.onInstallExtension, true);
|
||||
this.onDidInstallExtension = buffer(service.onDidInstallExtension, true);
|
||||
this.onUninstallExtension = buffer(service.onUninstallExtension, true);
|
||||
this.onDidUninstallExtension = buffer(service.onDidUninstallExtension, true);
|
||||
}
|
||||
|
||||
listen(_, event: string): Event<any> {
|
||||
listen(context, event: string): Event<any> {
|
||||
const uriTransformer = this.getUriTransformer(context);
|
||||
switch (event) {
|
||||
case 'onInstallExtension': return this.onInstallExtension;
|
||||
case 'onDidInstallExtension': return this.onDidInstallExtension;
|
||||
case 'onDidInstallExtension': return mapEvent(this.onDidInstallExtension, i => ({ ...i, local: this._transformOutgoing(i.local, uriTransformer) }));
|
||||
case 'onUninstallExtension': return this.onUninstallExtension;
|
||||
case 'onDidUninstallExtension': return this.onDidUninstallExtension;
|
||||
}
|
||||
@@ -34,24 +35,31 @@ export class ExtensionManagementChannel implements IServerChannel {
|
||||
throw new Error('Invalid listen');
|
||||
}
|
||||
|
||||
call(_, command: string, args?: any): Thenable<any> {
|
||||
call(context, command: string, args?: any): Thenable<any> {
|
||||
const uriTransformer = this.getUriTransformer(context);
|
||||
switch (command) {
|
||||
case 'zip': return this.service.zip(this._transform(args[0]));
|
||||
case 'unzip': return this.service.unzip(URI.revive(args[0]), args[1]);
|
||||
case 'install': return this.service.install(URI.revive(args[0]));
|
||||
case 'zip': return this.service.zip(this._transformIncoming(args[0], uriTransformer)).then(uri => uriTransformer.transformOutgoing(uri));
|
||||
case 'unzip': return this.service.unzip(URI.revive(uriTransformer.transformIncoming(args[0])), args[1]);
|
||||
case 'install': return this.service.install(URI.revive(uriTransformer.transformIncoming(args[0])));
|
||||
case 'installFromGallery': return this.service.installFromGallery(args[0]);
|
||||
case 'uninstall': return this.service.uninstall(this._transform(args[0]), args[1]);
|
||||
case 'reinstallFromGallery': return this.service.reinstallFromGallery(this._transform(args[0]));
|
||||
case 'getInstalled': return this.service.getInstalled(args[0]);
|
||||
case 'updateMetadata': return this.service.updateMetadata(this._transform(args[0]), args[1]);
|
||||
case 'uninstall': return this.service.uninstall(this._transformIncoming(args[0], uriTransformer), args[1]);
|
||||
case 'reinstallFromGallery': return this.service.reinstallFromGallery(this._transformIncoming(args[0], uriTransformer));
|
||||
case 'getInstalled': return this.service.getInstalled(args[0]).then(extensions => extensions.map(e => this._transformOutgoing(e, uriTransformer)));
|
||||
case 'updateMetadata': return this.service.updateMetadata(this._transformIncoming(args[0], uriTransformer), args[1]).then(e => this._transformOutgoing(e, uriTransformer));
|
||||
case 'getExtensionsReport': return this.service.getExtensionsReport();
|
||||
}
|
||||
|
||||
throw new Error('Invalid call');
|
||||
}
|
||||
|
||||
private _transform(extension: ILocalExtension): ILocalExtension {
|
||||
return extension ? { ...extension, ...{ location: URI.revive(extension.location) } } : extension;
|
||||
private _transformIncoming(extension: ILocalExtension, uriTransformer: IURITransformer): ILocalExtension {
|
||||
return extension ? { ...extension, ...{ location: URI.revive(uriTransformer.transformIncoming(extension.location)) } } : extension;
|
||||
}
|
||||
|
||||
private _transformOutgoing(extension: ILocalExtension, uriTransformer: IURITransformer): ILocalExtension;
|
||||
private _transformOutgoing(extension: ILocalExtension | undefined, uriTransformer: IURITransformer): ILocalExtension | undefined;
|
||||
private _transformOutgoing(extension: ILocalExtension | undefined, uriTransformer: IURITransformer): ILocalExtension | undefined {
|
||||
return extension ? { ...extension, ...{ location: uriTransformer.transformOutgoing(extension.location) } } : extension;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,7 +67,7 @@ export class ExtensionManagementChannelClient implements IExtensionManagementSer
|
||||
|
||||
_serviceBrand: any;
|
||||
|
||||
constructor(private channel: IChannel, private uriTransformer: IURITransformer) { }
|
||||
constructor(private channel: IChannel) { }
|
||||
|
||||
get onInstallExtension(): Event<InstallExtensionEvent> { return this.channel.listen('onInstallExtension'); }
|
||||
get onDidInstallExtension(): Event<DidInstallExtensionEvent> { return mapEvent(this.channel.listen<DidInstallExtensionEvent>('onDidInstallExtension'), i => ({ ...i, local: this._transformIncoming(i.local) })); }
|
||||
@@ -67,15 +75,15 @@ export class ExtensionManagementChannelClient implements IExtensionManagementSer
|
||||
get onDidUninstallExtension(): Event<DidUninstallExtensionEvent> { return this.channel.listen('onDidUninstallExtension'); }
|
||||
|
||||
zip(extension: ILocalExtension): Promise<URI> {
|
||||
return Promise.resolve(this.channel.call<URI>('zip', [this._transformOutgoing(extension)]).then(result => URI.revive(this.uriTransformer.transformIncoming(result))));
|
||||
return Promise.resolve(this.channel.call('zip', [extension]).then(result => URI.revive(result)));
|
||||
}
|
||||
|
||||
unzip(zipLocation: URI, type: LocalExtensionType): Promise<IExtensionIdentifier> {
|
||||
return Promise.resolve(this.channel.call('unzip', [this.uriTransformer.transformOutgoing(zipLocation), type]));
|
||||
return Promise.resolve(this.channel.call('unzip', [zipLocation, type]));
|
||||
}
|
||||
|
||||
install(vsix: URI): Promise<IExtensionIdentifier> {
|
||||
return Promise.resolve(this.channel.call('install', [this.uriTransformer.transformOutgoing(vsix)]));
|
||||
return Promise.resolve(this.channel.call('install', [vsix]));
|
||||
}
|
||||
|
||||
installFromGallery(extension: IGalleryExtension): Promise<void> {
|
||||
@@ -83,11 +91,11 @@ export class ExtensionManagementChannelClient implements IExtensionManagementSer
|
||||
}
|
||||
|
||||
uninstall(extension: ILocalExtension, force = false): Promise<void> {
|
||||
return Promise.resolve(this.channel.call('uninstall', [this._transformOutgoing(extension)!, force]));
|
||||
return Promise.resolve(this.channel.call('uninstall', [extension!, force]));
|
||||
}
|
||||
|
||||
reinstallFromGallery(extension: ILocalExtension): Promise<void> {
|
||||
return Promise.resolve(this.channel.call('reinstallFromGallery', [this._transformOutgoing(extension)]));
|
||||
return Promise.resolve(this.channel.call('reinstallFromGallery', [extension]));
|
||||
}
|
||||
|
||||
getInstalled(type: LocalExtensionType | null = null): Promise<ILocalExtension[]> {
|
||||
@@ -96,7 +104,7 @@ export class ExtensionManagementChannelClient implements IExtensionManagementSer
|
||||
}
|
||||
|
||||
updateMetadata(local: ILocalExtension, metadata: IGalleryMetadata): Promise<ILocalExtension> {
|
||||
return Promise.resolve(this.channel.call<ILocalExtension>('updateMetadata', [this._transformOutgoing(local), metadata]))
|
||||
return Promise.resolve(this.channel.call<ILocalExtension>('updateMetadata', [local, metadata]))
|
||||
.then(extension => this._transformIncoming(extension));
|
||||
}
|
||||
|
||||
@@ -107,13 +115,6 @@ export class ExtensionManagementChannelClient implements IExtensionManagementSer
|
||||
private _transformIncoming(extension: ILocalExtension): ILocalExtension;
|
||||
private _transformIncoming(extension: ILocalExtension | undefined): ILocalExtension | undefined;
|
||||
private _transformIncoming(extension: ILocalExtension | undefined): ILocalExtension | undefined {
|
||||
return extension ? { ...extension, ...{ location: URI.revive(this.uriTransformer.transformIncoming(extension.location)) } } : extension;
|
||||
return extension ? { ...extension, ...{ location: URI.revive(extension.location) } } : extension;
|
||||
}
|
||||
|
||||
private _transformOutgoing(extension: ILocalExtension): ILocalExtension;
|
||||
private _transformOutgoing(extension: ILocalExtension | undefined): ILocalExtension | undefined;
|
||||
private _transformOutgoing(extension: ILocalExtension | undefined): ILocalExtension | undefined {
|
||||
return extension ? { ...extension, ...{ location: this.uriTransformer.transformOutgoing(extension.location) } } : extension;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -94,7 +94,6 @@ import { IOpenerService } from 'vs/platform/opener/common/opener';
|
||||
import { OpenerService } from 'vs/editor/browser/services/openerService';
|
||||
import { SearchHistoryService } from 'vs/workbench/services/search/node/searchHistoryService';
|
||||
import { ExtensionManagementServerService } from 'vs/workbench/services/extensions/node/extensionManagementServerService';
|
||||
import { DefaultURITransformer } from 'vs/base/common/uriIpc';
|
||||
import { ExtensionGalleryService } from 'vs/platform/extensionManagement/node/extensionGalleryService';
|
||||
import { LogLevelSetterChannel } from 'vs/platform/log/node/logIpc';
|
||||
import { ILabelService, LabelService } from 'vs/platform/label/common/label';
|
||||
@@ -471,7 +470,7 @@ export class WorkbenchShell extends Disposable {
|
||||
}
|
||||
|
||||
const extensionManagementChannel = getDelayedChannel(sharedProcess.then(c => c.getChannel('extensions')));
|
||||
const extensionManagementChannelClient = new ExtensionManagementChannelClient(extensionManagementChannel, DefaultURITransformer);
|
||||
const extensionManagementChannelClient = new ExtensionManagementChannelClient(extensionManagementChannel);
|
||||
serviceCollection.set(IExtensionManagementServerService, new SyncDescriptor(ExtensionManagementServerService, [extensionManagementChannelClient]));
|
||||
serviceCollection.set(IExtensionManagementService, new SyncDescriptor(MulitExtensionManagementService));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user