Skip to content

Commit 0620dd2

Browse files
committed
feat: add basic context menu options
1 parent 84f68a1 commit 0620dd2

File tree

3 files changed

+70
-2
lines changed

3 files changed

+70
-2
lines changed

package.json

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,39 @@
3232
"visibility": "visible",
3333
"icon": "media/dep.svg",
3434
"contextualTitle": "Workspaces"
35+
},
36+
{
37+
"id": "coderHelpFeedback",
38+
"name": "Help and Feedback"
39+
}
40+
]
41+
},
42+
"menus": {
43+
"view/item/context": [
44+
{
45+
"command": "coderWorkspaces.rebuildWorkspace",
46+
"when": "view == coderWorkspaces"
47+
},
48+
{
49+
"command": "coderWorkspaces.openWorkspace",
50+
"when": "view == coderWorkspaces"
3551
}
3652
]
3753
},
38-
"commands": [ ]
54+
"commands": [
55+
{
56+
"command": "coderWorkspaces.refreshWorkspaces",
57+
"title": "Refresh Workspaces"
58+
},
59+
{
60+
"command": "coderWorkspaces.rebuildWorkspace",
61+
"title": "Rebuild Workspace"
62+
},
63+
{
64+
"command": "coderWorkspaces.openWorkspace",
65+
"title": "Open Workspace"
66+
}
67+
]
3968
},
4069
"scripts": {
4170
"vscode:prepublish": "npm run package",

src/extension.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,21 @@
22

33
import * as vscode from 'vscode';
44

5-
import { CoderWorkspacesProvider, CoderWorkspace } from './workspaces';
5+
import { CoderWorkspacesProvider, CoderWorkspace, rebuildWorkspace, openWorkspace } from './workspaces';
66

77
export function activate(context: vscode.ExtensionContext) {
88
const workspaceProvider = new CoderWorkspacesProvider();
99
vscode.window.registerTreeDataProvider('coderWorkspaces', workspaceProvider);
10+
vscode.commands.registerCommand("coderWorkspaces.openWorkspace", (ws: CoderWorkspace) => {
11+
const { name } = ws.workspace;
12+
openWorkspace(name);
13+
});
14+
vscode.commands.registerCommand("coderWorkspaces.rebuildWorkspace", (ws: CoderWorkspace) => {
15+
const { name } = ws.workspace;
16+
rebuildWorkspace(name);
17+
});
1018

19+
vscode.commands.registerCommand("coderWorkspaces.refreshWorkspaces", (a, b) => {
20+
workspaceProvider.refresh();
21+
});
1122
}

src/workspaces.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,34 @@ export class CoderWorkspacesProvider implements vscode.TreeDataProvider<CoderWor
2323
}
2424
}
2525

26+
export const rebuildWorkspace = async (name: string): Promise<void> => {
27+
return new Promise((res, rej) => {
28+
cp.exec(`coder envs rebuild ${name} --force`, (err, stdout, stderr) => {
29+
if (err) {
30+
vscode.window.showErrorMessage(`Failed to rebuild Coder Workspaces: ${err}`);
31+
rej(err);
32+
return;
33+
}
34+
res();
35+
vscode.window.showInformationMessage(`Rebuilding Coder Workspace "${name}"`);
36+
});
37+
});
38+
};
39+
40+
export const openWorkspace = async (name: string): Promise<void> => {
41+
return new Promise((res, rej) => {
42+
cp.exec(`code --remote "ssh-remote+coder.${name}" /home/coder`, (err, stdout, stderr) => {
43+
if (err) {
44+
vscode.window.showErrorMessage(`Failed to open Coder Workspaces: ${err}`);
45+
rej(err);
46+
return;
47+
}
48+
res();
49+
vscode.window.showInformationMessage(`Opening Coder Workspace "${name}"`);
50+
});
51+
});
52+
}
53+
2654
const getWorkspaces = async (): Promise<CoderWorkspace[]> => {
2755
const images = await getImages();
2856
return new Promise((res, rej) => {

0 commit comments

Comments
 (0)