diff --git a/src/plugins/crashHandler/index.ts b/src/plugins/crashHandler/index.ts index 37e028f3c..34b020ac9 100644 --- a/src/plugins/crashHandler/index.ts +++ b/src/plugins/crashHandler/index.ts @@ -165,7 +165,7 @@ export default definePlugin({ } if (settings.store.attemptToNavigateToHome) { try { - NavigationRouter.transitionTo("/channels/@me"); + NavigationRouter.transitionToGuild("@me"); } catch (err) { CrashHandlerLogger.debug("Failed to navigate to home", err); } diff --git a/src/plugins/keepCurrentChannel/index.ts b/src/plugins/keepCurrentChannel/index.ts index b226c34e3..1e0e742dc 100644 --- a/src/plugins/keepCurrentChannel/index.ts +++ b/src/plugins/keepCurrentChannel/index.ts @@ -19,7 +19,7 @@ import * as DataStore from "@api/DataStore"; import { Devs } from "@utils/constants"; import definePlugin from "@utils/types"; -import { ChannelStore, NavigationRouter, SelectedChannelStore, SelectedGuildStore } from "@webpack/common"; +import { ChannelRouter, SelectedChannelStore, SelectedGuildStore } from "@webpack/common"; export interface LogoutEvent { type: "LOGOUT"; @@ -40,11 +40,6 @@ interface PreviousChannel { let isSwitchingAccount = false; let previousCache: PreviousChannel | undefined; -function attemptToNavigateToChannel(guildId: string | null, channelId: string) { - if (!ChannelStore.hasChannel(channelId)) return; - NavigationRouter.transitionTo(`/channels/${guildId ?? "@me"}/${channelId}`); -} - export default definePlugin({ name: "KeepCurrentChannel", description: "Attempt to navigate to the channel you were in before switching accounts or loading Discord.", @@ -59,8 +54,9 @@ export default definePlugin({ if (!isSwitchingAccount) return; isSwitchingAccount = false; - if (previousCache?.channelId) - attemptToNavigateToChannel(previousCache.guildId, previousCache.channelId); + if (previousCache?.channelId) { + ChannelRouter.transitionToChannel(previousCache.channelId); + } }, async CHANNEL_SELECT({ guildId, channelId }: ChannelSelectEvent) { @@ -84,7 +80,7 @@ export default definePlugin({ await DataStore.set("KeepCurrentChannel_previousData", previousCache); } else if (previousCache.channelId) { - attemptToNavigateToChannel(previousCache.guildId, previousCache.channelId); + ChannelRouter.transitionToChannel(previousCache.channelId); } } }); diff --git a/src/plugins/reviewDB/index.tsx b/src/plugins/reviewDB/index.tsx index ac1d5fb5a..55d8f4e80 100644 --- a/src/plugins/reviewDB/index.tsx +++ b/src/plugins/reviewDB/index.tsx @@ -91,7 +91,7 @@ export default definePlugin({ } }, { - find: ".PANEL,interactionType:", + find: 'location:"UserProfilePanel"', replacement: { match: /{profileType:\i\.\i\.PANEL,children:\[/, replace: "$&$self.BiteSizeReviewsButton({user:arguments[0].user})," diff --git a/src/plugins/userVoiceShow/components.tsx b/src/plugins/userVoiceShow/components.tsx index 3f5a201a2..792a0f314 100644 --- a/src/plugins/userVoiceShow/components.tsx +++ b/src/plugins/userVoiceShow/components.tsx @@ -8,7 +8,7 @@ import { classNameFactory } from "@api/Styles"; import ErrorBoundary from "@components/ErrorBoundary"; import { classes } from "@utils/misc"; import { filters, findByCode, findComponentByCode, findProp, findStore, mapMangledModule } from "@webpack"; -import { ChannelStore, GuildStore, IconUtils, match, NavigationRouter, P, PermissionsBits, PermissionStore, React, showToast, Text, Toasts, Tooltip, useMemo, UserStore, useStateFromStores } from "@webpack/common"; +import { ChannelRouter, ChannelStore, GuildStore, IconUtils, match, P, PermissionsBits, PermissionStore, React, showToast, Text, Toasts, Tooltip, useMemo, UserStore, useStateFromStores } from "@webpack/common"; import { Channel } from "discord-types/general"; const cl = classNameFactory("vc-uvs-"); @@ -74,9 +74,10 @@ function LockedSpeakerIcon(props: IconProps) { interface VoiceChannelTooltipProps { channel: Channel; + isLocked: boolean; } -function VoiceChannelTooltip({ channel }: VoiceChannelTooltipProps) { +function VoiceChannelTooltip({ channel, isLocked }: VoiceChannelTooltipProps) { const voiceStates = useStateFromStores([VoiceStateStore], () => VoiceStateStore.getVoiceStatesForChannel(channel.id)); const users = useMemo( @@ -113,7 +114,7 @@ function VoiceChannelTooltip({ channel }: VoiceChannelTooltipProps) { {channelName}
- + {isLocked ? : } ; -export const VoiceChannelIndicator = ErrorBoundary.wrap(({ userId, isActionButton, isMessageIndicator }: VoiceChannelIndicatorProps) => { +export const VoiceChannelIndicator = ErrorBoundary.wrap(({ userId, isActionButton, isMessageIndicator, shouldHighlight }: VoiceChannelIndicatorProps) => { const channelId = useStateFromStores([VoiceStateStore], () => VoiceStateStore.getVoiceStateForUser(userId)?.channelId as string | undefined); const channel = channelId == null ? undefined : ChannelStore.getChannel(channelId); @@ -165,7 +167,7 @@ export const VoiceChannelIndicator = ErrorBoundary.wrap(({ userId, isActionButto selectVoiceChannel(channelId); } else { clickTimers[channelId] = setTimeout(() => { - NavigationRouter.transitionTo(`/channels/${channel.getGuildId() ?? "@me"}/${channelId}`); + ChannelRouter.transitionToChannel(channelId); delete clickTimers[channelId]; }, 250); } @@ -173,14 +175,14 @@ export const VoiceChannelIndicator = ErrorBoundary.wrap(({ userId, isActionButto return ( } + text={} tooltipClassName={cl("tooltip-container")} tooltipContentClassName={cl("tooltip-content")} > {props => { const iconProps: IconProps = { ...props, - className: isActionButton ? cl("indicator-action-button") : cl("speaker-padding"), + className: classes(isActionButton ? cl("indicator-action-button") : cl("speaker-padding"), isMessageIndicator && cl("message-indicator"), shouldHighlight && cl("highlight")), size: isActionButton ? 20 : undefined, onClick }; diff --git a/src/plugins/userVoiceShow/index.tsx b/src/plugins/userVoiceShow/index.tsx index d30c5b7f9..f202beecc 100644 --- a/src/plugins/userVoiceShow/index.tsx +++ b/src/plugins/userVoiceShow/index.tsx @@ -86,8 +86,8 @@ export default definePlugin({ { find: "null!=this.peopleListItemRef.current", replacement: { - match: /\.actions,children:\[/, - replace: "$&$self.VoiceChannelIndicator({userId:this?.props?.user?.id,isActionButton:true})," + match: /\.actions,children:\[(?<=isFocused:(\i).+?)/, + replace: "$&$self.VoiceChannelIndicator({userId:this?.props?.user?.id,isActionButton:true,shouldHighlight:$1})," }, predicate: () => settings.store.showInMemberList } diff --git a/src/plugins/userVoiceShow/style.css b/src/plugins/userVoiceShow/style.css index 072dee941..39253f210 100644 --- a/src/plugins/userVoiceShow/style.css +++ b/src/plugins/userVoiceShow/style.css @@ -19,8 +19,6 @@ .vc-uvs-message-indicator { display: inline-flex; - align-items: center; - justify-content: center; top: 2.5px; position: relative; } @@ -33,6 +31,10 @@ margin-left: 10px; } +.vc-uvs-indicator-action-button.vc-uvs-highlight { + background-color: var(--background-tertiary); +} + .vc-uvs-tooltip-container { max-width: 300px; } diff --git a/src/webpack/common/types/utils.d.ts b/src/webpack/common/types/utils.d.ts index e8b01aed8..b3b2d71ac 100644 --- a/src/webpack/common/types/utils.d.ts +++ b/src/webpack/common/types/utils.d.ts @@ -177,6 +177,11 @@ export interface NavigationRouter { transitionToGuild(guildId: string, ...args: unknown[]): void; } +export interface ChannelRouter { + transitionToChannel: (channelId: string) => void; + transitionToThread: (channel: Channel) => void; +} + export interface IconUtils { getUserAvatarURL(user: User, canAnimate?: boolean, size?: number, format?: string): string; getDefaultAvatarURL(id: string, discriminator?: string): string; diff --git a/src/webpack/common/utils.ts b/src/webpack/common/utils.ts index 223e09489..4a068933a 100644 --- a/src/webpack/common/utils.ts +++ b/src/webpack/common/utils.ts @@ -139,6 +139,10 @@ export const NavigationRouter: t.NavigationRouter = mapMangledModule("Transition back: filters.byCode("goBack()"), forward: filters.byCode("goForward()"), }); +export const ChannelRouter: t.ChannelRouter = mapMangledModule('"Thread must have a parent ID."', { + transitionToChannel: filters.byCode(".preload"), + transitionToThread: filters.byCode('"Thread must have a parent ID."') +}); export const SettingsRouter = findByProps("open", "saveAccountChanges");