From 3bfd96defeb4fb1761b9281b7fac979bb819c153 Mon Sep 17 00:00:00 2001 From: Hunter Thornsberry Date: Fri, 7 Mar 2025 23:59:52 -0500 Subject: [PATCH] wip --- src/core/stores/deviceStore.ts | 11 +++++++---- src/core/subscriptions.ts | 2 +- src/pages/Messages.tsx | 9 +++++---- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/core/stores/deviceStore.ts b/src/core/stores/deviceStore.ts index e2bde391..1e0496f0 100644 --- a/src/core/stores/deviceStore.ts +++ b/src/core/stores/deviceStore.ts @@ -151,7 +151,7 @@ export const useDeviceStore = createStore((set, get) => ({ }, pendingSettingsChanges: false, messageDraft: "", - unreadCounts: new Map([[0, 100],[2718471552, 1]]), + unreadCounts: new Map([[0, 100],[3663106604, 1]]), setStatus: (status: Types.DeviceStatusEnum) => { set( @@ -634,13 +634,16 @@ export const useDeviceStore = createStore((set, get) => ({ }), ); }, - setUnread: (id: number, count: number) => { + setUnread: (unread_id: number, count?: number) => { set( produce((draft) => { - console.log(id, count); const device = draft.devices.get(id); if (device) { - device.unreadCounts.set(id, count); + if (count == null) { + let currentCount = device.unreadCounts.get(unread_id) ?? 0; + count = currentCount + 1; + } + device.unreadCounts.set(unread_id, count); } }) ); diff --git a/src/core/subscriptions.ts b/src/core/subscriptions.ts index 7a1a5b95..aecaa343 100644 --- a/src/core/subscriptions.ts +++ b/src/core/subscriptions.ts @@ -85,7 +85,7 @@ export const subscribeAll = ( ...messagePacket, state: messagePacket.from !== myNodeNum ? "ack" : "waiting", }); - device.unreadCounts.set(messagePacket.from, 1); + device.setUnread(messagePacket.from); }); connection.events.onTraceRoutePacket.subscribe((traceRoutePacket) => { diff --git a/src/pages/Messages.tsx b/src/pages/Messages.tsx index c5ca6170..3d63e05e 100644 --- a/src/pages/Messages.tsx +++ b/src/pages/Messages.tsx @@ -14,14 +14,15 @@ import { HashIcon, LockIcon, LockOpenIcon } from "lucide-react"; import { useState } from "react"; export const MessagesPage = () => { - const { channels, nodes, hardware, messages, unreadCounts } = useDevice(); + const { channels, nodes, hardware, messages, unreadCounts, setUnread } = useDevice(); const { activeChat, chatType, setActiveChat, setChatType } = useAppStore(); const [searchTerm, setSearchTerm] = useState(""); const filteredNodes = Array.from(nodes.values()).filter((node) => { if (node.num === hardware.myNodeNum) return false; const nodeName = node.user?.longName ?? `!${numberToHexUnpadded(node.num)}`; return nodeName.toLowerCase().includes(searchTerm.toLowerCase()); - }); + }).map((node) => { node.unreadCount = unreadCounts.get(node.num) ?? 0; return node;}) + .sort((a, b) => b.unreadCount - a.unreadCount); const allChannels = Array.from(channels.values()); const filteredChannels = allChannels.filter( (ch) => ch.role !== Protobuf.Channel.Channel_Role.DISABLED, @@ -48,7 +49,7 @@ export const MessagesPage = () => { onClick={() => { setChatType("broadcast"); setActiveChat(channel.index); - unreadCounts.set(channel.index, 0); + setUnread(channel.index, 0); }} element={} /> @@ -75,7 +76,7 @@ export const MessagesPage = () => { onClick={() => { setChatType("direct"); setActiveChat(node.num); - unreadCounts.set(node.num, 1) + setUnread(node.num, 0) }} element={