Revert "Fix compilation errors in ChatViewModel"

This reverts commit e2d50e3684.
This commit is contained in:
jack
2025-08-01 20:26:28 +02:00
parent e2d50e3684
commit 172b06721b
+46 -57
View File
@@ -194,66 +194,55 @@ class ChatViewModel: ObservableObject, BitchatDelegate {
MessageRetryService.shared.meshService = meshService MessageRetryService.shared.meshService = meshService
// Initialize Nostr services // Initialize Nostr services
Task { [weak self] in Task { @MainActor in
await MainActor.run { nostrRelayManager = NostrRelayManager.shared
self?.nostrRelayManager = NostrRelayManager.shared nostrRelayManager?.connect()
self?.nostrRelayManager?.connect()
messageRouter = MessageRouter(
if let meshService = self?.meshService, meshService: meshService,
let nostrRelayManager = self?.nostrRelayManager { nostrRelay: nostrRelayManager!
self?.messageRouter = MessageRouter( )
meshService: meshService,
nostrRelay: nostrRelayManager // Initialize peer manager
) peerManager = PeerManager(meshService: meshService)
} peerManager?.updatePeers()
// Initialize peer manager // Bind peer manager's peer list to our published property
if let meshService = self?.meshService { peerManager?.$peers
self?.peerManager = PeerManager(meshService: meshService) .receive(on: DispatchQueue.main)
self?.peerManager?.updatePeers() .sink { [weak self] peers in
SecureLogger.log("📱 UI: Received \(peers.count) peers from PeerManager",
category: SecureLogger.session, level: .info)
for peer in peers {
SecureLogger.log(" - \(peer.displayName): connected=\(peer.isConnected), state=\(peer.connectionState)",
category: SecureLogger.session, level: .debug)
}
// Update peers directly
self?.allPeers = peers
// Update peer index for O(1) lookups
// Deduplicate peers by ID to prevent crash from duplicate keys
var uniquePeers: [String: PeerData] = [:]
for peer in peers {
// Keep the first occurrence of each peer ID
if uniquePeers[peer.id] == nil {
uniquePeers[peer.id] = peer
} else {
SecureLogger.log("⚠️ Duplicate peer ID detected: \(peer.id) (\(peer.displayName))",
category: SecureLogger.session, level: .warning)
}
}
self?.peerIndex = uniquePeers
// Schedule UI update if peers changed
if peers.count > 0 || self?.allPeers.count ?? 0 > 0 {
// UI will update automatically
}
// Bind peer manager's peer list to our published property // Update private chat peer ID if needed when peers change
if let peerManager = self?.peerManager, if self?.selectedPrivateChatFingerprint != nil {
var cancellables = self?.cancellables { self?.updatePrivateChatPeerIfNeeded()
peerManager.$peers
.receive(on: DispatchQueue.main)
.sink { [weak self] peers in
SecureLogger.log("📱 UI: Received \(peers.count) peers from PeerManager",
category: SecureLogger.session, level: .info)
for peer in peers {
SecureLogger.log(" - \(peer.displayName): connected=\(peer.isConnected), state=\(peer.connectionState)",
category: SecureLogger.session, level: .debug)
}
// Update peers directly
self?.allPeers = peers
// Update peer index for O(1) lookups
// Deduplicate peers by ID to prevent crash from duplicate keys
var uniquePeers: [String: BitchatPeer] = [:]
for peer in peers {
// Keep the first occurrence of each peer ID
if uniquePeers[peer.id] == nil {
uniquePeers[peer.id] = peer
} else {
SecureLogger.log("⚠️ Duplicate peer ID detected: \(peer.id) (\(peer.displayName))",
category: SecureLogger.session, level: .warning)
}
}
self?.peerIndex = uniquePeers
// Schedule UI update if peers changed
if peers.count > 0 || self?.allPeers.count ?? 0 > 0 {
// UI will update automatically
}
// Update private chat peer ID if needed when peers change
if self?.selectedPrivateChatFingerprint != nil {
self?.updatePrivateChatPeerIfNeeded()
}
}
.store(in: &cancellables)
self?.cancellables = cancellables
} }
} }
} .store(in: &cancellables)
} }
// Set up Noise encryption callbacks // Set up Noise encryption callbacks