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
This commit is contained in:
jack
2025-07-05 19:35:37 +02:00
parent 36155b457b
commit 10ee001728
2 changed files with 23 additions and 4 deletions
+4
View File
@@ -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
+19 -4
View File
@@ -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