mirror of
https://github.com/Equicord/Equicord.git
synced 2025-01-18 13:23:28 -05:00
Update CustomSounds
This commit is contained in:
parent
2432364123
commit
806e9330cd
3 changed files with 80 additions and 64 deletions
|
@ -5,21 +5,21 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { classNameFactory } from "@api/Styles";
|
import { classNameFactory } from "@api/Styles";
|
||||||
import { makeRange } from "@components/PluginSettings/components";
|
|
||||||
import { Margins } from "@utils/margins";
|
import { Margins } from "@utils/margins";
|
||||||
import { classes } from "@utils/misc";
|
import { classes } from "@utils/misc";
|
||||||
import { useForceUpdater } from "@utils/react";
|
import { useForceUpdater } from "@utils/react";
|
||||||
import { findByCodeLazy, findLazy } from "@webpack";
|
import { findByCodeLazy, findLazy } from "@webpack";
|
||||||
import { Button, Card, Forms, Slider, Switch, useRef } from "@webpack/common";
|
import { Button, Card, Forms, Slider, Switch, Tooltip, useRef } from "@webpack/common";
|
||||||
import { ComponentType, Ref, SyntheticEvent } from "react";
|
import { ComponentType, Ref, SyntheticEvent } from "react";
|
||||||
|
|
||||||
import { SoundOverride, SoundPlayer, SoundType } from "../types";
|
import { SoundOverride, SoundPlayer, SoundType } from "../types";
|
||||||
|
|
||||||
type FileInput = ComponentType<{
|
type FileInput = ComponentType<{
|
||||||
ref: Ref<HTMLInputElement>;
|
ref: Ref<HTMLInputElement>;
|
||||||
onChange: (e: SyntheticEvent<HTMLInputElement>) => void;
|
onChange: (event: SyntheticEvent<HTMLInputElement>) => void;
|
||||||
multiple?: boolean;
|
multiple?: boolean;
|
||||||
filters?: { name?: string; extensions: string[]; }[];
|
filters?: { name?: string; extensions: string[]; }[];
|
||||||
|
disabled?: boolean;
|
||||||
}>;
|
}>;
|
||||||
|
|
||||||
const playSound: (id: string) => SoundPlayer = findByCodeLazy(".playWithListener().then");
|
const playSound: (id: string) => SoundPlayer = findByCodeLazy(".playWithListener().then");
|
||||||
|
@ -43,29 +43,23 @@ export function SoundOverrideComponent({ type, override, onChange }: { type: Sou
|
||||||
className={Margins.bottom16}
|
className={Margins.bottom16}
|
||||||
hideBorder={true}
|
hideBorder={true}
|
||||||
>
|
>
|
||||||
{type.name} <span className={cl("id")}>({type.id})</span>
|
<Tooltip text={type.id}>
|
||||||
|
{tooltipProps => <span {...tooltipProps}>{type.name}</span>}
|
||||||
|
</Tooltip>
|
||||||
</Switch>
|
</Switch>
|
||||||
|
<Forms.FormTitle>Sound File</Forms.FormTitle>
|
||||||
|
<div className={classes(cl("file"), Margins.bottom16)} >
|
||||||
|
<Forms.FormText className={cl("file-name")}>{override.url.length === 0 ? "Discord Default" : (override.fileName || "Custom Sound")}</Forms.FormText>
|
||||||
<Button
|
<Button
|
||||||
color={Button.Colors.PRIMARY}
|
color={Button.Colors.PRIMARY}
|
||||||
className={Margins.bottom16}
|
size={Button.Sizes.SMALL}
|
||||||
onClick={() => {
|
|
||||||
if (sound.current != null)
|
|
||||||
sound.current.stop();
|
|
||||||
sound.current = playSound(type.id);
|
|
||||||
}}
|
|
||||||
disabled={!override.enabled}
|
disabled={!override.enabled}
|
||||||
|
className={cl("file-replace")}
|
||||||
>
|
>
|
||||||
Preview
|
Replace
|
||||||
</Button>
|
|
||||||
<Forms.FormTitle>Replacement Sound</Forms.FormTitle>
|
|
||||||
<Button
|
|
||||||
color={Button.Colors.PRIMARY}
|
|
||||||
disabled={!override.enabled}
|
|
||||||
className={classes(Margins.right8, Margins.bottom16, cl("upload"))}
|
|
||||||
>
|
|
||||||
Upload
|
|
||||||
<FileInput
|
<FileInput
|
||||||
ref={fileInputRef}
|
ref={fileInputRef}
|
||||||
|
disabled={!override.enabled}
|
||||||
onChange={event => {
|
onChange={event => {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
@ -80,6 +74,7 @@ export function SoundOverrideComponent({ type, override, onChange }: { type: Sou
|
||||||
const reader = new FileReader;
|
const reader = new FileReader;
|
||||||
reader.onload = () => {
|
reader.onload = () => {
|
||||||
override.url = reader.result as string;
|
override.url = reader.result as string;
|
||||||
|
override.fileName = file.name;
|
||||||
onChange();
|
onChange();
|
||||||
update();
|
update();
|
||||||
};
|
};
|
||||||
|
@ -91,20 +86,20 @@ export function SoundOverrideComponent({ type, override, onChange }: { type: Sou
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
color={Button.Colors.RED}
|
color={Button.Colors.RED}
|
||||||
|
size={Button.Sizes.SMALL}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
override.url = "";
|
override.url = "";
|
||||||
onChange();
|
onChange();
|
||||||
update();
|
update();
|
||||||
}}
|
}}
|
||||||
disabled={!(override.enabled && override.url.length !== 0)}
|
disabled={!(override.enabled && override.url.length !== 0)}
|
||||||
style={{ display: "inline" }}
|
className={cl("file-reset")}
|
||||||
className={classes(Margins.right8, Margins.bottom16)}
|
|
||||||
>
|
>
|
||||||
Clear
|
Reset
|
||||||
</Button>
|
</Button>
|
||||||
|
</div>
|
||||||
<Forms.FormTitle>Volume</Forms.FormTitle>
|
<Forms.FormTitle>Volume</Forms.FormTitle>
|
||||||
<Slider
|
<Slider
|
||||||
markers={makeRange(0, 100, 10)}
|
|
||||||
initialValue={override.volume}
|
initialValue={override.volume}
|
||||||
onValueChange={value => {
|
onValueChange={value => {
|
||||||
override.volume = value;
|
override.volume = value;
|
||||||
|
@ -114,6 +109,18 @@ export function SoundOverrideComponent({ type, override, onChange }: { type: Sou
|
||||||
className={Margins.bottom16}
|
className={Margins.bottom16}
|
||||||
disabled={!override.enabled}
|
disabled={!override.enabled}
|
||||||
/>
|
/>
|
||||||
|
<Button
|
||||||
|
color={Button.Colors.PRIMARY}
|
||||||
|
className={Margins.bottom16}
|
||||||
|
onClick={() => {
|
||||||
|
if (sound.current != null)
|
||||||
|
sound.current.stop();
|
||||||
|
sound.current = playSound(type.id);
|
||||||
|
}}
|
||||||
|
disabled={!override.enabled}
|
||||||
|
>
|
||||||
|
Preview
|
||||||
|
</Button>
|
||||||
</Card>
|
</Card>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,10 +2,17 @@
|
||||||
padding: 1em 1em 0;
|
padding: 1em 1em 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.vc-custom-sounds-id {
|
.vc-custom-sounds-file {
|
||||||
color: var(--text-muted);
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.vc-custom-sounds-upload {
|
.vc-custom-sounds-file-name {
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vc-custom-sounds-file-replace,
|
||||||
|
.vc-custom-sounds-file-reset {
|
||||||
display: inline;
|
display: inline;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ export interface SoundType {
|
||||||
|
|
||||||
export interface SoundOverride {
|
export interface SoundOverride {
|
||||||
enabled: boolean;
|
enabled: boolean;
|
||||||
|
fileName: string;
|
||||||
url: string;
|
url: string;
|
||||||
volume: number;
|
volume: number;
|
||||||
}
|
}
|
||||||
|
@ -51,6 +52,7 @@ export const soundTypes: readonly SoundType[] = [
|
||||||
export function makeEmptyOverride(): SoundOverride {
|
export function makeEmptyOverride(): SoundOverride {
|
||||||
return {
|
return {
|
||||||
enabled: false,
|
enabled: false,
|
||||||
|
fileName: "",
|
||||||
url: "",
|
url: "",
|
||||||
volume: 100
|
volume: 100
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue