// 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() { }