Make Sidebar react to the nickname and RSSI changes. (#228)

This commit is contained in:
Tair
2025-08-06 00:06:47 +02:00
committed by GitHub
parent 62e1b752af
commit 8bf2220cea
4 changed files with 28 additions and 8 deletions
@@ -211,6 +211,7 @@ fun ChatHeaderContent(
val favoritePeers by viewModel.favoritePeers.observeAsState(emptySet())
val peerFingerprints by viewModel.peerFingerprints.observeAsState(emptyMap())
val peerSessionStates by viewModel.peerSessionStates.observeAsState(emptyMap())
val peerNicknames by viewModel.peerNicknames.observeAsState(emptyMap())
// Reactive favorite computation - no more static lookups!
val isFavorite = isFavoriteReactive(
@@ -224,7 +225,7 @@ fun ChatHeaderContent(
PrivateChatHeader(
peerID = selectedPrivatePeer,
peerNicknames = viewModel.meshService.getPeerNicknames(),
peerNicknames = peerNicknames,
isFavorite = isFavorite,
sessionState = sessionState,
onBackClick = onBackClick,
@@ -97,6 +97,12 @@ class ChatState {
// Peer fingerprint state for reactive favorites (for reactive UI updates)
private val _peerFingerprints = MutableLiveData<Map<String, String>>(emptyMap())
val peerFingerprints: LiveData<Map<String, String>> = _peerFingerprints
private val _peerNicknames = MutableLiveData<Map<String, String>>(emptyMap())
val peerNicknames: LiveData<Map<String, String>> = _peerNicknames
private val _peerRSSI = MutableLiveData<Map<String, Int>>(emptyMap())
val peerRSSI: LiveData<Map<String, Int>> = _peerRSSI
// peerIDToPublicKeyFingerprint REMOVED - fingerprints now handled centrally in PeerManager
@@ -241,6 +247,14 @@ class ChatState {
fun setPeerFingerprints(fingerprints: Map<String, String>) {
_peerFingerprints.value = fingerprints
}
fun setPeerNicknames(nicknames: Map<String, String>) {
_peerNicknames.value = nicknames
}
fun setPeerRSSI(rssi: Map<String, Int>) {
_peerRSSI.value = rssi
}
fun setShowAppInfo(show: Boolean) {
_showAppInfo.value = show
@@ -88,6 +88,8 @@ class ChatViewModel(
val favoritePeers: LiveData<Set<String>> = state.favoritePeers
val peerSessionStates: LiveData<Map<String, String>> = state.peerSessionStates
val peerFingerprints: LiveData<Map<String, String>> = state.peerFingerprints
val peerNicknames: LiveData<Map<String, String>> = state.peerNicknames
val peerRSSI: LiveData<Map<String, Int>> = state.peerRSSI
val showAppInfo: LiveData<Boolean> = state.showAppInfo
init {
@@ -303,7 +305,7 @@ class ChatViewModel(
}
/**
* Update reactive states for all connected peers (session states and fingerprints)
* Update reactive states for all connected peers (session states, fingerprints, nicknames, RSSI)
*/
private fun updateReactiveStates() {
val currentPeers = state.getConnectedPeersValue()
@@ -313,10 +315,15 @@ class ChatViewModel(
meshService.getSessionState(peerID).toString()
}
state.setPeerSessionStates(sessionStates)
// Update fingerprint mappings from centralized manager
val fingerprints = privateChatManager.getAllPeerFingerprints()
state.setPeerFingerprints(fingerprints)
val nicknames = meshService.getPeerNicknames()
state.setPeerNicknames(nicknames)
val rssiValues = meshService.getPeerRSSI()
state.setPeerRSSI(rssiValues)
}
// MARK: - Debug and Troubleshooting
@@ -43,11 +43,9 @@ fun SidebarOverlay(
val selectedPrivatePeer by viewModel.selectedPrivateChatPeer.observeAsState()
val nickname by viewModel.nickname.observeAsState("")
val unreadChannelMessages by viewModel.unreadChannelMessages.observeAsState(emptyMap())
// Get peer data from mesh service
val peerNicknames = viewModel.meshService.getPeerNicknames()
val peerRSSI = viewModel.meshService.getPeerRSSI()
val peerNicknames by viewModel.peerNicknames.observeAsState(emptyMap())
val peerRSSI by viewModel.peerRSSI.observeAsState(emptyMap())
Box(
modifier = modifier
.background(Color.Black.copy(alpha = 0.5f))