Files
bitchat-android/app/src/main/java/com/bitchat/android/nostr/GeohashConversationRegistry.kt
T
a1denvalu3GitHuba1denvalu3 <>
c7e20a9590 fix nostr private messages processing (#563)
* fix nostr private messages processing

* persisted geohash registry

---------

Co-authored-by: a1denvalu3 <>
2026-01-12 14:53:53 +07:00

52 lines
1.5 KiB
Kotlin

package com.bitchat.android.nostr
import android.content.Context
import android.content.SharedPreferences
import java.util.concurrent.ConcurrentHashMap
/**
* GeohashConversationRegistry
* - Global, thread-safe registry of conversationKey (e.g., "nostr_<pub16>") -> source geohash
* - Enables routing geohash DMs from anywhere by providing the correct geohash identity
* - Persisted to SharedPreferences to survive app restarts.
*/
object GeohashConversationRegistry {
private val map = ConcurrentHashMap<String, String>()
private const val PREFS_NAME = "geohash_conversation_registry"
private var prefs: SharedPreferences? = null
fun initialize(context: Context) {
if (prefs == null) {
prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
loadFromPrefs()
}
}
private fun loadFromPrefs() {
prefs?.let { p ->
val allEntries = p.all
for ((key, value) in allEntries) {
if (key is String && value is String) {
map[key] = value
}
}
}
}
fun set(convKey: String, geohash: String) {
if (geohash.isNotEmpty()) {
map[convKey] = geohash
prefs?.edit()?.putString(convKey, geohash)?.apply()
}
}
fun get(convKey: String): String? = map[convKey]
fun snapshot(): Map<String, String> = map.toMap()
fun clear() {
map.clear()
prefs?.edit()?.clear()?.apply()
}
}