blob: 17b0f536953e31653785826dbe0ed29b88033358 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
// The module 'vscode' contains the VS Code extensibility API
// Import the module and reference it with the alias vscode in your code below
import * as vscode from 'vscode';
import * as buttplug from 'buttplug';
let selected_device: buttplug.ButtplugClientDevice | null = null;
let timeout: NodeJS.Timeout | null = null;
let config: vscode.WorkspaceConfiguration | null = null;
let taskRunning = false;
export async function activate(context: vscode.ExtensionContext) {
config = vscode.workspace.getConfiguration('buttplug');
context.subscriptions.push(vscode.workspace.onDidChangeConfiguration(_ => config = vscode.workspace.getConfiguration('buttplug')));
const connector = new buttplug.ButtplugNodeWebsocketClientConnector("ws://127.0.0.1:12345");
let client = new buttplug.ButtplugClient("VS Code");
client.addListener("deviceadded", async (device: buttplug.ButtplugClientDevice) => {
vscode.window.showInformationMessage(`Device Connected: ${device.name}`);
if (device.vibrateAttributes.length == 0) {
return;
}
try {
await device.vibrate(0.1);
await device.stop();
selected_device = device;
} catch (e) {
vscode.window.showErrorMessage(e as string);
if (e instanceof buttplug.ButtplugDeviceError) {
vscode.window.showErrorMessage("got a device error!");
}
}
});
client
.addListener("deviceremoved", (device) => console.log(`Device Removed: ${device.name}`));
await client.connect(connector);
const disposable = vscode.workspace.onDidChangeTextDocument(async (e) => {
if (taskRunning) return;
const activeEditor = vscode.window.activeTextEditor;
if (!activeEditor) {
return;
}
await selected_device?.vibrate((config!.get('typingStrength') as number) * (config!.get('strength') as number));
if (timeout) {
clearTimeout(timeout);
}
timeout = setTimeout(async () => await selected_device?.stop(), config!.get('typingDuration') as number * 1000);
});
context.subscriptions.push(disposable);
context.subscriptions.push(vscode.tasks.onDidStartTask(async e => {
if (e.execution.task.group === vscode.TaskGroup.Build) {
taskRunning = true;
await selected_device?.vibrate((config!.get('buildStrength') as number) * (config!.get('strength') as number));
}
}));
context.subscriptions.push(vscode.tasks.onDidEndTask(async e => {
if (e.execution.task.group === vscode.TaskGroup.Build) {
taskRunning = false;
await selected_device?.stop();
}
}));
}
// This method is called when your extension is deactivated
export function deactivate() { }
|