Add Push To Talk binds
This commit is contained in:
+1
-7
@@ -6,7 +6,6 @@
|
|||||||
|
|
||||||
import { app } from "electron";
|
import { app } from "electron";
|
||||||
import { basename } from "path";
|
import { basename } from "path";
|
||||||
import { ShortcutAction } from "renderer/globalShortcuts/ShortcutSettings";
|
|
||||||
import { stripIndent } from "shared/utils/text";
|
import { stripIndent } from "shared/utils/text";
|
||||||
import { parseArgs, ParseArgsOptionDescriptor } from "util";
|
import { parseArgs, ParseArgsOptionDescriptor } from "util";
|
||||||
|
|
||||||
@@ -48,12 +47,7 @@ const options = {
|
|||||||
type: "string",
|
type: "string",
|
||||||
description:
|
description:
|
||||||
"Run a predefined shortcut action (for custom key binds). Vesktop has to be open for this to have any effect",
|
"Run a predefined shortcut action (for custom key binds). Vesktop has to be open for this to have any effect",
|
||||||
options: [
|
argumentName: "action"
|
||||||
"toggleMute",
|
|
||||||
"toggleDeafen",
|
|
||||||
"toggleStreamerMode",
|
|
||||||
"disconnectFromVoiceChannel"
|
|
||||||
] satisfies Array<ShortcutAction>
|
|
||||||
}
|
}
|
||||||
} satisfies Record<string, Option>;
|
} satisfies Record<string, Option>;
|
||||||
|
|
||||||
|
|||||||
@@ -30,9 +30,17 @@ const cl = classNameFactory("vcd-shortcuts-");
|
|||||||
|
|
||||||
const ShortcutActions = {
|
const ShortcutActions = {
|
||||||
unassigned: "Unassigned",
|
unassigned: "Unassigned",
|
||||||
|
mute: "Mute",
|
||||||
|
unmute: "Unmute",
|
||||||
toggleMute: "Toggle Mute",
|
toggleMute: "Toggle Mute",
|
||||||
toggleDeafen: "Toggle Deafen",
|
toggleDeafen: "Toggle Deafen",
|
||||||
toggleStreamerMode: "Toggle Streamer Mode",
|
toggleStreamerMode: "Toggle Streamer Mode",
|
||||||
|
pushToTalkNormalToggle: "Push-to-Talk (Normal) Toggle",
|
||||||
|
pushToTalkNormalStart: "Push-to-Talk (Normal) Start",
|
||||||
|
pushToTalkNormalStop: "Push-to-Talk (Normal) Stop",
|
||||||
|
pushToTalkPriorityToggle: "Push-to-Talk (Priority) Toggle",
|
||||||
|
pushToTalkPriorityStart: "Push-to-Talk (Priority) Start",
|
||||||
|
pushToTalkPriorityStop: "Push-to-Talk (Priority) Stop",
|
||||||
disconnectFromVoiceChannel: "Disconnect from VC"
|
disconnectFromVoiceChannel: "Disconnect from VC"
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
@@ -173,7 +181,7 @@ export function KeyBindSettings() {
|
|||||||
|
|
||||||
export function openKeybindsModal() {
|
export function openKeybindsModal() {
|
||||||
openModal(props => (
|
openModal(props => (
|
||||||
<ModalRoot {...props} size={ModalSize.MEDIUM}>
|
<ModalRoot {...props} size={ModalSize.LARGE}>
|
||||||
<ModalHeader>
|
<ModalHeader>
|
||||||
<BaseText size="lg" weight="semibold" tag="h3" style={{ flexGrow: 1 }}>
|
<BaseText size="lg" weight="semibold" tag="h3" style={{ flexGrow: 1 }}>
|
||||||
Keybinds
|
Keybinds
|
||||||
|
|||||||
@@ -5,51 +5,84 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Logger } from "@vencord/types/utils";
|
import { Logger } from "@vencord/types/utils";
|
||||||
import { findByPropsLazy } from "@vencord/types/webpack";
|
import { waitFor } from "@vencord/types/webpack";
|
||||||
import { FluxDispatcher, StreamerModeStore } from "@vencord/types/webpack/common";
|
import { FluxDispatcher } from "@vencord/types/webpack/common";
|
||||||
|
|
||||||
import { ShortcutAction } from "./ShortcutSettings";
|
import { ShortcutAction } from "./ShortcutSettings";
|
||||||
|
|
||||||
const logger = new Logger("VesktopKeyBindHandler");
|
const logger = new Logger("VesktopKeyBindHandler");
|
||||||
|
|
||||||
const { selectVoiceChannel } = findByPropsLazy("selectVoiceChannel");
|
interface KeyBindAction {
|
||||||
|
onTrigger(...args: any[]): void;
|
||||||
|
isPressed?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
let KeyBindActions: Record<string, KeyBindAction>;
|
||||||
|
|
||||||
|
waitFor(["dispatch", "subscribe"], FluxDispatcher => {
|
||||||
|
FluxDispatcher.subscribe("KEYBINDS_REGISTER_GLOBAL_KEYBIND_ACTIONS", event => {
|
||||||
|
KeyBindActions = event.keybinds;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
export function handleKeyBind(keyBind: ShortcutAction) {
|
export function handleKeyBind(keyBind: ShortcutAction) {
|
||||||
logger.debug(`Handling key bind action: ${keyBind}`);
|
logger.debug(`Handling key bind action: ${keyBind}`);
|
||||||
|
|
||||||
|
if (!KeyBindActions) {
|
||||||
|
logger.error("Failed to retrieve KeyBindActions, cannot handle key bind");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch (keyBind) {
|
switch (keyBind) {
|
||||||
case "toggleMute":
|
|
||||||
FluxDispatcher.dispatch({
|
|
||||||
type: "AUDIO_TOGGLE_SELF_MUTE",
|
|
||||||
context: "default",
|
|
||||||
syncRemote: true,
|
|
||||||
playSoundEffect: true
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "toggleDeafen":
|
|
||||||
FluxDispatcher.dispatch({
|
|
||||||
type: "AUDIO_TOGGLE_SELF_DEAF",
|
|
||||||
context: "default",
|
|
||||||
syncRemote: true
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "toggleStreamerMode":
|
|
||||||
FluxDispatcher.dispatch({
|
|
||||||
type: "STREAMER_MODE_UPDATE",
|
|
||||||
key: "enabled",
|
|
||||||
value: !StreamerModeStore.enabled
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "disconnectFromVoiceChannel":
|
|
||||||
selectVoiceChannel(null);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "unassigned":
|
case "unassigned":
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "mute":
|
||||||
|
case "unmute":
|
||||||
|
FluxDispatcher.dispatch({
|
||||||
|
type: "AUDIO_SET_SELF_MUTE",
|
||||||
|
context: "default",
|
||||||
|
syncRemote: true,
|
||||||
|
playSoundEffect: true,
|
||||||
|
mute: keyBind === "mute"
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case "toggleMute":
|
||||||
|
KeyBindActions.TOGGLE_MUTE.onTrigger();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "toggleDeafen":
|
||||||
|
KeyBindActions.TOGGLE_DEAFEN.onTrigger();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "toggleStreamerMode":
|
||||||
|
KeyBindActions.TOGGLE_STREAMER_MODE.onTrigger();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "disconnectFromVoiceChannel":
|
||||||
|
KeyBindActions.DISCONNECT_FROM_VOICE_CHANNEL.onTrigger();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "pushToTalkNormalStart":
|
||||||
|
case "pushToTalkNormalStop":
|
||||||
|
case "pushToTalkNormalToggle": {
|
||||||
|
const isPressed = keyBind.includes("Toggle")
|
||||||
|
? !KeyBindActions.PUSH_TO_TALK.isPressed
|
||||||
|
: keyBind.includes("Start");
|
||||||
|
|
||||||
|
KeyBindActions.PUSH_TO_TALK.onTrigger(isPressed, "default");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "pushToTalkPriorityStart":
|
||||||
|
case "pushToTalkPriorityStop":
|
||||||
|
case "pushToTalkPriorityToggle": {
|
||||||
|
const isPressed = keyBind.includes("Toggle")
|
||||||
|
? !KeyBindActions.PUSH_TO_TALK_PRIORITY.isPressed
|
||||||
|
: keyBind.includes("Start");
|
||||||
|
|
||||||
|
KeyBindActions.PUSH_TO_TALK_PRIORITY.onTrigger(isPressed, "default");
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
logger.warn(`Unknown key bind action: ${keyBind}`);
|
logger.warn(`Unknown key bind action: ${keyBind}`);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user