diff --git a/src/vs/platform/issue/common/issue.ts b/src/vs/platform/issue/common/issue.ts index 90c4b4356ce..0058f556840 100644 --- a/src/vs/platform/issue/common/issue.ts +++ b/src/vs/platform/issue/common/issue.ts @@ -89,4 +89,5 @@ export interface IIssueService { _serviceBrand: any; openReporter(data: IssueReporterData): Promise; openProcessExplorer(data: ProcessExplorerData): Promise; + getSystemStatus(): Promise; } diff --git a/src/vs/platform/issue/electron-browser/issueService.ts b/src/vs/platform/issue/electron-browser/issueService.ts index 67ba09b24ad..e9d287e7628 100644 --- a/src/vs/platform/issue/electron-browser/issueService.ts +++ b/src/vs/platform/issue/electron-browser/issueService.ts @@ -25,4 +25,8 @@ export class IssueService implements IIssueService { openProcessExplorer(data: ProcessExplorerData): Promise { return this.channel.call('openProcessExplorer', data); } + + getSystemStatus(): Promise { + return this.channel.call('getSystemStatus'); + } } \ No newline at end of file diff --git a/src/vs/platform/issue/electron-main/issueService.ts b/src/vs/platform/issue/electron-main/issueService.ts index fffbff2be7b..390000c83c0 100644 --- a/src/vs/platform/issue/electron-main/issueService.ts +++ b/src/vs/platform/issue/electron-main/issueService.ts @@ -214,6 +214,10 @@ export class IssueService implements IIssueService { }); } + public getSystemStatus(): Promise { + return Promise.resolve('To be filled in'); // todo + } + private getWindowPosition(parentWindow: BrowserWindow, defaultWidth: number, defaultHeight: number): IWindowState { // We want the new window to open on the same display that the parent is in let displayToUse: Electron.Display | undefined; diff --git a/src/vs/platform/issue/node/issueIpc.ts b/src/vs/platform/issue/node/issueIpc.ts index 0bd7dd34f99..4eca97ef53c 100644 --- a/src/vs/platform/issue/node/issueIpc.ts +++ b/src/vs/platform/issue/node/issueIpc.ts @@ -21,6 +21,8 @@ export class IssueChannel implements IServerChannel { return this.service.openReporter(arg); case 'openProcessExplorer': return this.service.openProcessExplorer(arg); + case 'getSystemStatus': + return this.service.getSystemStatus(); } throw new Error(`Call not found: ${command}`); diff --git a/src/vs/workbench/api/node/extHostCLIServer.ts b/src/vs/workbench/api/node/extHostCLIServer.ts index b19e1b498bc..1ea105ad33c 100644 --- a/src/vs/workbench/api/node/extHostCLIServer.ts +++ b/src/vs/workbench/api/node/extHostCLIServer.ts @@ -22,6 +22,10 @@ export interface OpenCommandPipeArgs { waitMarkerFilePath?: string; } +export interface StatusPipeArgs { + type: 'status'; +} + export class CLIServer { private _server: http.Server; @@ -68,11 +72,14 @@ export class CLIServer { req.setEncoding('utf8'); req.on('data', (d: string) => chunks.push(d)); req.on('end', () => { - const data: OpenCommandPipeArgs | any = JSON.parse(chunks.join('')); + const data: OpenCommandPipeArgs | StatusPipeArgs | any = JSON.parse(chunks.join('')); switch (data.type) { case 'open': this.open(data, res); break; + case 'status': + this.getStatus(data, res); + break; default: res.writeHead(404); res.write(`Unkown message type: ${data.type}`, err => { @@ -103,6 +110,23 @@ export class CLIServer { res.end(); } + private async getStatus(data: StatusPipeArgs, res: http.ServerResponse) { + try { + const status = await this._commands.executeCommand('_issues.getSystemStatus'); + res.writeHead(200); + res.write(status); + res.end(); + } catch (err) { + res.writeHead(500); + res.write(String(err), err => { + if (err) { + console.error(err); + } + }); + res.end(); + } + } + dispose(): void { this._server.close(); diff --git a/src/vs/workbench/contrib/issue/electron-browser/issue.contribution.ts b/src/vs/workbench/contrib/issue/electron-browser/issue.contribution.ts index 9248eff97a8..e734abdc41b 100644 --- a/src/vs/workbench/contrib/issue/electron-browser/issue.contribution.ts +++ b/src/vs/workbench/contrib/issue/electron-browser/issue.contribution.ts @@ -12,6 +12,8 @@ import { OpenIssueReporterAction, ReportPerformanceIssueUsingReporterAction, Ope import { registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { IWorkbenchIssueService } from 'vs/workbench/contrib/issue/electron-browser/issue'; import { WorkbenchIssueService } from 'vs/workbench/contrib/issue/electron-browser/issueService'; +import { CommandsRegistry } from 'vs/platform/commands/common/commands'; +import { IIssueService } from 'vs/platform/issue/common/issue'; const helpCategory = nls.localize('help', "Help"); const workbenchActionsRegistry = Registry.as(Extensions.WorkbenchActions); @@ -24,4 +26,8 @@ if (!!product.reportIssueUrl) { const developerCategory = nls.localize('developer', "Developer"); workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(OpenProcessExplorer, OpenProcessExplorer.ID, OpenProcessExplorer.LABEL), 'Developer: Open Process Explorer', developerCategory); -registerSingleton(IWorkbenchIssueService, WorkbenchIssueService, true); \ No newline at end of file +registerSingleton(IWorkbenchIssueService, WorkbenchIssueService, true); + +CommandsRegistry.registerCommand('_issues.getSystemStatus', (accessor) => { + return accessor.get(IIssueService).getSystemStatus(); +}); \ No newline at end of file