From e1bf069c74d0280e5d1c4f5cdbc3c9a1e34e4eee Mon Sep 17 00:00:00 2001 From: jack Date: Fri, 12 Sep 2025 14:33:15 +0200 Subject: [PATCH] Favorites: remove npub resend tracking and nickname-based key migration; rely on Noise key as identity --- .../FavoritesPersistenceService.swift | 4 ++++ bitchat/Services/MessageRouter.swift | 1 + bitchat/Services/UnifiedPeerService.swift | 21 ------------------- 3 files changed, 5 insertions(+), 21 deletions(-) diff --git a/bitchat/Services/FavoritesPersistenceService.swift b/bitchat/Services/FavoritesPersistenceService.swift index 82c3ffb8..7e07c10d 100644 --- a/bitchat/Services/FavoritesPersistenceService.swift +++ b/bitchat/Services/FavoritesPersistenceService.swift @@ -13,12 +13,16 @@ final class FavoritesPersistenceService: ObservableObject { let theyFavoritedUs: Bool let favoritedAt: Date let lastUpdated: Date + // Track what we last sent as OUR npub to this peer, to avoid resending unless it changes + // Note: we do not track which npub we last sent to them; sending happens only on favorite toggle var isMutual: Bool { isFavorite && theyFavoritedUs } } + // We intentionally do not track when we last sent our npub; sending happens only on favorite toggle. + private static let storageKey = "chat.bitchat.favorites" private static let keychainService = "chat.bitchat.favorites" diff --git a/bitchat/Services/MessageRouter.swift b/bitchat/Services/MessageRouter.swift index 2ea05140..e4e4bb8a 100644 --- a/bitchat/Services/MessageRouter.swift +++ b/bitchat/Services/MessageRouter.swift @@ -74,6 +74,7 @@ final class MessageRouter { } func sendFavoriteNotification(to peerID: String, isFavorite: Bool) { + // Route via mesh when connected; else use Nostr if mesh.isPeerConnected(peerID) { mesh.sendFavoriteNotification(to: peerID, isFavorite: isFavorite) } else { diff --git a/bitchat/Services/UnifiedPeerService.swift b/bitchat/Services/UnifiedPeerService.swift index cdef5858..30e91056 100644 --- a/bitchat/Services/UnifiedPeerService.swift +++ b/bitchat/Services/UnifiedPeerService.swift @@ -195,27 +195,6 @@ final class UnifiedPeerService: ObservableObject, TransportPeerEventsDelegate { let favoriteStatus = favorites[noiseKey] { peer.favoriteStatus = favoriteStatus peer.nostrPublicKey = favoriteStatus.peerNostrPublicKey - } else { - // Check by nickname for reconnected peers - let favoriteByNickname = favorites.values.first { - $0.peerNickname == peerInfo.nickname - } - - if let favorite = favoriteByNickname, - let noiseKey = peerInfo.noisePublicKey { - SecureLogger.debug("🔄 Found favorite for '\(peerInfo.nickname)' by nickname, updating noise key", category: .session) - - // Update the favorite's key in persistence - favoritesService.updateNoisePublicKey( - from: favorite.peerNoisePublicKey, - to: noiseKey, - peerNickname: peerInfo.nickname - ) - - // Get updated favorite - peer.favoriteStatus = favoritesService.getFavoriteStatus(for: noiseKey) - peer.nostrPublicKey = peer.favoriteStatus?.peerNostrPublicKey ?? favorite.peerNostrPublicKey - } } return peer