load messages after reconnecting and add launcher

This commit is contained in:
Sqaaakoi 2025-02-26 21:35:17 +13:00
parent e24e4928a2
commit fc9d756361
No known key found for this signature in database
4 changed files with 44 additions and 4 deletions

View file

@ -76,6 +76,10 @@ export const ChannelDeckStore = proxyLazyWebpack(() => {
this.emitChange();
}
public getDecks() {
return this._decks.values();
}
public getDeckWindow(id: string) {
return PopoutWindowStore.getWindow(this.windowKeyPrefix + id);
}

View file

@ -1,9 +1,9 @@
import { filters, findByPropsLazy, findComponentByCodeLazy, mapMangledModuleLazy } from "@webpack";
import "./DeckColumn.css";
import { cl } from "./util";
import { filters, findByPropsLazy, findComponentByCodeLazy, findStoreLazy, mapMangledModuleLazy } from "@webpack";
import { ChannelStore, GuildStore, MessageActions, useEffect, useMemo, useStateFromStores } from "@webpack/common";
import { ChannelDeck, ChannelDeckStore, DeckColumn } from "../ChannelDeckStore";
import { ChannelStore, GuildStore, MessageActions, MessageCache, useEffect, useMemo } from "@webpack/common";
import { cl } from "./util";
const { HeaderBar, HeaderBarIcon } = mapMangledModuleLazy(".themedMobile]:", {
HeaderBarIcon: filters.byCode('size:"custom",'),
@ -13,6 +13,7 @@ const ChannelHeader = findComponentByCodeLazy(".forumPostTitle]:", '"channel-".c
const XSmallIcon = findComponentByCodeLazy("1.4L12 13.42l5.3 5.3Z");
const Chat = findComponentByCodeLazy("filterAfterTimestamp:", "chatInputType");
const ChatInputTypes = findByPropsLazy("FORM", "NORMAL");
const AuthenticationStore = findStoreLazy("AuthenticationStore");
export default function DeckColumn({ column, deck, index }: { column: DeckColumn; deck: ChannelDeck; index: number; }) {
const channel = ChannelStore.getChannel(column.channelId);
@ -20,6 +21,8 @@ export default function DeckColumn({ column, deck, index }: { column: DeckColumn
const chatInputType = useMemo(() => ({
...ChatInputTypes.SIDEBAR
}), []);
// Load messages after reconnecting
const sessionId = useStateFromStores([AuthenticationStore], () => AuthenticationStore.getSessionId());
useEffect(() => {
// Manually load messages :/
MessageActions.fetchMessages({
@ -31,7 +34,8 @@ export default function DeckColumn({ column, deck, index }: { column: DeckColumn
jumpType: "ANIMATED"
}
});
});
return () => { };
}, [sessionId]);
return <div className={cl("column")} style={{
width: column.width
}}>

View file

@ -0,0 +1,27 @@
import { NavContextMenuPatchCallback } from "@api/ContextMenu";
import { Menu, PrivateChannelsStore, useStateFromStores } from "@webpack/common";
import { settings } from "plugins/betterFolders";
import { ChannelDeckStore } from "../ChannelDeckStore";
export const UserSettingsContextMenu: NavContextMenuPatchCallback = (children, props) => {
const decks = useStateFromStores([ChannelDeckStore], () => ChannelDeckStore.getDecks());
if (!props) return;
children.push(
<Menu.MenuItem
id="channeldeck"
label="Channel Decks"
>
<Menu.MenuGroup>
{decks.map(deck => <Menu.MenuCheckboxItem
label={deck.name}
id={`deck-${deck.id}`}
key={`deck-${deck.id}`}
checked={deck.open}
action={() => {
ChannelDeckStore.setDeck({ ...deck, open: !deck.open });
}}
/>)}
</Menu.MenuGroup>
</Menu.MenuItem>
);
};

View file

@ -2,6 +2,7 @@ import { Devs } from "@utils/constants";
import definePlugin from "@utils/types";
import showUnsupportedMessage from "./unsupportedMessage";
import { ChannelDeckStore } from "./ChannelDeckStore";
import { UserSettingsContextMenu } from "./components/LauncherContextMenu";
export default definePlugin({
name: "ChannelDeck",
@ -17,5 +18,9 @@ export default definePlugin({
ChannelDeckStore.unloadData();
},
contextMenus: {
"user-settings-cog": UserSettingsContextMenu
},
ChannelDeckStore
});