|
9 | 9 | import * as pioNodeHelpers from 'platformio-node-helpers'; |
10 | 10 |
|
11 | 11 | import { IS_OSX } from './constants'; |
| 12 | +import ProjectObservable from './project/observable'; |
12 | 13 | import crypto from 'crypto'; |
13 | 14 | import { extension } from './main'; |
14 | 15 | import { notifyError } from './utils'; |
@@ -97,44 +98,7 @@ export default class PIOHome { |
97 | 98 | await pioNodeHelpers.home.ensureServerStarted({ |
98 | 99 | port: extension.getSetting('pioHomeServerHttpPort'), |
99 | 100 | host: extension.getSetting('pioHomeServerHttpHost'), |
100 | | - onIDECommand: async (command, params) => { |
101 | | - if (command === 'open_project') { |
102 | | - if (extension.projectObservable) { |
103 | | - extension.projectObservable.saveProjectStateItem( |
104 | | - vscode.Uri.file(params).fsPath, |
105 | | - 'activeEnv', |
106 | | - undefined |
107 | | - ); |
108 | | - } |
109 | | - this.disposePanel(); |
110 | | - if (vscode.workspace.workspaceFolders) { |
111 | | - vscode.workspace.updateWorkspaceFolders( |
112 | | - vscode.workspace.workspaceFolders.length, |
113 | | - null, |
114 | | - { uri: vscode.Uri.file(params) } |
115 | | - ); |
116 | | - } else { |
117 | | - vscode.commands.executeCommand( |
118 | | - 'vscode.openFolder', |
119 | | - vscode.Uri.file(params) |
120 | | - ); |
121 | | - } |
122 | | - vscode.commands.executeCommand('workbench.view.explorer'); |
123 | | - } else if (command === 'open_text_document') { |
124 | | - const editor = await vscode.window.showTextDocument( |
125 | | - vscode.Uri.file(params.path) |
126 | | - ); |
127 | | - const gotoPosition = new vscode.Position( |
128 | | - (params.line || 1) - 1, |
129 | | - (params.column || 1) - 1 |
130 | | - ); |
131 | | - editor.selection = new vscode.Selection(gotoPosition, gotoPosition); |
132 | | - editor.revealRange( |
133 | | - new vscode.Range(gotoPosition, gotoPosition), |
134 | | - vscode.TextEditorRevealType.InCenter |
135 | | - ); |
136 | | - } |
137 | | - }, |
| 101 | + onIDECommand: await this.onIDECommand.bind(this), |
138 | 102 | }); |
139 | 103 | const theme = this.getTheme(); |
140 | 104 | const iframeId = |
@@ -174,6 +138,57 @@ export default class PIOHome { |
174 | 138 | `; |
175 | 139 | } |
176 | 140 |
|
| 141 | + async onIDECommand(command, params) { |
| 142 | + switch (command) { |
| 143 | + case 'open_project': |
| 144 | + return this.onOpenProjectCommand(params); |
| 145 | + case 'open_text_document': |
| 146 | + return await this.onOpenTextDocumentCommand(params); |
| 147 | + case 'get_pio_project_dirs': |
| 148 | + return this.onGetPIOProjectDirs(); |
| 149 | + } |
| 150 | + } |
| 151 | + |
| 152 | + onOpenProjectCommand(params) { |
| 153 | + if (extension.projectObservable) { |
| 154 | + extension.projectObservable.saveProjectStateItem( |
| 155 | + vscode.Uri.file(params).fsPath, |
| 156 | + 'activeEnv', |
| 157 | + undefined |
| 158 | + ); |
| 159 | + } |
| 160 | + this.disposePanel(); |
| 161 | + if (vscode.workspace.workspaceFolders) { |
| 162 | + vscode.workspace.updateWorkspaceFolders( |
| 163 | + vscode.workspace.workspaceFolders.length, |
| 164 | + null, |
| 165 | + { uri: vscode.Uri.file(params) } |
| 166 | + ); |
| 167 | + } else { |
| 168 | + vscode.commands.executeCommand('vscode.openFolder', vscode.Uri.file(params)); |
| 169 | + } |
| 170 | + vscode.commands.executeCommand('workbench.view.explorer'); |
| 171 | + return true; |
| 172 | + } |
| 173 | + |
| 174 | + async onOpenTextDocumentCommand(params) { |
| 175 | + const editor = await vscode.window.showTextDocument(vscode.Uri.file(params.path)); |
| 176 | + const gotoPosition = new vscode.Position( |
| 177 | + (params.line || 1) - 1, |
| 178 | + (params.column || 1) - 1 |
| 179 | + ); |
| 180 | + editor.selection = new vscode.Selection(gotoPosition, gotoPosition); |
| 181 | + editor.revealRange( |
| 182 | + new vscode.Range(gotoPosition, gotoPosition), |
| 183 | + vscode.TextEditorRevealType.InCenter |
| 184 | + ); |
| 185 | + return true; |
| 186 | + } |
| 187 | + |
| 188 | + onGetPIOProjectDirs() { |
| 189 | + return ProjectObservable.getPIOProjectDirs(); |
| 190 | + } |
| 191 | + |
177 | 192 | onPanelDisposed() { |
178 | 193 | this._currentPanel = undefined; |
179 | 194 | } |
|
0 commit comments