adapt to latest venmic again

This commit is contained in:
Vendicated 2023-10-14 20:17:21 +02:00
parent 115e436ff1
commit 7e1c3a43ee
No known key found for this signature in database
GPG key ID: D66986BAF75ECF18
4 changed files with 26 additions and 7 deletions

View file

@ -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());

View file

@ -62,7 +62,8 @@ export const VesktopNative = {
/** only available on Linux. */
virtmic: {
list: () => invoke<string[] | null>(IpcEvents.VIRT_MIC_LIST),
start: (target: string, mode: "include" | "exclude") => invoke<void>(IpcEvents.VIRT_MIC_START, target, mode),
start: (target: string) => invoke<void>(IpcEvents.VIRT_MIC_START, target),
startSystem: () => invoke<void>(IpcEvents.VIRT_MIC_START_SYSTEM),
kill: () => invoke<void>(IpcEvents.VIRT_MIC_KILL)
},
arrpc: {

View file

@ -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);

View file

@ -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"