From 10ee001728098dc7e4ea0845575af53144b461c5 Mon Sep 17 00:00:00 2001 From: jack Date: Fri, 4 Jul 2025 19:30:19 +0200 Subject: [PATCH] Add room message indicator and simplify room header - Add blue hashtag icon in main header when there are unread room messages - Remove member count from room title for cleaner look - Add debug logging to diagnose room member list issue --- bitchat/ViewModels/ChatViewModel.swift | 4 ++++ bitchat/Views/ContentView.swift | 23 +++++++++++++++++++---- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/bitchat/ViewModels/ChatViewModel.swift b/bitchat/ViewModels/ChatViewModel.swift index b408a15e..852b10f3 100644 --- a/bitchat/ViewModels/ChatViewModel.swift +++ b/bitchat/ViewModels/ChatViewModel.swift @@ -251,6 +251,7 @@ class ChatViewModel: ObservableObject { roomMembers[room] = [] } roomMembers[room]?.insert(meshService.myPeerID) + print("[DEBUG-ROOM] Added self \(meshService.myPeerID) to room \(room), total members: \(roomMembers[room]?.count ?? 0)") } else { // Add to main messages messages.append(message) @@ -676,6 +677,9 @@ extension ChatViewModel: BitchatDelegate { } if let senderPeerID = message.senderPeerID { roomMembers[room]?.insert(senderPeerID) + print("[DEBUG-ROOM] Added member \(senderPeerID) to room \(room), total members: \(roomMembers[room]?.count ?? 0)") + } else { + print("[DEBUG-ROOM] No senderPeerID for message in room \(room)") } // Update unread count if not currently viewing this room diff --git a/bitchat/Views/ContentView.swift b/bitchat/Views/ContentView.swift index 28e9be00..4ae67669 100644 --- a/bitchat/Views/ContentView.swift +++ b/bitchat/Views/ContentView.swift @@ -206,14 +206,13 @@ struct ContentView: View { } else if let currentRoom = viewModel.currentRoom { // Room header HStack(spacing: 4) { - let memberCount = (viewModel.roomMembers[currentRoom]?.count ?? 0) + 1 // +1 for self Button(action: { withAnimation(.spring(response: 0.3, dampingFraction: 0.8)) { showSidebar.toggle() sidebarDragOffset = 0 } }) { - Text("\(currentRoom) (\(memberCount))") + Text(currentRoom) .font(.system(size: 18, weight: .medium, design: .monospaced)) .foregroundColor(Color.blue) } @@ -291,6 +290,15 @@ struct ContentView: View { // People counter with unread indicator HStack(spacing: 4) { + // Check for any unread room messages + let hasUnreadRoomMessages = viewModel.unreadRoomMessages.values.contains { $0 > 0 } + + if hasUnreadRoomMessages { + Image(systemName: "number") + .font(.system(size: 12)) + .foregroundColor(Color.blue) + } + if !viewModel.unreadPrivateMessages.isEmpty { Image(systemName: "envelope.fill") .font(.system(size: 12)) @@ -593,11 +601,18 @@ struct ContentView: View { if let currentRoom = viewModel.currentRoom, let roomMemberIDs = viewModel.roomMembers[currentRoom] { // Show only peers who have sent messages to this room (including self) + print("[DEBUG-VIEW] Room \(currentRoom) has members: \(roomMemberIDs)") + print("[DEBUG-VIEW] Connected peers: \(viewModel.connectedPeers)") + var memberPeers = viewModel.connectedPeers.filter { roomMemberIDs.contains($0) } // Always include ourselves if we're connected - if viewModel.connectedPeers.contains(myPeerID) { - memberPeers.append(myPeerID) + if viewModel.connectedPeers.contains(myPeerID) && roomMemberIDs.contains(myPeerID) { + if !memberPeers.contains(myPeerID) { + memberPeers.append(myPeerID) + } } + + print("[DEBUG-VIEW] Peers to show in room: \(memberPeers)") return Array(Set(memberPeers)) // Remove duplicates } else { // Show all connected peers in main chat