feat(chat): unread count + sidebar badge (Q1)
Track a per-conversation "last seen" watermark (message timestamp) on App: - chatUnreadCount() sums incoming messages newer than each conversation's watermark; surfaced as SidebarStatus.chatUnreadCount → a badge on the Chat nav item (mirrors the History/Peers badges). - Viewing a thread marks it seen (markChatConversationSeen while displayed). - Baseline on load: existing stored messages are marked seen, so only messages that arrive while the app is open badge as unread. - Wiped in resetChatSession so unread state never leaks across a wallet switch. In-memory only (resets on app restart); persistence is a later refinement. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -149,6 +149,7 @@ struct SidebarStatus {
|
||||
int unconfirmedTxCount = 0; // badge on History
|
||||
bool miningActive = false; // green dot on Mining
|
||||
int peerCount = 0; // badge on Peers
|
||||
int chatUnreadCount = 0; // badge on Chat (unread incoming messages)
|
||||
// Exit
|
||||
bool exitClicked = false;
|
||||
// Branding logo (optional — loaded at startup)
|
||||
@@ -715,6 +716,8 @@ inline bool RenderSidebar(NavPage& current, float sidebarWidth, float contentHei
|
||||
dotOnly = true; badgeCol = Success();
|
||||
} else if (item.page == NavPage::Peers && status.peerCount > 0) {
|
||||
badgeCount = status.peerCount;
|
||||
} else if (item.page == NavPage::Chat && status.chatUnreadCount > 0) {
|
||||
badgeCount = status.chatUnreadCount;
|
||||
}
|
||||
|
||||
if (badgeCount > 0 || dotOnly) {
|
||||
|
||||
Reference in New Issue
Block a user