From 3ec53bfaa7075a36ca15e94a8e4ae178c96cb302 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Tue, 11 Jul 2017 18:21:25 +0200 Subject: [PATCH] IWindowsService.openWorkspace() --- src/vs/platform/windows/common/windows.ts | 3 +++ src/vs/platform/windows/common/windowsIpc.ts | 7 +++++++ .../platform/windows/electron-main/windowsService.ts | 11 +++++++++++ src/vs/platform/workspaces/common/workspaces.ts | 1 - src/vs/platform/workspaces/common/workspacesIpc.ts | 6 ------ .../workspaces/electron-main/workspacesMainService.ts | 4 ---- src/vs/workbench/test/workbenchTestServices.ts | 11 ++++++++--- 7 files changed, 29 insertions(+), 14 deletions(-) diff --git a/src/vs/platform/windows/common/windows.ts b/src/vs/platform/windows/common/windows.ts index 099408d3e1d..cb90ac2c704 100644 --- a/src/vs/platform/windows/common/windows.ts +++ b/src/vs/platform/windows/common/windows.ts @@ -11,6 +11,7 @@ import Event from 'vs/base/common/event'; import { ITelemetryData } from 'vs/platform/telemetry/common/telemetry'; import { IProcessEnvironment } from 'vs/base/common/platform'; import { ParsedArgs } from 'vs/platform/environment/common/environment'; +import { IWorkspace } from "vs/platform/workspaces/common/workspaces"; export const IWindowsService = createDecorator('windowsService'); @@ -46,6 +47,8 @@ export interface IWindowsService { quit(): TPromise; relaunch(options: { addArgs?: string[], removeArgs?: string[] }): TPromise; + openWorkspace(windowId: number, workspace: IWorkspace): TPromise; + // Shared process whenSharedProcessReady(): TPromise; toggleSharedProcess(): TPromise; diff --git a/src/vs/platform/windows/common/windowsIpc.ts b/src/vs/platform/windows/common/windowsIpc.ts index abbc1dc8e33..c6e3aa8a5f2 100644 --- a/src/vs/platform/windows/common/windowsIpc.ts +++ b/src/vs/platform/windows/common/windowsIpc.ts @@ -10,6 +10,7 @@ import Event, { buffer } from 'vs/base/common/event'; import { IChannel, eventToCall, eventFromCall } from 'vs/base/parts/ipc/common/ipc'; import { IWindowsService } from './windows'; import { ITelemetryData } from 'vs/platform/telemetry/common/telemetry'; +import { IWorkspace } from "vs/platform/workspaces/common/workspaces"; export interface IWindowsChannel extends IChannel { call(command: 'event:onWindowOpen'): TPromise; @@ -42,6 +43,7 @@ export interface IWindowsChannel extends IChannel { call(command: 'getWindows'): TPromise<{ id: number; path: string; title: string; }[]>; call(command: 'getWindowCount'): TPromise; call(command: 'relaunch', arg: { addArgs?: string[], removeArgs?: string[] }): TPromise; + call(command: 'openWorkspace', arg: [number, IWorkspace]): TPromise; call(command: 'whenSharedProcessReady'): TPromise; call(command: 'toggleSharedProcess'): TPromise; call(command: 'log', arg: [string, string[]]): TPromise; @@ -94,6 +96,7 @@ export class WindowsChannel implements IWindowsChannel { case 'getWindows': return this.service.getWindows(); case 'getWindowCount': return this.service.getWindowCount(); case 'relaunch': return this.service.relaunch(arg[0]); + case 'openWorkspace': return this.service.openWorkspace(arg[0], arg[1]); case 'whenSharedProcessReady': return this.service.whenSharedProcessReady(); case 'toggleSharedProcess': return this.service.toggleSharedProcess(); case 'quit': return this.service.quit(); @@ -215,6 +218,10 @@ export class WindowsChannelClient implements IWindowsService { return this.channel.call('relaunch', [options]); } + openWorkspace(windowId: number, workspace: IWorkspace): TPromise { + return this.channel.call('openWorkspace', [windowId, workspace]); + } + whenSharedProcessReady(): TPromise { return this.channel.call('whenSharedProcessReady'); } diff --git a/src/vs/platform/windows/electron-main/windowsService.ts b/src/vs/platform/windows/electron-main/windowsService.ts index db31b73233b..69940525eac 100644 --- a/src/vs/platform/windows/electron-main/windowsService.ts +++ b/src/vs/platform/windows/electron-main/windowsService.ts @@ -20,6 +20,7 @@ import { ILifecycleService } from "vs/platform/lifecycle/electron-main/lifecycle import { IWindowsMainService, ISharedProcess } from "vs/platform/windows/electron-main/windows"; import { IHistoryMainService } from "vs/platform/history/electron-main/historyMainService"; import { findExtensionDevelopmentWindow } from "vs/code/node/windowsFinder"; +import { IWorkspace } from "vs/platform/workspaces/common/workspaces"; export class WindowsService implements IWindowsService, IDisposable { @@ -322,6 +323,16 @@ export class WindowsService implements IWindowsService, IDisposable { return TPromise.as(null); } + openWorkspace(windowId: number, workspace: IWorkspace): TPromise { + const codeWindow = this.windowsMainService.getWindowById(windowId); + + if (codeWindow) { + this.windowsMainService.open({ context: OpenContext.API, cli: this.environmentService.args, pathsToOpen: [workspace.workspaceConfigPath], windowToUse: codeWindow }); + } + + return TPromise.as(null); + } + whenSharedProcessReady(): TPromise { return this.sharedProcess.whenReady(); } diff --git a/src/vs/platform/workspaces/common/workspaces.ts b/src/vs/platform/workspaces/common/workspaces.ts index f9be52f1b75..8ee9f7f0293 100644 --- a/src/vs/platform/workspaces/common/workspaces.ts +++ b/src/vs/platform/workspaces/common/workspaces.ts @@ -30,5 +30,4 @@ export interface IWorkspacesService { _serviceBrand: any; createWorkspace(folders?: string[]): TPromise; - openWorkspace(workspace: IWorkspace): void; } \ No newline at end of file diff --git a/src/vs/platform/workspaces/common/workspacesIpc.ts b/src/vs/platform/workspaces/common/workspacesIpc.ts index ad6ac3146a2..97796423e46 100644 --- a/src/vs/platform/workspaces/common/workspacesIpc.ts +++ b/src/vs/platform/workspaces/common/workspacesIpc.ts @@ -11,7 +11,6 @@ import { IWorkspacesService, IWorkspace } from 'vs/platform/workspaces/common/wo export interface IWorkspacesChannel extends IChannel { call(command: 'createWorkspace', arg: [string[]]): TPromise; - call(command: 'openWorkspace', arg: [IWorkspace]): TPromise; call(command: string, arg?: any): TPromise; } @@ -22,7 +21,6 @@ export class WorkspacesChannel implements IWorkspacesChannel { call(command: string, arg?: any): TPromise { switch (command) { case 'createWorkspace': return this.service.createWorkspace(arg); - case 'openWorkspace': this.service.openWorkspace(arg); } return void 0; @@ -38,8 +36,4 @@ export class WorkspacesChannelClient implements IWorkspacesService { createWorkspace(folders?: string[]): TPromise { return this.channel.call('createWorkspace', folders); } - - openWorkspace(workspace: IWorkspace): void { - this.channel.call('openWorkspace', workspace); - } } \ No newline at end of file diff --git a/src/vs/platform/workspaces/electron-main/workspacesMainService.ts b/src/vs/platform/workspaces/electron-main/workspacesMainService.ts index 409c7949720..e5aa45f734f 100644 --- a/src/vs/platform/workspaces/electron-main/workspacesMainService.ts +++ b/src/vs/platform/workspaces/electron-main/workspacesMainService.ts @@ -45,10 +45,6 @@ export class WorkspacesMainService implements IWorkspacesMainService { }); } - public openWorkspace(workspace: IWorkspace): void { - - } - private nextWorkspaceId(): string { return (Date.now() + Math.round(Math.random() * 1000)).toString(); } diff --git a/src/vs/workbench/test/workbenchTestServices.ts b/src/vs/workbench/test/workbenchTestServices.ts index 21963e64912..92890465fb7 100644 --- a/src/vs/workbench/test/workbenchTestServices.ts +++ b/src/vs/workbench/test/workbenchTestServices.ts @@ -27,7 +27,7 @@ import { ITextModelService } from 'vs/editor/common/services/resolverService'; import { IEditorInput, IEditorOptions, Position, Direction, IEditor, IResourceInput, ITextEditorOptions } from 'vs/platform/editor/common/editor'; import { IUntitledEditorService, UntitledEditorService } from 'vs/workbench/services/untitled/common/untitledEditorService'; import { IMessageService, IConfirmation } from 'vs/platform/message/common/message'; -import { ILegacyWorkspace, IWorkspaceContextService, IWorkspace } from 'vs/platform/workspace/common/workspace'; +import { ILegacyWorkspace, IWorkspaceContextService, IWorkspace as IWorkbenchWorkspace } from 'vs/platform/workspace/common/workspace'; import { ILifecycleService, ShutdownEvent, ShutdownReason, StartupKind, LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle'; import { EditorStacksModel } from 'vs/workbench/common/editor/editorStacksModel'; import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; @@ -54,6 +54,7 @@ import { IThemeService } from 'vs/platform/theme/common/themeService'; import { isLinux } from 'vs/base/common/platform'; import { generateUuid } from 'vs/base/common/uuid'; import { TestThemeService } from 'vs/platform/theme/test/common/testThemeService'; +import { IWorkspace } from "vs/platform/workspaces/common/workspaces"; export function createFileInput(instantiationService: IInstantiationService, resource: URI): FileEditorInput { return instantiationService.createInstance(FileEditorInput, resource, void 0); @@ -64,7 +65,7 @@ export const TestEnvironmentService = new EnvironmentService(parseArgs(process.a export class TestContextService implements IWorkspaceContextService { public _serviceBrand: any; - private workspace: IWorkspace; + private workspace: IWorkbenchWorkspace; private id: string; private options: any; @@ -93,7 +94,7 @@ export class TestContextService implements IWorkspaceContextService { return this.workspace ? { resource: this.workspace.roots[0] } : void 0; } - public getWorkspace(): IWorkspace { + public getWorkspace(): IWorkbenchWorkspace { return this.workspace; } @@ -1061,6 +1062,10 @@ export class TestWindowsService implements IWindowsService { return TPromise.as(void 0); } + openWorkspace(windowId: number, workspace: IWorkspace): TPromise { + return TPromise.as(void 0); + } + whenSharedProcessReady(): TPromise { return TPromise.as(void 0); }