提交 74bb246c 编写于 作者: S Sandeep Somavarapu

Move uri transformer to shared process

上级 08aa6611
...@@ -47,6 +47,7 @@ import { RemoteAuthorityResolverService } from 'vs/platform/remote/node/remoteAu ...@@ -47,6 +47,7 @@ import { RemoteAuthorityResolverService } from 'vs/platform/remote/node/remoteAu
import { IRemoteAuthorityResolverService } from 'vs/platform/remote/common/remoteAuthorityResolver'; import { IRemoteAuthorityResolverService } from 'vs/platform/remote/common/remoteAuthorityResolver';
import { RemoteAuthorityResolverChannel } from 'vs/platform/remote/node/remoteAuthorityResolverChannel'; import { RemoteAuthorityResolverChannel } from 'vs/platform/remote/node/remoteAuthorityResolverChannel';
import { StaticRouter } from 'vs/base/parts/ipc/node/ipc'; import { StaticRouter } from 'vs/base/parts/ipc/node/ipc';
import { DefaultURITransformer } from 'vs/base/common/uriIpc';
export interface ISharedProcessConfiguration { export interface ISharedProcessConfiguration {
readonly machineId: string; readonly machineId: string;
...@@ -141,7 +142,7 @@ function main(server: Server, initData: ISharedProcessInitData, configuration: I ...@@ -141,7 +142,7 @@ function main(server: Server, initData: ISharedProcessInitData, configuration: I
server.registerChannel('remoteAuthorityResolver', remoteAuthorityResolverChannel); server.registerChannel('remoteAuthorityResolver', remoteAuthorityResolverChannel);
const extensionManagementService = accessor.get(IExtensionManagementService); const extensionManagementService = accessor.get(IExtensionManagementService);
const channel = new ExtensionManagementChannel(extensionManagementService); const channel = new ExtensionManagementChannel(extensionManagementService, () => DefaultURITransformer);
server.registerChannel('extensions', channel); server.registerChannel('extensions', channel);
// clean up deprecated extensions // clean up deprecated extensions
......
...@@ -45,10 +45,10 @@ export class DownloadServiceChannelClient implements IDownloadService { ...@@ -45,10 +45,10 @@ export class DownloadServiceChannelClient implements IDownloadService {
_serviceBrand: any; _serviceBrand: any;
constructor(private channel: IChannel, private uriTransformer: IURITransformer) { } constructor(private channel: IChannel, private getUriTransformer: () => IURITransformer) { }
download(from: URI, to: string): Promise<void> { download(from: URI, to: string): Promise<void> {
from = this.uriTransformer.transformOutgoing(from); from = this.getUriTransformer().transformOutgoing(from);
const dirName = path.dirname(to); const dirName = path.dirname(to);
let out: fs.WriteStream; let out: fs.WriteStream;
return new Promise((c, e) => { return new Promise((c, e) => {
......
...@@ -16,17 +16,18 @@ export class ExtensionManagementChannel implements IServerChannel { ...@@ -16,17 +16,18 @@ export class ExtensionManagementChannel implements IServerChannel {
onUninstallExtension: Event<IExtensionIdentifier>; onUninstallExtension: Event<IExtensionIdentifier>;
onDidUninstallExtension: Event<DidUninstallExtensionEvent>; onDidUninstallExtension: Event<DidUninstallExtensionEvent>;
constructor(private service: IExtensionManagementService) { constructor(private service: IExtensionManagementService, private getUriTransformer: (requestContext: any) => IURITransformer) {
this.onInstallExtension = buffer(service.onInstallExtension, true); this.onInstallExtension = buffer(service.onInstallExtension, true);
this.onDidInstallExtension = buffer(service.onDidInstallExtension, true); this.onDidInstallExtension = buffer(service.onDidInstallExtension, true);
this.onUninstallExtension = buffer(service.onUninstallExtension, true); this.onUninstallExtension = buffer(service.onUninstallExtension, true);
this.onDidUninstallExtension = buffer(service.onDidUninstallExtension, 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) { switch (event) {
case 'onInstallExtension': return this.onInstallExtension; 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 'onUninstallExtension': return this.onUninstallExtension;
case 'onDidUninstallExtension': return this.onDidUninstallExtension; case 'onDidUninstallExtension': return this.onDidUninstallExtension;
} }
...@@ -34,24 +35,31 @@ export class ExtensionManagementChannel implements IServerChannel { ...@@ -34,24 +35,31 @@ export class ExtensionManagementChannel implements IServerChannel {
throw new Error('Invalid listen'); 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) { switch (command) {
case 'zip': return this.service.zip(this._transform(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(args[0]), args[1]); case 'unzip': return this.service.unzip(URI.revive(uriTransformer.transformIncoming(args[0])), args[1]);
case 'install': return this.service.install(URI.revive(args[0])); case 'install': return this.service.install(URI.revive(uriTransformer.transformIncoming(args[0])));
case 'installFromGallery': return this.service.installFromGallery(args[0]); case 'installFromGallery': return this.service.installFromGallery(args[0]);
case 'uninstall': return this.service.uninstall(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._transform(args[0])); case 'reinstallFromGallery': return this.service.reinstallFromGallery(this._transformIncoming(args[0], uriTransformer));
case 'getInstalled': return this.service.getInstalled(args[0]); case 'getInstalled': return this.service.getInstalled(args[0]).then(extensions => extensions.map(e => this._transformOutgoing(e, uriTransformer)));
case 'updateMetadata': return this.service.updateMetadata(this._transform(args[0]), args[1]); 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(); case 'getExtensionsReport': return this.service.getExtensionsReport();
} }
throw new Error('Invalid call'); throw new Error('Invalid call');
} }
private _transform(extension: ILocalExtension): ILocalExtension { private _transformIncoming(extension: ILocalExtension, uriTransformer: IURITransformer): ILocalExtension {
return extension ? { ...extension, ...{ location: URI.revive(extension.location) } } : extension; 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 ...@@ -59,7 +67,7 @@ export class ExtensionManagementChannelClient implements IExtensionManagementSer
_serviceBrand: any; _serviceBrand: any;
constructor(private channel: IChannel, private uriTransformer: IURITransformer) { } constructor(private channel: IChannel) { }
get onInstallExtension(): Event<InstallExtensionEvent> { return this.channel.listen('onInstallExtension'); } 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) })); } 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 ...@@ -67,15 +75,15 @@ export class ExtensionManagementChannelClient implements IExtensionManagementSer
get onDidUninstallExtension(): Event<DidUninstallExtensionEvent> { return this.channel.listen('onDidUninstallExtension'); } get onDidUninstallExtension(): Event<DidUninstallExtensionEvent> { return this.channel.listen('onDidUninstallExtension'); }
zip(extension: ILocalExtension): Promise<URI> { 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> { 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> { 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> { installFromGallery(extension: IGalleryExtension): Promise<void> {
...@@ -83,11 +91,11 @@ export class ExtensionManagementChannelClient implements IExtensionManagementSer ...@@ -83,11 +91,11 @@ export class ExtensionManagementChannelClient implements IExtensionManagementSer
} }
uninstall(extension: ILocalExtension, force = false): Promise<void> { 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> { 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[]> { getInstalled(type: LocalExtensionType | null = null): Promise<ILocalExtension[]> {
...@@ -96,7 +104,7 @@ export class ExtensionManagementChannelClient implements IExtensionManagementSer ...@@ -96,7 +104,7 @@ export class ExtensionManagementChannelClient implements IExtensionManagementSer
} }
updateMetadata(local: ILocalExtension, metadata: IGalleryMetadata): Promise<ILocalExtension> { 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)); .then(extension => this._transformIncoming(extension));
} }
...@@ -107,13 +115,6 @@ export class ExtensionManagementChannelClient implements IExtensionManagementSer ...@@ -107,13 +115,6 @@ export class ExtensionManagementChannelClient implements IExtensionManagementSer
private _transformIncoming(extension: ILocalExtension): ILocalExtension; private _transformIncoming(extension: ILocalExtension): ILocalExtension;
private _transformIncoming(extension: ILocalExtension | undefined): ILocalExtension | undefined; private _transformIncoming(extension: ILocalExtension | undefined): ILocalExtension | undefined;
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;
} }
} }
\ No newline at end of file
...@@ -94,7 +94,6 @@ import { IOpenerService } from 'vs/platform/opener/common/opener'; ...@@ -94,7 +94,6 @@ import { IOpenerService } from 'vs/platform/opener/common/opener';
import { OpenerService } from 'vs/editor/browser/services/openerService'; import { OpenerService } from 'vs/editor/browser/services/openerService';
import { SearchHistoryService } from 'vs/workbench/services/search/node/searchHistoryService'; import { SearchHistoryService } from 'vs/workbench/services/search/node/searchHistoryService';
import { ExtensionManagementServerService } from 'vs/workbench/services/extensions/node/extensionManagementServerService'; 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 { ExtensionGalleryService } from 'vs/platform/extensionManagement/node/extensionGalleryService';
import { LogLevelSetterChannel } from 'vs/platform/log/node/logIpc'; import { LogLevelSetterChannel } from 'vs/platform/log/node/logIpc';
import { ILabelService, LabelService } from 'vs/platform/label/common/label'; import { ILabelService, LabelService } from 'vs/platform/label/common/label';
...@@ -471,7 +470,7 @@ export class WorkbenchShell extends Disposable { ...@@ -471,7 +470,7 @@ export class WorkbenchShell extends Disposable {
} }
const extensionManagementChannel = getDelayedChannel(sharedProcess.then(c => c.getChannel('extensions'))); 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(IExtensionManagementServerService, new SyncDescriptor(ExtensionManagementServerService, [extensionManagementChannelClient]));
serviceCollection.set(IExtensionManagementService, new SyncDescriptor(MulitExtensionManagementService)); serviceCollection.set(IExtensionManagementService, new SyncDescriptor(MulitExtensionManagementService));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册