Fix interactive playground

This commit is contained in:
Asher 2019-07-12 17:13:49 -05:00
parent 286f9a8978
commit e22791ec88
No known key found for this signature in database
GPG Key ID: D63C1EF81242354A
3 changed files with 25 additions and 13 deletions

View File

@ -202,19 +202,20 @@ index e09049c5b9..d93ffa527a 100644
\ No newline at end of file \ No newline at end of file
+} +}
diff --git a/src/vs/workbench/browser/web.main.ts b/src/vs/workbench/browser/web.main.ts diff --git a/src/vs/workbench/browser/web.main.ts b/src/vs/workbench/browser/web.main.ts
index 1986fb6642..7c66b644f2 100644 index 1986fb6642..afbe385af6 100644
--- a/src/vs/workbench/browser/web.main.ts --- a/src/vs/workbench/browser/web.main.ts
+++ b/src/vs/workbench/browser/web.main.ts +++ b/src/vs/workbench/browser/web.main.ts
@@ -115,6 +115,8 @@ class CodeRendererMain extends Disposable { @@ -115,6 +115,9 @@ class CodeRendererMain extends Disposable {
const remoteFileSystemProvider = this._register(new RemoteExtensionsFileSystemProvider(channel, remoteAgentService.getEnvironment())); const remoteFileSystemProvider = this._register(new RemoteExtensionsFileSystemProvider(channel, remoteAgentService.getEnvironment()));
fileService.registerProvider(Schemas.vscodeRemote, remoteFileSystemProvider); fileService.registerProvider(Schemas.vscodeRemote, remoteFileSystemProvider);
+ fileService.registerProvider(Schemas.http, remoteFileSystemProvider); + fileService.registerProvider(Schemas.http, remoteFileSystemProvider);
+ fileService.registerProvider(Schemas.https, remoteFileSystemProvider); + fileService.registerProvider(Schemas.https, remoteFileSystemProvider);
+ fileService.registerProvider(Schemas.file, remoteFileSystemProvider);
} }
const payload = await this.resolveWorkspaceInitializationPayload(); const payload = await this.resolveWorkspaceInitializationPayload();
@@ -170,4 +172,4 @@ export function main(domElement: HTMLElement, options: IWorkbenchConstructionOpt @@ -170,4 +173,4 @@ export function main(domElement: HTMLElement, options: IWorkbenchConstructionOpt
const renderer = new CodeRendererMain(domElement, options); const renderer = new CodeRendererMain(domElement, options);
return renderer.open(); return renderer.open();

View File

@ -49,7 +49,10 @@ export class FileProviderChannel implements IServerChannel, IDisposable {
private readonly provider: DiskFileSystemProvider; private readonly provider: DiskFileSystemProvider;
private readonly watchers = new Map<string, Watcher>(); private readonly watchers = new Map<string, Watcher>();
public constructor(private readonly logService: ILogService) { public constructor(
private readonly environmentService: IEnvironmentService,
private readonly logService: ILogService,
) {
this.provider = new DiskFileSystemProvider(this.logService); this.provider = new DiskFileSystemProvider(this.logService);
} }
@ -113,11 +116,11 @@ export class FileProviderChannel implements IServerChannel, IDisposable {
} }
private async stat(resource: UriComponents): Promise<IStat> { private async stat(resource: UriComponents): Promise<IStat> {
return this.provider.stat(URI.from(resource)); return this.provider.stat(this.transform(resource));
} }
private async open(resource: UriComponents, opts: FileOpenOptions): Promise<number> { private async open(resource: UriComponents, opts: FileOpenOptions): Promise<number> {
return this.provider.open(URI.from(resource), opts); return this.provider.open(this.transform(resource), opts);
} }
private async close(fd: number): Promise<void> { private async close(fd: number): Promise<void> {
@ -135,32 +138,40 @@ export class FileProviderChannel implements IServerChannel, IDisposable {
} }
private async delete(resource: UriComponents, opts: FileDeleteOptions): Promise<void> { private async delete(resource: UriComponents, opts: FileDeleteOptions): Promise<void> {
return this.provider.delete(URI.from(resource), opts); return this.provider.delete(this.transform(resource), opts);
} }
private async mkdir(resource: UriComponents): Promise<void> { private async mkdir(resource: UriComponents): Promise<void> {
return this.provider.mkdir(URI.from(resource)); return this.provider.mkdir(this.transform(resource));
} }
private async readdir(resource: UriComponents): Promise<[string, FileType][]> { private async readdir(resource: UriComponents): Promise<[string, FileType][]> {
return this.provider.readdir(URI.from(resource)); return this.provider.readdir(this.transform(resource));
} }
private async rename(resource: UriComponents, target: UriComponents, opts: FileOverwriteOptions): Promise<void> { private async rename(resource: UriComponents, target: UriComponents, opts: FileOverwriteOptions): Promise<void> {
return this.provider.rename(URI.from(resource), URI.from(target), opts); return this.provider.rename(this.transform(resource), URI.from(target), opts);
} }
private copy(resource: UriComponents, target: UriComponents, opts: FileOverwriteOptions): Promise<void> { private copy(resource: UriComponents, target: UriComponents, opts: FileOverwriteOptions): Promise<void> {
return this.provider.copy(URI.from(resource), URI.from(target), opts); return this.provider.copy(this.transform(resource), URI.from(target), opts);
} }
private async watch(session: string, req: number, resource: UriComponents, opts: IWatchOptions): Promise<void> { private async watch(session: string, req: number, resource: UriComponents, opts: IWatchOptions): Promise<void> {
this.watchers.get(session)!._watch(req, URI.from(resource), opts); this.watchers.get(session)!._watch(req, this.transform(resource), opts);
} }
private async unwatch(session: string, req: number): Promise<void> { private async unwatch(session: string, req: number): Promise<void> {
this.watchers.get(session)!.unwatch(req); this.watchers.get(session)!.unwatch(req);
} }
private transform(resource: UriComponents): URI {
// HACK: for now assume /out is relative to the build.
if (resource.path.indexOf("/out") === 0) {
resource.path = this.environmentService.appRoot + resource.path;
}
return URI.from(resource);
}
} }
/** /**

View File

@ -402,7 +402,7 @@ export class MainServer extends Server {
instantiationService.invokeFunction(() => { instantiationService.invokeFunction(() => {
instantiationService.createInstance(LogsDataCleaner); instantiationService.createInstance(LogsDataCleaner);
this.ipc.registerChannel(REMOTE_FILE_SYSTEM_CHANNEL_NAME, new FileProviderChannel(logService)); this.ipc.registerChannel(REMOTE_FILE_SYSTEM_CHANNEL_NAME, new FileProviderChannel(environmentService, logService));
this.ipc.registerChannel("remoteextensionsenvironment", new ExtensionEnvironmentChannel(environmentService, logService)); this.ipc.registerChannel("remoteextensionsenvironment", new ExtensionEnvironmentChannel(environmentService, logService));
const extensionsService = this.services.get(IExtensionManagementService) as IExtensionManagementService; const extensionsService = this.services.get(IExtensionManagementService) as IExtensionManagementService;
const extensionsChannel = new ExtensionManagementChannel(extensionsService, (context) => getUriTransformer(context.remoteAuthority)); const extensionsChannel = new ExtensionManagementChannel(extensionsService, (context) => getUriTransformer(context.remoteAuthority));