mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-26 21:05:18 +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
|
room: room
|
||||||
)
|
)
|
||||||
|
|
||||||
|
print("[DEBUG-SEND] Creating message with room: \(room ?? "nil")")
|
||||||
|
|
||||||
if let messageData = message.toBinaryPayload() {
|
if let messageData = message.toBinaryPayload() {
|
||||||
// Sign the message payload (no encryption for broadcasts)
|
// Sign the message payload (no encryption for broadcasts)
|
||||||
let signature: Data?
|
let signature: Data?
|
||||||
@@ -1198,6 +1200,7 @@ class BluetoothMeshService: NSObject {
|
|||||||
|
|
||||||
// Parse broadcast message (not encrypted)
|
// Parse broadcast message (not encrypted)
|
||||||
if let message = BitchatMessage.fromBinaryPayload(packet.payload) {
|
if let message = BitchatMessage.fromBinaryPayload(packet.payload) {
|
||||||
|
print("[DEBUG-RECV] Received message with room: \(message.room ?? "nil"), content: \(message.content)")
|
||||||
|
|
||||||
// Store nickname mapping
|
// Store nickname mapping
|
||||||
peerNicknamesLock.lock()
|
peerNicknamesLock.lock()
|
||||||
@@ -1213,7 +1216,8 @@ class BluetoothMeshService: NSObject {
|
|||||||
isPrivate: false,
|
isPrivate: false,
|
||||||
recipientNickname: nil,
|
recipientNickname: nil,
|
||||||
senderPeerID: senderID,
|
senderPeerID: senderID,
|
||||||
mentions: message.mentions
|
mentions: message.mentions,
|
||||||
|
room: message.room
|
||||||
)
|
)
|
||||||
|
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
@@ -1309,7 +1313,9 @@ class BluetoothMeshService: NSObject {
|
|||||||
originalSender: message.originalSender,
|
originalSender: message.originalSender,
|
||||||
isPrivate: message.isPrivate,
|
isPrivate: message.isPrivate,
|
||||||
recipientNickname: message.recipientNickname,
|
recipientNickname: message.recipientNickname,
|
||||||
senderPeerID: senderID
|
senderPeerID: senderID,
|
||||||
|
mentions: message.mentions,
|
||||||
|
room: message.room
|
||||||
)
|
)
|
||||||
|
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
|
|||||||
@@ -765,6 +765,17 @@ extension ChatViewModel: BitchatDelegate {
|
|||||||
connectedPeers = peers
|
connectedPeers = peers
|
||||||
isConnected = !peers.isEmpty
|
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
|
// Force UI update
|
||||||
objectWillChange.send()
|
objectWillChange.send()
|
||||||
|
|
||||||
|
|||||||
@@ -215,7 +215,7 @@ struct ContentView: View {
|
|||||||
}) {
|
}) {
|
||||||
Text("\(currentRoom) (\(memberCount))")
|
Text("\(currentRoom) (\(memberCount))")
|
||||||
.font(.system(size: 18, weight: .medium, design: .monospaced))
|
.font(.system(size: 18, weight: .medium, design: .monospaced))
|
||||||
.foregroundColor(Color.orange)
|
.foregroundColor(Color.blue)
|
||||||
}
|
}
|
||||||
.buttonStyle(.plain)
|
.buttonStyle(.plain)
|
||||||
|
|
||||||
@@ -511,7 +511,7 @@ struct ContentView: View {
|
|||||||
HStack {
|
HStack {
|
||||||
Text(room)
|
Text(room)
|
||||||
.font(.system(size: 14, design: .monospaced))
|
.font(.system(size: 14, design: .monospaced))
|
||||||
.foregroundColor(viewModel.currentRoom == room ? Color.orange : textColor)
|
.foregroundColor(viewModel.currentRoom == room ? Color.blue : textColor)
|
||||||
|
|
||||||
Spacer()
|
Spacer()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user