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:
jack
2025-07-05 19:35:37 +02:00
parent 4051cda7e4
commit bf4a572299
3 changed files with 21 additions and 4 deletions
+8 -2
View File
@@ -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 {
+11
View File
@@ -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()
+2 -2
View File
@@ -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()