diff options
Diffstat (limited to 'src/extension.ts')
| -rw-r--r-- | src/extension.ts | 78 |
1 files changed, 54 insertions, 24 deletions
diff --git a/src/extension.ts b/src/extension.ts index 17b0f53..0cfa787 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,27 +1,36 @@ -// 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; +let building = false; +const client: buttplug.ButtplugClient = new buttplug.ButtplugClient("VS Code"); -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"); +async function connect() { + const connector = new buttplug.ButtplugNodeWebsocketClientConnector(config!.get('serverAddress') as string); + if (client.connected) { + await client.stopAllDevices(); + await client.disconnect(); + } + try { + await client.connect(connector); + vscode.window.showInformationMessage("Connected to buttplug server."); + } catch (e) { + vscode.window.showErrorMessage(`Failed to connect to buttplug server: ${e}`); + } +} + +export async function activate(context: vscode.ExtensionContext) { client.addListener("deviceadded", async (device: buttplug.ButtplugClientDevice) => { vscode.window.showInformationMessage(`Device Connected: ${device.name}`); - if (device.vibrateAttributes.length == 0) { + if (device.vibrateAttributes.length === 0) { return; } try { - await device.vibrate(0.1); - await device.stop(); + await device.vibrate((config!.get('typingStrength') as number) * (config!.get('strength') as number)); + timeout = setTimeout(async () => await device?.stop(), 100); selected_device = device; } catch (e) { vscode.window.showErrorMessage(e as string); @@ -31,12 +40,19 @@ export async function activate(context: vscode.ExtensionContext) { } }); client - .addListener("deviceremoved", (device) => console.log(`Device Removed: ${device.name}`)); + .addListener("deviceremoved", (device) => vscode.window.showInformationMessage(`Device Removed: ${device.name}`)); + config = vscode.workspace.getConfiguration('buttplug'); - await client.connect(connector); + context.subscriptions.push(vscode.workspace.onDidChangeConfiguration(async e => { + if (!e.affectsConfiguration('buttplug')) { return; } + config = vscode.workspace.getConfiguration('buttplug'); + await connect(); + })); - const disposable = vscode.workspace.onDidChangeTextDocument(async (e) => { - if (taskRunning) return; + // Vibe on type + context.subscriptions.push(vscode.workspace.onDidChangeTextDocument(async (e) => { + if (config!.get('typingStrength') === 0) { return; } + if (config!.get('buildStrength') !== 0 && building) { return; } const activeEditor = vscode.window.activeTextEditor; if (!activeEditor) { @@ -48,24 +64,38 @@ export async function activate(context: vscode.ExtensionContext) { clearTimeout(timeout); } timeout = setTimeout(async () => await selected_device?.stop(), config!.get('typingDuration') as number * 1000); - }); - - context.subscriptions.push(disposable); + })); + // Vibrate continuously while building context.subscriptions.push(vscode.tasks.onDidStartTask(async e => { + if (config!.get('buildStrength') === 0) { return; } if (e.execution.task.group === vscode.TaskGroup.Build) { - taskRunning = true; + building = true; await selected_device?.vibrate((config!.get('buildStrength') as number) * (config!.get('strength') as number)); } })); + // Stop vibration once build tasks all finish context.subscriptions.push(vscode.tasks.onDidEndTask(async e => { - if (e.execution.task.group === vscode.TaskGroup.Build) { - taskRunning = false; + if ((await vscode.tasks.taskExecutions).every(t => t.task.group !== vscode.TaskGroup.Build)) { + building = false; await selected_device?.stop(); } })); -} -// This method is called when your extension is deactivated -export function deactivate() { } + // Asshole obliteration command + vscode.commands.registerCommand("buttplug.assblast", () => { + selected_device?.vibrate(1.0); + }); + + // Killswitch for safety purposes + vscode.commands.registerCommand("buttplug.killswitch", () => { + selected_device?.stop(); + }); + + vscode.commands.registerCommand("buttplug.reconnect", () => { + connect(); + }); + + connect(); +} |
