diff options
Diffstat (limited to 'src/extension.ts')
| -rw-r--r-- | src/extension.ts | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/extension.ts b/src/extension.ts new file mode 100644 index 0000000..17b0f53 --- /dev/null +++ b/src/extension.ts @@ -0,0 +1,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() { } |
