aboutsummaryrefslogtreecommitdiff
path: root/src/extension.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/extension.ts')
-rw-r--r--src/extension.ts78
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();
+}