diff options
author | V <vendicated@riseup.net> | 2023-04-15 02:26:46 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-15 02:26:46 +0200 |
commit | 6c719f5ee921d48eea671b026e6aff2c0c49e914 (patch) | |
tree | 9f694f67fbe0a32bb9721c6c52f19d0eefb055b4 /src/plugins/pinDms/settings.ts | |
parent | c6fd8cae16d869fde0557504ac230991edb10385 (diff) | |
download | Vencord-6c719f5ee921d48eea671b026e6aff2c0c49e914.tar.gz Vencord-6c719f5ee921d48eea671b026e6aff2c0c49e914.tar.bz2 Vencord-6c719f5ee921d48eea671b026e6aff2c0c49e914.zip |
PinDMs (#879)
Diffstat (limited to 'src/plugins/pinDms/settings.ts')
-rw-r--r-- | src/plugins/pinDms/settings.ts | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/plugins/pinDms/settings.ts b/src/plugins/pinDms/settings.ts new file mode 100644 index 0000000..2526c69 --- /dev/null +++ b/src/plugins/pinDms/settings.ts @@ -0,0 +1,67 @@ +/* + * Vencord, a modification for Discord's desktop app + * Copyright (c) 2023 Vendicated and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. +*/ + +import { Settings, useSettings } from "@api/settings"; + +export let snapshotArray: string[]; +let snapshot: Set<string> | undefined; + +const getArray = () => (Settings.plugins.PinDMs.pinnedDMs || void 0)?.split(",") as string[] | undefined; +const save = (pins: string[]) => { + snapshot = void 0; + Settings.plugins.PinDMs.pinnedDMs = pins.join(","); +}; +const takeSnapshot = () => { + snapshotArray = getArray() ?? []; + return snapshot = new Set<string>(snapshotArray); +}; +const requireSnapshot = () => snapshot ?? takeSnapshot(); + +export function usePinnedDms() { + useSettings(["plugins.PinDMs.pinnedDMs"]); + + return requireSnapshot(); +} + +export function isPinned(id: string) { + return requireSnapshot().has(id); +} + +export function togglePin(id: string) { + const snapshot = requireSnapshot(); + if (!snapshot.delete(id)) { + snapshot.add(id); + } + + save([...snapshot]); +} + +export function getPinAt(idx: number) { + requireSnapshot(); + return snapshotArray[idx]; +} + +export function movePin(id: string, direction: -1 | 1) { + const pins = getArray()!; + const a = pins.indexOf(id); + const b = a + direction; + + [pins[a], pins[b]] = [pins[b], pins[a]]; + + save(pins); +} |