load messages after reconnecting and add launcher
This commit is contained in:
parent
e24e4928a2
commit
fc9d756361
4 changed files with 44 additions and 4 deletions
|
@ -76,6 +76,10 @@ export const ChannelDeckStore = proxyLazyWebpack(() => {
|
||||||
this.emitChange();
|
this.emitChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public getDecks() {
|
||||||
|
return this._decks.values();
|
||||||
|
}
|
||||||
|
|
||||||
public getDeckWindow(id: string) {
|
public getDeckWindow(id: string) {
|
||||||
return PopoutWindowStore.getWindow(this.windowKeyPrefix + id);
|
return PopoutWindowStore.getWindow(this.windowKeyPrefix + id);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
import { filters, findByPropsLazy, findComponentByCodeLazy, mapMangledModuleLazy } from "@webpack";
|
|
||||||
import "./DeckColumn.css";
|
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 { ChannelDeck, ChannelDeckStore, DeckColumn } from "../ChannelDeckStore";
|
||||||
import { ChannelStore, GuildStore, MessageActions, MessageCache, useEffect, useMemo } from "@webpack/common";
|
import { cl } from "./util";
|
||||||
|
|
||||||
const { HeaderBar, HeaderBarIcon } = mapMangledModuleLazy(".themedMobile]:", {
|
const { HeaderBar, HeaderBarIcon } = mapMangledModuleLazy(".themedMobile]:", {
|
||||||
HeaderBarIcon: filters.byCode('size:"custom",'),
|
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 XSmallIcon = findComponentByCodeLazy("1.4L12 13.42l5.3 5.3Z");
|
||||||
const Chat = findComponentByCodeLazy("filterAfterTimestamp:", "chatInputType");
|
const Chat = findComponentByCodeLazy("filterAfterTimestamp:", "chatInputType");
|
||||||
const ChatInputTypes = findByPropsLazy("FORM", "NORMAL");
|
const ChatInputTypes = findByPropsLazy("FORM", "NORMAL");
|
||||||
|
const AuthenticationStore = findStoreLazy("AuthenticationStore");
|
||||||
|
|
||||||
export default function DeckColumn({ column, deck, index }: { column: DeckColumn; deck: ChannelDeck; index: number; }) {
|
export default function DeckColumn({ column, deck, index }: { column: DeckColumn; deck: ChannelDeck; index: number; }) {
|
||||||
const channel = ChannelStore.getChannel(column.channelId);
|
const channel = ChannelStore.getChannel(column.channelId);
|
||||||
|
@ -20,6 +21,8 @@ export default function DeckColumn({ column, deck, index }: { column: DeckColumn
|
||||||
const chatInputType = useMemo(() => ({
|
const chatInputType = useMemo(() => ({
|
||||||
...ChatInputTypes.SIDEBAR
|
...ChatInputTypes.SIDEBAR
|
||||||
}), []);
|
}), []);
|
||||||
|
// Load messages after reconnecting
|
||||||
|
const sessionId = useStateFromStores([AuthenticationStore], () => AuthenticationStore.getSessionId());
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// Manually load messages :/
|
// Manually load messages :/
|
||||||
MessageActions.fetchMessages({
|
MessageActions.fetchMessages({
|
||||||
|
@ -31,7 +34,8 @@ export default function DeckColumn({ column, deck, index }: { column: DeckColumn
|
||||||
jumpType: "ANIMATED"
|
jumpType: "ANIMATED"
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
return () => { };
|
||||||
|
}, [sessionId]);
|
||||||
return <div className={cl("column")} style={{
|
return <div className={cl("column")} style={{
|
||||||
width: column.width
|
width: column.width
|
||||||
}}>
|
}}>
|
||||||
|
|
27
components/LauncherContextMenu.tsx
Normal file
27
components/LauncherContextMenu.tsx
Normal 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>
|
||||||
|
);
|
||||||
|
};
|
|
@ -2,6 +2,7 @@ import { Devs } from "@utils/constants";
|
||||||
import definePlugin from "@utils/types";
|
import definePlugin from "@utils/types";
|
||||||
import showUnsupportedMessage from "./unsupportedMessage";
|
import showUnsupportedMessage from "./unsupportedMessage";
|
||||||
import { ChannelDeckStore } from "./ChannelDeckStore";
|
import { ChannelDeckStore } from "./ChannelDeckStore";
|
||||||
|
import { UserSettingsContextMenu } from "./components/LauncherContextMenu";
|
||||||
|
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "ChannelDeck",
|
name: "ChannelDeck",
|
||||||
|
@ -17,5 +18,9 @@ export default definePlugin({
|
||||||
ChannelDeckStore.unloadData();
|
ChannelDeckStore.unloadData();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
contextMenus: {
|
||||||
|
"user-settings-cog": UserSettingsContextMenu
|
||||||
|
},
|
||||||
|
|
||||||
ChannelDeckStore
|
ChannelDeckStore
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue