mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-25 03:25:19 +00:00
Fix critical room functionality issues
- Fix room field not being copied when creating messageWithPeerID in BluetoothMeshService - This was causing all room messages to appear in main chat - Fix room member tracking by ensuring senderPeerID is included - Change room color from orange to blue to differentiate from private messages - Clean up room members when peers disconnect to fix member count - Add debug logging to track room field through message flow
This commit is contained in:
@@ -527,6 +527,8 @@ class BluetoothMeshService: NSObject {
|
||||
room: room
|
||||
)
|
||||
|
||||
print("[DEBUG-SEND] Creating message with room: \(room ?? "nil")")
|
||||
|
||||
if let messageData = message.toBinaryPayload() {
|
||||
// Sign the message payload (no encryption for broadcasts)
|
||||
let signature: Data?
|
||||
@@ -1198,6 +1200,7 @@ class BluetoothMeshService: NSObject {
|
||||
|
||||
// Parse broadcast message (not encrypted)
|
||||
if let message = BitchatMessage.fromBinaryPayload(packet.payload) {
|
||||
print("[DEBUG-RECV] Received message with room: \(message.room ?? "nil"), content: \(message.content)")
|
||||
|
||||
// Store nickname mapping
|
||||
peerNicknamesLock.lock()
|
||||
@@ -1213,7 +1216,8 @@ class BluetoothMeshService: NSObject {
|
||||
isPrivate: false,
|
||||
recipientNickname: nil,
|
||||
senderPeerID: senderID,
|
||||
mentions: message.mentions
|
||||
mentions: message.mentions,
|
||||
room: message.room
|
||||
)
|
||||
|
||||
DispatchQueue.main.async {
|
||||
@@ -1309,7 +1313,9 @@ class BluetoothMeshService: NSObject {
|
||||
originalSender: message.originalSender,
|
||||
isPrivate: message.isPrivate,
|
||||
recipientNickname: message.recipientNickname,
|
||||
senderPeerID: senderID
|
||||
senderPeerID: senderID,
|
||||
mentions: message.mentions,
|
||||
room: message.room
|
||||
)
|
||||
|
||||
DispatchQueue.main.async {
|
||||
|
||||
@@ -765,6 +765,17 @@ extension ChatViewModel: BitchatDelegate {
|
||||
connectedPeers = peers
|
||||
isConnected = !peers.isEmpty
|
||||
|
||||
// Clean up room members who disconnected
|
||||
for (room, memberIDs) in roomMembers {
|
||||
// Remove disconnected peers from room members
|
||||
let activeMembers = memberIDs.filter { memberID in
|
||||
memberID == meshService.myPeerID || peers.contains(memberID)
|
||||
}
|
||||
if activeMembers != memberIDs {
|
||||
roomMembers[room] = activeMembers
|
||||
}
|
||||
}
|
||||
|
||||
// Force UI update
|
||||
objectWillChange.send()
|
||||
|
||||
|
||||
@@ -215,7 +215,7 @@ struct ContentView: View {
|
||||
}) {
|
||||
Text("\(currentRoom) (\(memberCount))")
|
||||
.font(.system(size: 18, weight: .medium, design: .monospaced))
|
||||
.foregroundColor(Color.orange)
|
||||
.foregroundColor(Color.blue)
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
|
||||
@@ -511,7 +511,7 @@ struct ContentView: View {
|
||||
HStack {
|
||||
Text(room)
|
||||
.font(.system(size: 14, design: .monospaced))
|
||||
.foregroundColor(viewModel.currentRoom == room ? Color.orange : textColor)
|
||||
.foregroundColor(viewModel.currentRoom == room ? Color.blue : textColor)
|
||||
|
||||
Spacer()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user