diff options
author | Vendicated <vendicated@riseup.net> | 2023-04-17 01:06:54 +0200 |
---|---|---|
committer | Vendicated <vendicated@riseup.net> | 2023-04-17 01:06:54 +0200 |
commit | 1caaa78490854bdd043775fe1b8ea087b0cdad8c (patch) | |
tree | c7344fa8fc0d578273806a0157db0b263cf9887f /src/plugins/pinDms | |
parent | d35654b887d9a736e0d01a91b70d9e2feb19a398 (diff) | |
download | Vencord-1caaa78490854bdd043775fe1b8ea087b0cdad8c.tar.gz Vencord-1caaa78490854bdd043775fe1b8ea087b0cdad8c.tar.bz2 Vencord-1caaa78490854bdd043775fe1b8ea087b0cdad8c.zip |
PinDMs: Add option to sort by most recent message
Diffstat (limited to 'src/plugins/pinDms')
-rw-r--r-- | src/plugins/pinDms/contextMenus.tsx | 7 | ||||
-rw-r--r-- | src/plugins/pinDms/index.tsx | 4 | ||||
-rw-r--r-- | src/plugins/pinDms/settings.ts | 33 |
3 files changed, 37 insertions, 7 deletions
diff --git a/src/plugins/pinDms/contextMenus.tsx b/src/plugins/pinDms/contextMenus.tsx index d75c9f9..7d89ec1 100644 --- a/src/plugins/pinDms/contextMenus.tsx +++ b/src/plugins/pinDms/contextMenus.tsx @@ -19,10 +19,11 @@ import { addContextMenuPatch, findGroupChildrenByChildId, NavContextMenuPatchCallback, removeContextMenuPatch } from "@api/ContextMenu"; import { Menu } from "@webpack/common"; -import { isPinned, movePin, snapshotArray, togglePin } from "./settings"; +import { isPinned, movePin, PinOrder, settings, snapshotArray, togglePin } from "./settings"; function PinMenuItem(channelId: string) { const pinned = isPinned(channelId); + const canMove = pinned && settings.store.pinOrder === PinOrder.Custom; return ( <> @@ -31,14 +32,14 @@ function PinMenuItem(channelId: string) { label={pinned ? "Unpin DM" : "Pin DM"} action={() => togglePin(channelId)} /> - {pinned && snapshotArray[0] !== channelId && ( + {canMove && snapshotArray[0] !== channelId && ( <Menu.MenuItem id="move-pin-up" label="Move Pin Up" action={() => movePin(channelId, -1)} /> )} - {pinned && snapshotArray[snapshotArray.length - 1] !== channelId && ( + {canMove && snapshotArray[snapshotArray.length - 1] !== channelId && ( <Menu.MenuItem id="move-pin-down" label="Move Pin Down" diff --git a/src/plugins/pinDms/index.tsx b/src/plugins/pinDms/index.tsx index 1cc6289..3bb6735 100644 --- a/src/plugins/pinDms/index.tsx +++ b/src/plugins/pinDms/index.tsx @@ -21,7 +21,7 @@ import definePlugin from "@utils/types"; import { Channel } from "discord-types/general"; import { addContextMenus, removeContextMenus } from "./contextMenus"; -import { getPinAt, isPinned, snapshotArray, usePinnedDms } from "./settings"; +import { getPinAt, isPinned, settings, snapshotArray, usePinnedDms } from "./settings"; export default definePlugin({ name: "PinDMs", @@ -30,6 +30,8 @@ export default definePlugin({ dependencies: ["ContextMenuAPI"], + settings, + start: addContextMenus, stop: removeContextMenus, diff --git a/src/plugins/pinDms/settings.ts b/src/plugins/pinDms/settings.ts index 2526c69..092a0db 100644 --- a/src/plugins/pinDms/settings.ts +++ b/src/plugins/pinDms/settings.ts @@ -16,7 +16,27 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. */ -import { Settings, useSettings } from "@api/settings"; +import { definePluginSettings, Settings, useSettings } from "@api/settings"; +import { OptionType } from "@utils/types"; +import { findStoreLazy } from "@webpack"; + +export const enum PinOrder { + LastMessage, + Custom +} + +export const settings = definePluginSettings({ + pinOrder: { + type: OptionType.SELECT, + description: "Which order should pinned DMs be displayed in?", + options: [ + { label: "Most recent message", value: PinOrder.LastMessage, default: true }, + { label: "Custom (right click channels to reorder)", value: PinOrder.Custom } + ] + } +}); + +const PrivateChannelSortStore = findStoreLazy("PrivateChannelSortStore"); export let snapshotArray: string[]; let snapshot: Set<string> | undefined; @@ -51,9 +71,16 @@ export function togglePin(id: string) { save([...snapshot]); } -export function getPinAt(idx: number) { +function sortedSnapshot() { requireSnapshot(); - return snapshotArray[idx]; + if (settings.store.pinOrder === PinOrder.LastMessage) + return PrivateChannelSortStore.getPrivateChannelIds().filter(isPinned); + + return snapshotArray; +} + +export function getPinAt(idx: number) { + return sortedSnapshot()[idx]; } export function movePin(id: string, direction: -1 | 1) { |