From 7e1c3a43eefb4c5d546cdeaa7ff49d0f56f3430e Mon Sep 17 00:00:00 2001 From: Vendicated Date: Sat, 14 Oct 2023 20:17:21 +0200 Subject: [PATCH] adapt to latest venmic again --- src/main/virtmic.ts | 25 ++++++++++++++++--- src/preload/VesktopNative.ts | 3 ++- src/renderer/components/ScreenSharePicker.tsx | 4 +-- src/shared/IpcEvents.ts | 1 + 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/main/virtmic.ts b/src/main/virtmic.ts index 4c415b4..d206682 100644 --- a/src/main/virtmic.ts +++ b/src/main/virtmic.ts @@ -4,7 +4,7 @@ * Copyright (c) 2023 Vendicated and Vencord contributors */ -import { ipcMain } from "electron"; +import { app, ipcMain } from "electron"; import { join } from "path"; import { IpcEvents } from "shared/IpcEvents"; import { STATIC_DIR } from "shared/paths"; @@ -12,6 +12,15 @@ import { STATIC_DIR } from "shared/paths"; let initialized = false; let patchBay: import("venmic").PatchBay | undefined; +function getRendererAudioServicePid() { + return ( + app + .getAppMetrics() + .find(proc => proc.name === "Audio Service") + ?.pid?.toString() ?? "owo" + ); +} + function obtainVenmic() { if (!initialized) { initialized = true; @@ -26,11 +35,19 @@ function obtainVenmic() { return patchBay; } -ipcMain.handle(IpcEvents.VIRT_MIC_LIST, () => obtainVenmic()?.list() ?? []); +ipcMain.handle(IpcEvents.VIRT_MIC_LIST, () => { + const audioPid = getRendererAudioServicePid(); + return obtainVenmic() + ?.list() + ?.filter(s => s["application.process.id"] !== audioPid) + ?.map(s => s["node.name"]); +}); + +ipcMain.handle(IpcEvents.VIRT_MIC_START, (_, target: string) => obtainVenmic()?.link("node.name", target, "include")); ipcMain.handle( - IpcEvents.VIRT_MIC_START, - (_, target: string, mode: "include" | "exclude") => obtainVenmic()?.link(target, mode) + IpcEvents.VIRT_MIC_START_SYSTEM, + () => obtainVenmic()?.link("application.process.id", getRendererAudioServicePid(), "exclude") ); ipcMain.handle(IpcEvents.VIRT_MIC_KILL, () => obtainVenmic()?.unlink()); diff --git a/src/preload/VesktopNative.ts b/src/preload/VesktopNative.ts index 7c58453..254e0f4 100644 --- a/src/preload/VesktopNative.ts +++ b/src/preload/VesktopNative.ts @@ -62,7 +62,8 @@ export const VesktopNative = { /** only available on Linux. */ virtmic: { list: () => invoke(IpcEvents.VIRT_MIC_LIST), - start: (target: string, mode: "include" | "exclude") => invoke(IpcEvents.VIRT_MIC_START, target, mode), + start: (target: string) => invoke(IpcEvents.VIRT_MIC_START, target), + startSystem: () => invoke(IpcEvents.VIRT_MIC_START_SYSTEM), kill: () => invoke(IpcEvents.VIRT_MIC_KILL) }, arrpc: { diff --git a/src/renderer/components/ScreenSharePicker.tsx b/src/renderer/components/ScreenSharePicker.tsx index fd59d1c..72c7494 100644 --- a/src/renderer/components/ScreenSharePicker.tsx +++ b/src/renderer/components/ScreenSharePicker.tsx @@ -83,9 +83,9 @@ export function openScreenSharePicker(screens: Source[], skipPicker: boolean) { didSubmit = true; if (v.audioSource && v.audioSource !== "None") { if (v.audioSource === "Entire System") { - await VesktopNative.virtmic.start("Chromium", "exclude"); + await VesktopNative.virtmic.startSystem(); } else { - await VesktopNative.virtmic.start(v.audioSource, "include"); + await VesktopNative.virtmic.start(v.audioSource); } } resolve(v); diff --git a/src/shared/IpcEvents.ts b/src/shared/IpcEvents.ts index f27d827..78cb322 100644 --- a/src/shared/IpcEvents.ts +++ b/src/shared/IpcEvents.ts @@ -44,6 +44,7 @@ export const enum IpcEvents { VIRT_MIC_LIST = "VCD_VIRT_MIC_LIST", VIRT_MIC_START = "VCD_VIRT_MIC_START", + VIRT_MIC_START_SYSTEM = "VCD_VIRT_MIC_START_ALL", VIRT_MIC_KILL = "VCD_VIRT_MIC_STOP", ARRPC_ACTIVITY = "VCD_ARRPC_ACTIVITY"