load notes in background

This commit is contained in:
callebtc
2025-10-17 23:29:14 +02:00
parent 249ea1e2fb
commit 835283ec64
2 changed files with 10 additions and 8 deletions
@@ -532,14 +532,14 @@ private fun ChatDialogs(
)
}
// Location notes sheet
// Location notes sheet - matches iOS pattern exactly
if (showLocationNotesSheet) {
val context = androidx.compose.ui.platform.LocalContext.current
val locationManager = remember { com.bitchat.android.geohash.LocationChannelManager.getInstance(context) }
val availableChannels by locationManager.availableChannels.observeAsState(emptyList())
val nickname by viewModel.nickname.observeAsState("")
// Get building-level geohash (precision 8 for iOS compatibility)
// iOS pattern: notesGeohash ?? LocationChannelManager.shared.availableChannels.first(where: { $0.level == .building })?.geohash
val buildingGeohash = availableChannels.firstOrNull { it.level == com.bitchat.android.geohash.GeohashChannelLevel.BUILDING }?.geohash
if (buildingGeohash != null) {
@@ -554,13 +554,8 @@ private fun ChatDialogs(
nickname = nickname,
onDismiss = onLocationNotesSheetDismiss
)
// Subscribe to notes counter when sheet is shown
LaunchedEffect(buildingGeohash) {
com.bitchat.android.nostr.LocationNotesCounter.subscribe(buildingGeohash)
}
} else {
// No block geohash available - show error state
// No building geohash available - show error state (matches iOS)
ModalBottomSheet(
onDismissRequest = onLocationNotesSheetDismiss,
containerColor = MaterialTheme.colorScheme.surface
@@ -610,6 +610,7 @@ class ChatViewModel(
/**
* Update notes counter subscription based on current channel and location permission
* iOS pattern: Subscribe when in mesh mode and location is authorized
* ENHANCEMENT: Also subscribe LocationNotesManager to load actual notes in background
*/
private fun updateNotesCounterSubscription(channel: com.bitchat.android.geohash.ChannelID?) {
try {
@@ -631,20 +632,26 @@ class ChatViewModel(
if (buildingGeohash != null) {
Log.d(TAG, "📍 Subscribing to location notes for building geohash: $buildingGeohash")
// Subscribe counter for badge
com.bitchat.android.nostr.LocationNotesCounter.subscribe(buildingGeohash)
// ALSO subscribe manager to load actual notes in background
com.bitchat.android.nostr.LocationNotesManager.getInstance().setGeohash(buildingGeohash)
} else {
// Keep existing subscription if we had one (avoid flicker)
if (com.bitchat.android.nostr.LocationNotesCounter.geohash.value == null) {
com.bitchat.android.nostr.LocationNotesCounter.cancel()
com.bitchat.android.nostr.LocationNotesManager.getInstance().cancel()
}
}
} else {
com.bitchat.android.nostr.LocationNotesCounter.cancel()
com.bitchat.android.nostr.LocationNotesManager.getInstance().cancel()
}
}
is com.bitchat.android.geohash.ChannelID.Location -> {
// Location channel mode: cancel counter (only show in mesh mode)
com.bitchat.android.nostr.LocationNotesCounter.cancel()
com.bitchat.android.nostr.LocationNotesManager.getInstance().cancel()
}
null -> {
// Default to mesh behavior