diff --git a/bitchat/Services/BluetoothMeshService.swift b/bitchat/Services/BluetoothMeshService.swift index 44e1ac67..178dc9d8 100644 --- a/bitchat/Services/BluetoothMeshService.swift +++ b/bitchat/Services/BluetoothMeshService.swift @@ -123,7 +123,16 @@ class BluetoothMeshService: NSObject { } private func getAllConnectedPeerIDs() -> [String] { - return Array(activePeers) + var peers = Set() + + // Include connected peripherals (devices we connected to as central) + peers.formUnion(connectedPeripherals.keys) + + // Include active peers (devices that have announced) + peers.formUnion(activePeers) + + // Filter out invalid peers + return peers.filter { $0 != "unknown" && $0 != myPeerID } } private func broadcastPacket(_ packet: BitchatPacket) { @@ -217,23 +226,33 @@ class BluetoothMeshService: NSObject { if let nickname = String(data: packet.payload, encoding: .utf8) { print("[DEBUG] Received announce from \(peerID): \(nickname)") + // Check if this is the first time we're getting a nickname for this peer + let isNewNickname = peerNicknames[peerID] == nil + // Store the nickname peerNicknames[peerID] = nickname // Add to active peers if not already there - if peerID != "unknown" && peerID != myPeerID && !activePeers.contains(peerID) { - print("[DEBUG] Adding new peer \(peerID) to active peers") - activePeers.insert(peerID) - DispatchQueue.main.async { - self.delegate?.didConnectToPeer(nickname) - self.delegate?.didUpdatePeerList(self.getAllConnectedPeerIDs()) + if peerID != "unknown" && peerID != myPeerID { + if !activePeers.contains(peerID) { + print("[DEBUG] Adding new peer \(peerID) to active peers") + activePeers.insert(peerID) + } + + // Show join message if this is a new nickname + if isNewNickname { + DispatchQueue.main.async { + self.delegate?.didConnectToPeer(nickname) + self.delegate?.didUpdatePeerList(self.getAllConnectedPeerIDs()) + } + } else { + // Just update the peer list + DispatchQueue.main.async { + self.delegate?.didUpdatePeerList(self.getAllConnectedPeerIDs()) + } } } else { - print("[DEBUG] Peer \(peerID) already active or invalid") - // Just update the peer list to refresh nicknames - DispatchQueue.main.async { - self.delegate?.didUpdatePeerList(self.getAllConnectedPeerIDs()) - } + print("[DEBUG] Peer \(peerID) is invalid (unknown or self)") } } diff --git a/bitchat/ViewModels/ChatViewModel.swift b/bitchat/ViewModels/ChatViewModel.swift index 5633eee9..40d44f94 100644 --- a/bitchat/ViewModels/ChatViewModel.swift +++ b/bitchat/ViewModels/ChatViewModel.swift @@ -149,6 +149,7 @@ extension ChatViewModel: BitchatDelegate { } func didUpdatePeerList(_ peers: [String]) { + print("[DEBUG] ChatViewModel: Peer list updated with \(peers.count) peers: \(peers)") connectedPeers = peers isConnected = !peers.isEmpty