diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/extension.ts | 71 | ||||
| -rw-r--r-- | src/test/extension.test.ts | 15 |
2 files changed, 86 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() { } diff --git a/src/test/extension.test.ts b/src/test/extension.test.ts new file mode 100644 index 0000000..4ca0ab4 --- /dev/null +++ b/src/test/extension.test.ts @@ -0,0 +1,15 @@ +import * as assert from 'assert'; + +// You can import and use all API from the 'vscode' module +// as well as import your extension to test it +import * as vscode from 'vscode'; +// import * as myExtension from '../../extension'; + +suite('Extension Test Suite', () => { + vscode.window.showInformationMessage('Start all tests.'); + + test('Sample test', () => { + assert.strictEqual(-1, [1, 2, 3].indexOf(5)); + assert.strictEqual(-1, [1, 2, 3].indexOf(0)); + }); +}); |
