diff --git a/package.json b/package.json index 09b6f85..b129f7e 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,8 @@ "watch": "pnpm build --watch" }, "dependencies": { - "arrpc": "github:OpenAsar/arrpc#89f4da610ccfac93f461826a446a17cd3b23953d" + "arrpc": "github:OpenAsar/arrpc#89f4da610ccfac93f461826a446a17cd3b23953d", + "venmic": "link:../linux-virtmic" }, "devDependencies": { "@fal-works/esbuild-plugin-global-externals": "^2.1.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f48dca4..d99bb92 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ dependencies: arrpc: specifier: github:OpenAsar/arrpc#89f4da610ccfac93f461826a446a17cd3b23953d version: github.com/OpenAsar/arrpc/89f4da610ccfac93f461826a446a17cd3b23953d + venmic: + specifier: link:../linux-virtmic + version: link:../linux-virtmic devDependencies: '@fal-works/esbuild-plugin-global-externals': diff --git a/scripts/build/build.mts b/scripts/build/build.mts index f210919..e1a9d3c 100644 --- a/scripts/build/build.mts +++ b/scripts/build/build.mts @@ -5,6 +5,7 @@ */ import { BuildContext, BuildOptions, context } from "esbuild"; +import { copyFile } from "fs/promises"; import vencordDep from "./vencordDep.mjs"; @@ -34,6 +35,7 @@ async function createContext(options: BuildOptions) { } await Promise.all([ + copyFile("./node_modules/venmic/build/Release/venmic-addon.node", "./static/dist/venmic.node"), createContext({ ...NodeCommonOpts, entryPoints: ["src/main/index.ts"], diff --git a/src/main/virtmic.ts b/src/main/virtmic.ts index 01afe9b..e17d2c4 100644 --- a/src/main/virtmic.ts +++ b/src/main/virtmic.ts @@ -4,51 +4,21 @@ * Copyright (c) 2023 Vendicated and Vencord contributors */ -import { ChildProcess, execFile } from "child_process"; import { ipcMain } from "electron"; import { join } from "path"; import { IpcEvents } from "shared/IpcEvents"; import { STATIC_DIR } from "shared/paths"; -import { promisify } from "util"; -const BIN = join(STATIC_DIR, "virtmic/vencord-virtmic"); -const execFileP = promisify(execFile); +const importVenmic = () => require(join(STATIC_DIR, "dist/venmic.node")) as typeof import("venmic"); -ipcMain.handle(IpcEvents.VIRT_MIC_LIST, async () => { - return execFileP(BIN, ["--list-targets"]) - .then(res => - res.stdout - .trim() - .split("\n") - .map(s => s.trim()) - .filter(Boolean) - ) - .catch(e => { - console.error("virt-mic-list failed", e); - return null; - }); -}); - -let virtMicProc: ChildProcess | null = null; - -function kill() { - virtMicProc?.kill(); - virtMicProc = null; -} +ipcMain.handle(IpcEvents.VIRT_MIC_LIST, async () => + importVenmic() + .list() + .map(m => m.name) +); ipcMain.handle(IpcEvents.VIRT_MIC_START, (_, target: string) => { - kill(); - - return new Promise(resolve => { - virtMicProc = execFile(BIN, [target], { encoding: "utf-8" }); - virtMicProc.stdout?.on("data", (chunk: string) => { - if (chunk.includes("vencord-virtmic")) resolve(true); - }); - virtMicProc.on("error", () => resolve(false)); - virtMicProc.on("exit", () => resolve(false)); - - setTimeout(() => resolve(false), 1000); - }); + importVenmic().link(target); }); -ipcMain.handle(IpcEvents.VIRT_MIC_KILL, () => kill()); +ipcMain.handle(IpcEvents.VIRT_MIC_KILL, () => importVenmic().unlink()); diff --git a/src/renderer/patches/screenShareAudio.ts b/src/renderer/patches/screenShareAudio.ts index c021848..3b926c3 100644 --- a/src/renderer/patches/screenShareAudio.ts +++ b/src/renderer/patches/screenShareAudio.ts @@ -12,7 +12,7 @@ if (isLinux) { async function getVirtmic() { try { const devices = await navigator.mediaDevices.enumerateDevices(); - const audioDevice = devices.find(({ label }) => label === "vencord-virtmic"); + const audioDevice = devices.find(({ label }) => label === "vencord-screen-share"); return audioDevice?.deviceId; } catch (error) { return null; diff --git a/static/venmic.node b/static/venmic.node new file mode 100755 index 0000000..4e10d63 Binary files /dev/null and b/static/venmic.node differ diff --git a/static/virtmic/README.md b/static/virtmic/README.md deleted file mode 100644 index a0e9dc0..0000000 --- a/static/virtmic/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# vencord virtmic - -this is a prebuild of https://github.com/Vencord/linux-virtmic. - -the source code and licensing information can be found there diff --git a/static/virtmic/vencord-virtmic b/static/virtmic/vencord-virtmic deleted file mode 100755 index c1b74a7..0000000 Binary files a/static/virtmic/vencord-virtmic and /dev/null differ