diff --git a/src/main/cli.ts b/src/main/cli.ts index fc0db35..3b227af 100644 --- a/src/main/cli.ts +++ b/src/main/cli.ts @@ -52,8 +52,6 @@ const options = { "toggleMute", "toggleDeafen", "toggleStreamerMode", - "toggleCamera", - "toggleScreenShare", "disconnectFromVoiceChannel" ] satisfies Array } diff --git a/src/main/index.ts b/src/main/index.ts index 1458fc3..560cabb 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -18,6 +18,7 @@ import { CommandLine } from "./cli"; import { DATA_DIR } from "./constants"; import { createFirstLaunchTour } from "./firstLaunch"; import { sendRendererCommand } from "./ipcCommands"; +import { initSocket } from "./ipcSocket"; import { registerKeyBinds } from "./keyBinds"; import { createWindows, mainWin } from "./mainWindow"; import { registerMediaPermissionsHandler } from "./mediaPermissions"; @@ -124,6 +125,7 @@ function init() { registerScreenShareHandler(); registerMediaPermissionsHandler(); registerKeyBinds(); + initSocket(); bootstrap(); diff --git a/src/main/ipcSocket.ts b/src/main/ipcSocket.ts new file mode 100644 index 0000000..a5843cb --- /dev/null +++ b/src/main/ipcSocket.ts @@ -0,0 +1,61 @@ +/* + * Vesktop, a desktop app aiming to give you a snappier Discord Experience + * Copyright (c) 2026 Vendicated and Vesktop contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import { app } from "electron"; +import { rmSync } from "fs"; +import { rm } from "fs/promises"; +import { createServer, Server } from "net"; +import { join } from "path"; +import { IpcCommands } from "shared/IpcEvents"; + +import { sendRendererCommand } from "./ipcCommands"; + +const { env, platform } = process; + +let server: Server; + +const SOCKET_PATH = + platform === "win32" + ? "\\\\?\\pipe\\vesktop.sock" + : join(env.XDG_RUNTIME_DIR || env.TMPDIR || env.TMP || env.TEMP || "/tmp", "vesktop.sock"); + +export async function initSocket() { + await rm(SOCKET_PATH, { force: true }); + + server = createServer(socket => { + socket.setEncoding("utf-8"); + + const reply = (message: string) => { + socket.write(message); + socket.end(); + }; + + socket.on("data", async (data: string) => { + try { + const [command, ...args] = data.trim().split(":"); + + if (command === "run-shortcut") { + await sendRendererCommand(IpcCommands.KEY_BINDS_HANDLE, args[0]); + return; + } + + reply("Unknown Command"); + } catch (e) { + reply("Unknown Error"); + } + }); + }); + + server.listen(SOCKET_PATH); + server.on("error", err => { + console.error("Vesktop IPC Socket Error:", err); + }); +} + +app.on("will-quit", () => { + server?.close(); + rmSync(SOCKET_PATH, { force: true }); +});