parent
f5af0deb31
commit
0f54a36223
@ -0,0 +1,26 @@ |
|||||||
|
/* |
||||||
|
* SPDX-License-Identifier: GPL-3.0 |
||||||
|
* Aerocord, a vesktop fork for older microsoft NT releases such as NT 6.0, 6.1, 6.2 and 6.3.
|
||||||
|
* Credits to vendicated and the rest of the vesktop contribuitors for making Vesktop! |
||||||
|
*/ |
||||||
|
|
||||||
|
import { Switch, useState } from "@vencord/types/webpack/common"; |
||||||
|
|
||||||
|
import { SettingsComponent } from "./Settings"; |
||||||
|
|
||||||
|
export const AutoStartToggle: SettingsComponent = () => { |
||||||
|
const [autoStartEnabled, setAutoStartEnabled] = useState(VesktopNative.autostart.isEnabled()); |
||||||
|
|
||||||
|
return ( |
||||||
|
<Switch |
||||||
|
value={autoStartEnabled} |
||||||
|
onChange={async v => { |
||||||
|
await VesktopNative.autostart[v ? "enable" : "disable"](); |
||||||
|
setAutoStartEnabled(v); |
||||||
|
}} |
||||||
|
note="Automatically start Vesktop on computer start-up" |
||||||
|
> |
||||||
|
Start With System |
||||||
|
</Switch> |
||||||
|
); |
||||||
|
}; |
@ -0,0 +1,26 @@ |
|||||||
|
/* |
||||||
|
* SPDX-License-Identifier: GPL-3.0 |
||||||
|
* Aerocord, a vesktop fork for older microsoft NT releases such as NT 6.0, 6.1, 6.2 and 6.3.
|
||||||
|
* Credits to vendicated and the rest of the vesktop contribuitors for making Vesktop! |
||||||
|
*/ |
||||||
|
|
||||||
|
import { Select } from "@vencord/types/webpack/common"; |
||||||
|
|
||||||
|
import { SettingsComponent } from "./Settings"; |
||||||
|
|
||||||
|
export const DiscordBranchPicker: SettingsComponent = ({ settings }) => { |
||||||
|
return ( |
||||||
|
<Select |
||||||
|
placeholder="Stable" |
||||||
|
options={[ |
||||||
|
{ label: "Stable", value: "stable", default: true }, |
||||||
|
{ label: "Canary", value: "canary" }, |
||||||
|
{ label: "PTB", value: "ptb" } |
||||||
|
]} |
||||||
|
closeOnSelect={true} |
||||||
|
select={v => (settings.discordBranch = v)} |
||||||
|
isSelected={v => v === settings.discordBranch} |
||||||
|
serialize={s => s} |
||||||
|
/> |
||||||
|
); |
||||||
|
}; |
@ -0,0 +1,26 @@ |
|||||||
|
/* |
||||||
|
* SPDX-License-Identifier: GPL-3.0 |
||||||
|
* Aerocord, a vesktop fork for older microsoft NT releases such as NT 6.0, 6.1, 6.2 and 6.3.
|
||||||
|
* Credits to vendicated and the rest of the vesktop contribuitors for making Vesktop! |
||||||
|
*/ |
||||||
|
|
||||||
|
import { Switch } from "@vencord/types/webpack/common"; |
||||||
|
import { setBadge } from "renderer/appBadge"; |
||||||
|
|
||||||
|
import { SettingsComponent } from "./Settings"; |
||||||
|
|
||||||
|
export const NotificationBadgeToggle: SettingsComponent = ({ settings }) => { |
||||||
|
return ( |
||||||
|
<Switch |
||||||
|
value={settings.appBadge ?? true} |
||||||
|
onChange={v => { |
||||||
|
settings.appBadge = v; |
||||||
|
if (v) setBadge(); |
||||||
|
else VesktopNative.app.setBadgeCount(0); |
||||||
|
}} |
||||||
|
note="Show mention badge on the app icon" |
||||||
|
> |
||||||
|
Notification Badge |
||||||
|
</Switch> |
||||||
|
); |
||||||
|
}; |
@ -0,0 +1,176 @@ |
|||||||
|
/* |
||||||
|
* SPDX-License-Identifier: GPL-3.0 |
||||||
|
* Aerocord, a vesktop fork for older microsoft NT releases such as NT 6.0, 6.1, 6.2 and 6.3.
|
||||||
|
* Credits to vendicated and the rest of the vesktop contribuitors for making Vesktop! |
||||||
|
*/ |
||||||
|
|
||||||
|
import "./settings.css"; |
||||||
|
|
||||||
|
import { Forms, Switch, Text } from "@vencord/types/webpack/common"; |
||||||
|
import { ComponentType } from "react"; |
||||||
|
import { Settings, useSettings } from "renderer/settings"; |
||||||
|
import { isMac, isWindows } from "renderer/utils"; |
||||||
|
|
||||||
|
import { AutoStartToggle } from "./AutoStartToggle"; |
||||||
|
import { DiscordBranchPicker } from "./DiscordBranchPicker"; |
||||||
|
import { NotificationBadgeToggle } from "./NotificationBadgeToggle"; |
||||||
|
import { VencordLocationPicker } from "./VencordLocationPicker"; |
||||||
|
import { WindowsTransparencyControls } from "./WindowsTransparencyControls"; |
||||||
|
|
||||||
|
interface BooleanSetting { |
||||||
|
key: keyof typeof Settings.store; |
||||||
|
title: string; |
||||||
|
description: string; |
||||||
|
defaultValue: boolean; |
||||||
|
disabled?(): boolean; |
||||||
|
invisible?(): boolean; |
||||||
|
} |
||||||
|
|
||||||
|
export type SettingsComponent = ComponentType<{ settings: typeof Settings.store }>; |
||||||
|
|
||||||
|
const SettingsOptions: Record<string, Array<BooleanSetting | SettingsComponent>> = { |
||||||
|
"Discord Branch": [DiscordBranchPicker], |
||||||
|
"System Startup & Performance": [ |
||||||
|
AutoStartToggle, |
||||||
|
{ |
||||||
|
key: "hardwareAcceleration", |
||||||
|
title: "Hardware Acceleration", |
||||||
|
description: "Enable hardware acceleration", |
||||||
|
defaultValue: true |
||||||
|
} |
||||||
|
], |
||||||
|
"User Interface": [ |
||||||
|
{ |
||||||
|
key: "customTitleBar", |
||||||
|
title: "Discord Titlebar", |
||||||
|
description: "Use Discord's custom title bar instead of the native system one. Requires a full restart.", |
||||||
|
defaultValue: isWindows |
||||||
|
}, |
||||||
|
{ |
||||||
|
key: "staticTitle", |
||||||
|
title: "Static Title", |
||||||
|
description: 'Makes the window title "Vesktop" instead of changing to the current page', |
||||||
|
defaultValue: false |
||||||
|
}, |
||||||
|
{ |
||||||
|
key: "enableMenu", |
||||||
|
title: "Enable Menu Bar", |
||||||
|
description: "Enables the application menu bar. Press ALT to toggle visibility.", |
||||||
|
defaultValue: false, |
||||||
|
disabled: () => Settings.store.customTitleBar ?? isWindows |
||||||
|
}, |
||||||
|
{ |
||||||
|
key: "splashTheming", |
||||||
|
title: "Splash theming", |
||||||
|
description: "Adapt the splash window colors to your custom theme", |
||||||
|
defaultValue: false |
||||||
|
}, |
||||||
|
WindowsTransparencyControls |
||||||
|
], |
||||||
|
Behaviour: [ |
||||||
|
{ |
||||||
|
key: "tray", |
||||||
|
title: "Tray Icon", |
||||||
|
description: "Add a tray icon for Vesktop", |
||||||
|
defaultValue: true, |
||||||
|
invisible: () => isMac |
||||||
|
}, |
||||||
|
{ |
||||||
|
key: "minimizeToTray", |
||||||
|
title: "Minimize to tray", |
||||||
|
description: "Hitting X will make Vesktop minimize to the tray instead of closing", |
||||||
|
defaultValue: true, |
||||||
|
invisible: () => isMac, |
||||||
|
disabled: () => Settings.store.tray === false |
||||||
|
}, |
||||||
|
{ |
||||||
|
key: "clickTrayToShowHide", |
||||||
|
title: "Hide/Show on tray click", |
||||||
|
description: "Left clicking tray icon will toggle the vesktop window visibility.", |
||||||
|
defaultValue: false |
||||||
|
}, |
||||||
|
{ |
||||||
|
key: "disableMinSize", |
||||||
|
title: "Disable minimum window size", |
||||||
|
description: "Allows you to make the window as small as your heart desires", |
||||||
|
defaultValue: false |
||||||
|
}, |
||||||
|
{ |
||||||
|
key: "disableSmoothScroll", |
||||||
|
title: "Disable smooth scrolling", |
||||||
|
description: "Disables smooth scrolling", |
||||||
|
defaultValue: false |
||||||
|
} |
||||||
|
], |
||||||
|
"Notifications & Updates": [ |
||||||
|
NotificationBadgeToggle, |
||||||
|
{ |
||||||
|
key: "checkUpdates", |
||||||
|
title: "Check for updates", |
||||||
|
description: "Automatically check for Vesktop updates", |
||||||
|
defaultValue: true |
||||||
|
} |
||||||
|
], |
||||||
|
Miscelleanous: [ |
||||||
|
{ |
||||||
|
key: "arRPC", |
||||||
|
title: "Rich Presence", |
||||||
|
description: "Enables Rich Presence via arRPC", |
||||||
|
defaultValue: false |
||||||
|
}, |
||||||
|
|
||||||
|
{ |
||||||
|
key: "openLinksWithElectron", |
||||||
|
title: "Open Links in app (experimental)", |
||||||
|
description: "Opens links in a new Vesktop window instead of your web browser", |
||||||
|
defaultValue: false |
||||||
|
} |
||||||
|
], |
||||||
|
"Vencord Location": [VencordLocationPicker] |
||||||
|
}; |
||||||
|
|
||||||
|
function SettingsSections() { |
||||||
|
const Settings = useSettings(); |
||||||
|
|
||||||
|
const sections = Object.entries(SettingsOptions).map(([title, settings]) => ( |
||||||
|
<Forms.FormSection |
||||||
|
title={title} |
||||||
|
key={title} |
||||||
|
className="vcd-settings-section" |
||||||
|
titleClassName="vcd-settings-title" |
||||||
|
> |
||||||
|
{settings.map(Setting => { |
||||||
|
if (typeof Setting === "function") return <Setting settings={Settings} />; |
||||||
|
|
||||||
|
const { defaultValue, title, description, key, disabled, invisible } = Setting; |
||||||
|
if (invisible?.()) return null; |
||||||
|
|
||||||
|
return ( |
||||||
|
<Switch |
||||||
|
value={Settings[key as any] ?? defaultValue} |
||||||
|
onChange={v => (Settings[key as any] = v)} |
||||||
|
note={description} |
||||||
|
disabled={disabled?.()} |
||||||
|
key={key} |
||||||
|
> |
||||||
|
{title} |
||||||
|
</Switch> |
||||||
|
); |
||||||
|
})} |
||||||
|
</Forms.FormSection> |
||||||
|
)); |
||||||
|
|
||||||
|
return <>{sections}</>; |
||||||
|
} |
||||||
|
|
||||||
|
export default function SettingsUi() { |
||||||
|
return ( |
||||||
|
<Forms.FormSection> |
||||||
|
<Text variant="heading-lg/semibold" style={{ color: "var(--header-primary)" }} tag="h2"> |
||||||
|
Aerocord Settings |
||||||
|
</Text> |
||||||
|
|
||||||
|
<SettingsSections /> |
||||||
|
</Forms.FormSection> |
||||||
|
); |
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
.vcd-location-btns { |
||||||
|
display: grid; |
||||||
|
grid-template-columns: 1fr 1fr; |
||||||
|
gap: 0.5em; |
||||||
|
margin-top: 0.5em; |
||||||
|
} |
||||||
|
|
||||||
|
.vcd-settings-section { |
||||||
|
margin-top: 1.5rem; |
||||||
|
} |
||||||
|
|
||||||
|
.vcd-settings-title { |
||||||
|
margin-bottom: 0.5rem; |
||||||
|
} |
Loading…
Reference in new issue