mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-26 20:45:19 +00:00
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:
@@ -251,6 +251,7 @@ class ChatViewModel: ObservableObject {
|
|||||||
roomMembers[room] = []
|
roomMembers[room] = []
|
||||||
}
|
}
|
||||||
roomMembers[room]?.insert(meshService.myPeerID)
|
roomMembers[room]?.insert(meshService.myPeerID)
|
||||||
|
print("[DEBUG-ROOM] Added self \(meshService.myPeerID) to room \(room), total members: \(roomMembers[room]?.count ?? 0)")
|
||||||
} else {
|
} else {
|
||||||
// Add to main messages
|
// Add to main messages
|
||||||
messages.append(message)
|
messages.append(message)
|
||||||
@@ -676,6 +677,9 @@ extension ChatViewModel: BitchatDelegate {
|
|||||||
}
|
}
|
||||||
if let senderPeerID = message.senderPeerID {
|
if let senderPeerID = message.senderPeerID {
|
||||||
roomMembers[room]?.insert(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
|
// Update unread count if not currently viewing this room
|
||||||
|
|||||||
@@ -206,14 +206,13 @@ struct ContentView: View {
|
|||||||
} else if let currentRoom = viewModel.currentRoom {
|
} else if let currentRoom = viewModel.currentRoom {
|
||||||
// Room header
|
// Room header
|
||||||
HStack(spacing: 4) {
|
HStack(spacing: 4) {
|
||||||
let memberCount = (viewModel.roomMembers[currentRoom]?.count ?? 0) + 1 // +1 for self
|
|
||||||
Button(action: {
|
Button(action: {
|
||||||
withAnimation(.spring(response: 0.3, dampingFraction: 0.8)) {
|
withAnimation(.spring(response: 0.3, dampingFraction: 0.8)) {
|
||||||
showSidebar.toggle()
|
showSidebar.toggle()
|
||||||
sidebarDragOffset = 0
|
sidebarDragOffset = 0
|
||||||
}
|
}
|
||||||
}) {
|
}) {
|
||||||
Text("\(currentRoom) (\(memberCount))")
|
Text(currentRoom)
|
||||||
.font(.system(size: 18, weight: .medium, design: .monospaced))
|
.font(.system(size: 18, weight: .medium, design: .monospaced))
|
||||||
.foregroundColor(Color.blue)
|
.foregroundColor(Color.blue)
|
||||||
}
|
}
|
||||||
@@ -291,6 +290,15 @@ struct ContentView: View {
|
|||||||
|
|
||||||
// People counter with unread indicator
|
// People counter with unread indicator
|
||||||
HStack(spacing: 4) {
|
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 {
|
if !viewModel.unreadPrivateMessages.isEmpty {
|
||||||
Image(systemName: "envelope.fill")
|
Image(systemName: "envelope.fill")
|
||||||
.font(.system(size: 12))
|
.font(.system(size: 12))
|
||||||
@@ -593,11 +601,18 @@ struct ContentView: View {
|
|||||||
if let currentRoom = viewModel.currentRoom,
|
if let currentRoom = viewModel.currentRoom,
|
||||||
let roomMemberIDs = viewModel.roomMembers[currentRoom] {
|
let roomMemberIDs = viewModel.roomMembers[currentRoom] {
|
||||||
// Show only peers who have sent messages to this room (including self)
|
// 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) }
|
var memberPeers = viewModel.connectedPeers.filter { roomMemberIDs.contains($0) }
|
||||||
// Always include ourselves if we're connected
|
// Always include ourselves if we're connected
|
||||||
if viewModel.connectedPeers.contains(myPeerID) {
|
if viewModel.connectedPeers.contains(myPeerID) && roomMemberIDs.contains(myPeerID) {
|
||||||
memberPeers.append(myPeerID)
|
if !memberPeers.contains(myPeerID) {
|
||||||
|
memberPeers.append(myPeerID)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
print("[DEBUG-VIEW] Peers to show in room: \(memberPeers)")
|
||||||
return Array(Set(memberPeers)) // Remove duplicates
|
return Array(Set(memberPeers)) // Remove duplicates
|
||||||
} else {
|
} else {
|
||||||
// Show all connected peers in main chat
|
// Show all connected peers in main chat
|
||||||
|
|||||||
Reference in New Issue
Block a user