diff --git a/bitchat/Services/LocationNotesCounter.swift b/bitchat/Services/LocationNotesCounter.swift index 787bd97c..5fb443a5 100644 --- a/bitchat/Services/LocationNotesCounter.swift +++ b/bitchat/Services/LocationNotesCounter.swift @@ -17,9 +17,10 @@ final class LocationNotesCounter: ObservableObject { func subscribe(geohash gh: String) { let norm = gh.lowercased() if geohash == norm { return } + // Do not clear count immediately to avoid UI flicker; keep last known + // value until initial load completes on the new subscription. cancel() geohash = norm - count = 0 noteIDs.removeAll() initialLoadComplete = false diff --git a/bitchat/Views/ContentView.swift b/bitchat/Views/ContentView.swift index 463930ef..42f0f0bc 100644 --- a/bitchat/Views/ContentView.swift +++ b/bitchat/Views/ContentView.swift @@ -1530,8 +1530,16 @@ extension ContentView { if locationManager.permissionState == .authorized { LocationChannelManager.shared.refreshChannels() } - if let building = LocationChannelManager.shared.availableChannels.first(where: { $0.level == .building })?.geohash { - LocationNotesCounter.shared.subscribe(geohash: building) + if locationManager.permissionState == .authorized { + if let building = LocationChannelManager.shared.availableChannels.first(where: { $0.level == .building })?.geohash { + LocationNotesCounter.shared.subscribe(geohash: building) + } else { + // Keep existing subscription if we had one to avoid flicker + // Only cancel if we have no known geohash + if LocationNotesCounter.shared.geohash == nil { + LocationNotesCounter.shared.cancel() + } + } } else { LocationNotesCounter.shared.cancel() }