Added tray icon voice detection
This commit is contained in:
parent
9c6b5f9194
commit
05def05cc2
7 changed files with 96 additions and 4 deletions
|
@ -18,7 +18,7 @@ import { IpcEvents } from "../shared/IpcEvents";
|
|||
import { setBadgeCount } from "./appBadge";
|
||||
import { autoStart } from "./autoStart";
|
||||
import { VENCORD_FILES_DIR, VENCORD_QUICKCSS_FILE, VENCORD_THEMES_DIR } from "./constants";
|
||||
import { mainWin } from "./mainWindow";
|
||||
import { mainWin, setTrayIcon } from "./mainWindow";
|
||||
import { Settings } from "./settings";
|
||||
import { handle, handleSync } from "./utils/ipcWrappers";
|
||||
import { PopoutWindows } from "./utils/popout";
|
||||
|
@ -153,3 +153,5 @@ watch(
|
|||
mainWin?.webContents.postMessage("VencordThemeUpdate", void 0);
|
||||
})
|
||||
);
|
||||
|
||||
handle(IpcEvents.SET_TRAY_ICON, (_, iconName: string) => setTrayIcon(iconName));
|
||||
|
|
|
@ -21,7 +21,7 @@ import { isTruthy } from "shared/utils/guards";
|
|||
import { once } from "shared/utils/once";
|
||||
import type { SettingsStore } from "shared/utils/SettingsStore";
|
||||
|
||||
import { ICON_PATH } from "../shared/paths";
|
||||
import { ICON_PATH, SPEAKING_ICON_PATH, MUTED_ICON_PATH, DEAFENED_ICON_PATH, IDLE_ICON_PATH } from "../shared/paths";
|
||||
import { createAboutWindow } from "./about";
|
||||
import { initArRPC } from "./arrpc";
|
||||
import {
|
||||
|
@ -40,6 +40,9 @@ import { makeLinksOpenExternally } from "./utils/makeLinksOpenExternally";
|
|||
import { applyDeckKeyboardFix, askToApplySteamLayout, isDeckGameMode } from "./utils/steamOS";
|
||||
import { downloadVencordFiles, ensureVencordFiles } from "./utils/vencordLoader";
|
||||
|
||||
import { fluxDispatcher } from "@vencord/types/webpack/common";
|
||||
import { onceReady } from "@vencord/types/webpack";
|
||||
|
||||
let isQuitting = false;
|
||||
let tray: Tray;
|
||||
|
||||
|
@ -478,3 +481,23 @@ export async function createWindows() {
|
|||
|
||||
initArRPC();
|
||||
}
|
||||
|
||||
export async function setTrayIcon(iconName) {
|
||||
if (!tray) return;
|
||||
switch (iconName) {
|
||||
case "speaking":
|
||||
tray.setImage(SPEAKING_ICON_PATH);
|
||||
break;
|
||||
case "muted":
|
||||
tray.setImage(MUTED_ICON_PATH);
|
||||
break;
|
||||
case "deafened":
|
||||
tray.setImage(DEAFENED_ICON_PATH);
|
||||
break;
|
||||
case "idle":
|
||||
tray.setImage(IDLE_ICON_PATH);
|
||||
break;
|
||||
default:
|
||||
tray.setImage(ICON_PATH);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,7 +24,8 @@ export const VesktopNative = {
|
|||
relaunch: () => invoke<void>(IpcEvents.RELAUNCH),
|
||||
getVersion: () => sendSync<void>(IpcEvents.GET_VERSION),
|
||||
setBadgeCount: (count: number) => invoke<void>(IpcEvents.SET_BADGE_COUNT, count),
|
||||
supportsWindowsTransparency: () => sendSync<boolean>(IpcEvents.SUPPORTS_WINDOWS_TRANSPARENCY)
|
||||
supportsWindowsTransparency: () => sendSync<boolean>(IpcEvents.SUPPORTS_WINDOWS_TRANSPARENCY),
|
||||
setTrayIcon: (iconName: string) => invoke<void>(IpcEvents.SET_TRAY_ICON, iconName)
|
||||
},
|
||||
autostart: {
|
||||
isEnabled: () => sendSync<boolean>(IpcEvents.AUTOSTART_ENABLED),
|
||||
|
|
|
@ -11,3 +11,4 @@ import "./hideSwitchDevice";
|
|||
import "./screenShareFixes";
|
||||
import "./spellCheck";
|
||||
import "./windowsTitleBar";
|
||||
import "./tray";
|
||||
|
|
59
src/renderer/patches/tray.ts
Normal file
59
src/renderer/patches/tray.ts
Normal file
|
@ -0,0 +1,59 @@
|
|||
/*
|
||||
* SPDX-License-Identifier: GPL-3.0
|
||||
* Vesktop, a desktop app aiming to give you a snappier Discord Experience
|
||||
* Copyright (c) 2024 Vendicated and Vencord contributors
|
||||
*/
|
||||
|
||||
import { findByPropsLazy, findStoreLazy, onceReady } from "@vencord/types/webpack";
|
||||
import { FluxDispatcher, UserStore } from "@vencord/types/webpack/common";
|
||||
|
||||
const logger = new Vencord.Util.Logger("VesktopTray");
|
||||
|
||||
const muteActions = findByPropsLazy("isSelfMute");
|
||||
const deafActions = findByPropsLazy("isSelfDeaf");
|
||||
|
||||
onceReady.then(() => {
|
||||
const userID = UserStore.getCurrentUser().id;
|
||||
|
||||
FluxDispatcher.subscribe("SPEAKING", params => {
|
||||
if (params.userId === userID) {
|
||||
if (params.speakingFlags) {
|
||||
VesktopNative.app.setTrayIcon("speaking");
|
||||
} else {
|
||||
if (deafActions.isSelfDeaf()) {
|
||||
VesktopNative.app.setTrayIcon("deafened");
|
||||
} else if (muteActions.isSelfMute()) {
|
||||
VesktopNative.app.setTrayIcon("muted");
|
||||
} else {
|
||||
VesktopNative.app.setTrayIcon("idle");
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
FluxDispatcher.subscribe("AUDIO_TOGGLE_SELF_DEAF", () => {
|
||||
if (deafActions.isSelfDeaf()) {
|
||||
VesktopNative.app.setTrayIcon("deafened");
|
||||
} else if (muteActions.isSelfMute()) {
|
||||
VesktopNative.app.setTrayIcon("muted");
|
||||
} else {
|
||||
VesktopNative.app.setTrayIcon("idle");
|
||||
}
|
||||
});
|
||||
|
||||
FluxDispatcher.subscribe("AUDIO_TOGGLE_SELF_MUTE", () => {
|
||||
if (muteActions.isSelfMute()) {
|
||||
VesktopNative.app.setTrayIcon("muted");
|
||||
} else {
|
||||
VesktopNative.app.setTrayIcon("idle");
|
||||
}
|
||||
});
|
||||
|
||||
FluxDispatcher.subscribe("RTC_CONNECTION_STATE", params => {
|
||||
if (params.state == "RTC_CONNECTED") {
|
||||
VesktopNative.app.setTrayIcon("idle");
|
||||
} else if (params.state == "RTC_DISCONNECTED") {
|
||||
VesktopNative.app.setTrayIcon("main");
|
||||
}
|
||||
});
|
||||
});
|
|
@ -49,5 +49,7 @@ export const enum IpcEvents {
|
|||
|
||||
ARRPC_ACTIVITY = "VCD_ARRPC_ACTIVITY",
|
||||
|
||||
CLIPBOARD_COPY_IMAGE = "VCD_CLIPBOARD_COPY_IMAGE"
|
||||
CLIPBOARD_COPY_IMAGE = "VCD_CLIPBOARD_COPY_IMAGE",
|
||||
|
||||
SET_TRAY_ICON = "VCD_SET_TRAY_ICON"
|
||||
}
|
||||
|
|
|
@ -10,3 +10,7 @@ export const STATIC_DIR = /* @__PURE__ */ join(__dirname, "..", "..", "static");
|
|||
export const VIEW_DIR = /* @__PURE__ */ join(STATIC_DIR, "views");
|
||||
export const BADGE_DIR = /* @__PURE__ */ join(STATIC_DIR, "badges");
|
||||
export const ICON_PATH = /* @__PURE__ */ join(STATIC_DIR, "icon.png");
|
||||
export const SPEAKING_ICON_PATH = /* @__PURE__ */ join(STATIC_DIR, "speaking.png");
|
||||
export const MUTED_ICON_PATH = /* @__PURE__ */ join(STATIC_DIR, "muted.png");
|
||||
export const DEAFENED_ICON_PATH = /* @__PURE__ */ join(STATIC_DIR, "deafened.png");
|
||||
export const IDLE_ICON_PATH = /* @__PURE__ */ join(STATIC_DIR, "idle.png");
|
||||
|
|
Loading…
Reference in a new issue