ServerListIndicators: Account for pending clans count
This commit is contained in:
parent
0ac80ce9d1
commit
d70e0f27dc
1 changed files with 26 additions and 37 deletions
|
@ -20,9 +20,9 @@ import { addServerListElement, removeServerListElement, ServerListRenderPosition
|
||||||
import { Settings } from "@api/Settings";
|
import { Settings } from "@api/Settings";
|
||||||
import ErrorBoundary from "@components/ErrorBoundary";
|
import ErrorBoundary from "@components/ErrorBoundary";
|
||||||
import { Devs } from "@utils/constants";
|
import { Devs } from "@utils/constants";
|
||||||
import { useForceUpdater } from "@utils/react";
|
|
||||||
import definePlugin, { OptionType } from "@utils/types";
|
import definePlugin, { OptionType } from "@utils/types";
|
||||||
import { GuildStore, PresenceStore, RelationshipStore } from "@webpack/common";
|
import { findStoreLazy } from "@webpack";
|
||||||
|
import { GuildStore, PresenceStore, RelationshipStore, useStateFromStores } from "@webpack/common";
|
||||||
|
|
||||||
const enum IndicatorType {
|
const enum IndicatorType {
|
||||||
SERVER = 1 << 0,
|
SERVER = 1 << 0,
|
||||||
|
@ -30,13 +30,24 @@ const enum IndicatorType {
|
||||||
BOTH = SERVER | FRIEND,
|
BOTH = SERVER | FRIEND,
|
||||||
}
|
}
|
||||||
|
|
||||||
let onlineFriends = 0;
|
const UserGuildJoinRequestStore = findStoreLazy("UserGuildJoinRequestStore");
|
||||||
let guildCount = 0;
|
|
||||||
let forceUpdateFriendCount: () => void;
|
|
||||||
let forceUpdateGuildCount: () => void;
|
|
||||||
|
|
||||||
function FriendsIndicator() {
|
function FriendsIndicator() {
|
||||||
forceUpdateFriendCount = useForceUpdater();
|
const onlineFriendsCount = useStateFromStores([RelationshipStore, PresenceStore], () => {
|
||||||
|
let count = 0;
|
||||||
|
|
||||||
|
const friendIds = RelationshipStore.getFriendIDs();
|
||||||
|
for (const id of friendIds) {
|
||||||
|
const status = PresenceStore.getStatus(id) ?? "offline";
|
||||||
|
if (status === "offline") {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return count;
|
||||||
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<span id="vc-friendcount" style={{
|
<span id="vc-friendcount" style={{
|
||||||
|
@ -48,13 +59,19 @@ function FriendsIndicator() {
|
||||||
textTransform: "uppercase",
|
textTransform: "uppercase",
|
||||||
textAlign: "center",
|
textAlign: "center",
|
||||||
}}>
|
}}>
|
||||||
{onlineFriends} online
|
{onlineFriendsCount} online
|
||||||
</span>
|
</span>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function ServersIndicator() {
|
function ServersIndicator() {
|
||||||
forceUpdateGuildCount = useForceUpdater();
|
const guildCount = useStateFromStores([GuildStore, UserGuildJoinRequestStore], () => {
|
||||||
|
const guildJoinRequests: string[] = UserGuildJoinRequestStore.computeGuildIds();
|
||||||
|
const guilds = GuildStore.getGuilds();
|
||||||
|
|
||||||
|
// Filter only pending guild join requests
|
||||||
|
return GuildStore.getGuildCount() + guildJoinRequests.filter(id => guilds[id] == null).length;
|
||||||
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<span id="vc-guildcount" style={{
|
<span id="vc-guildcount" style={{
|
||||||
|
@ -71,24 +88,6 @@ function ServersIndicator() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function handlePresenceUpdate() {
|
|
||||||
onlineFriends = 0;
|
|
||||||
const relations = RelationshipStore.getRelationships();
|
|
||||||
for (const id of Object.keys(relations)) {
|
|
||||||
const type = relations[id];
|
|
||||||
// FRIEND relationship type
|
|
||||||
if (type === 1 && PresenceStore.getStatus(id) !== "offline") {
|
|
||||||
onlineFriends += 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
forceUpdateFriendCount?.();
|
|
||||||
}
|
|
||||||
|
|
||||||
function handleGuildUpdate() {
|
|
||||||
guildCount = GuildStore.getGuildCount();
|
|
||||||
forceUpdateGuildCount?.();
|
|
||||||
}
|
|
||||||
|
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "ServerListIndicators",
|
name: "ServerListIndicators",
|
||||||
description: "Add online friend count or server count in the server list",
|
description: "Add online friend count or server count in the server list",
|
||||||
|
@ -117,18 +116,8 @@ export default definePlugin({
|
||||||
</ErrorBoundary>;
|
</ErrorBoundary>;
|
||||||
},
|
},
|
||||||
|
|
||||||
flux: {
|
|
||||||
PRESENCE_UPDATES: handlePresenceUpdate,
|
|
||||||
GUILD_CREATE: handleGuildUpdate,
|
|
||||||
GUILD_DELETE: handleGuildUpdate,
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
start() {
|
start() {
|
||||||
addServerListElement(ServerListRenderPosition.Above, this.renderIndicator);
|
addServerListElement(ServerListRenderPosition.Above, this.renderIndicator);
|
||||||
|
|
||||||
handlePresenceUpdate();
|
|
||||||
handleGuildUpdate();
|
|
||||||
},
|
},
|
||||||
|
|
||||||
stop() {
|
stop() {
|
||||||
|
|
Loading…
Reference in a new issue