aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/pinDms/contextMenus.tsx7
-rw-r--r--src/plugins/pinDms/index.tsx4
-rw-r--r--src/plugins/pinDms/settings.ts33
-rw-r--r--src/webpack/common/types/utils.d.ts2
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 {