diff options
-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 | ||||
-rw-r--r-- | src/webpack/common/types/utils.d.ts | 2 |
4 files changed, 38 insertions, 8 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) { diff --git a/src/webpack/common/types/utils.d.ts b/src/webpack/common/types/utils.d.ts index 038163d..1534f32 100644 --- a/src/webpack/common/types/utils.d.ts +++ b/src/webpack/common/types/utils.d.ts @@ -68,7 +68,7 @@ export interface SnowflakeUtils { extractTimestamp(snowflake: string): number; age(snowflake: string): number; atPreviousMillisecond(snowflake: string): string; - compare(snowflake1: string, snowflake2: string): number; + compare(snowflake1?: string, snowflake2?: string): number; } interface RestRequestData { |