v0.3.6: Network indicator, tab badges, message read tracking, UI cleanup

UI:
- Network indicator dot (black/red/yellow/green) + capability labels (Public, Server)
- Tab badges: Feed (new posts), My Posts (new engagement), People (online), Messages (unread)
- Stats bar removed — contextual counts in tab labels
- Message thread popup variable scoping fix

Message read tracking:
- mark_conversation_read on popover open, close, and message send
- Prevents re-notification of already-seen messages after app restart

Network:
- Added has_public_v6(), has_upnp() getters on Network
- NetworkSummaryDto includes hasPublicV6, hasPublicV4, hasUpnp

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Scott Reimers 2026-03-20 23:09:57 -04:00
parent a7e632de88
commit 24b78a8d41
7 changed files with 142 additions and 43 deletions

View file

@ -359,6 +359,17 @@ impl Network {
self.has_upnp_tcp
}
/// Whether this node has a public IPv6 address.
pub fn has_public_v6(&self) -> bool {
self.has_public_v6
}
/// Whether this node has UPnP mapping (UDP or TCP).
pub fn has_upnp(&self) -> bool {
self.upnp_mapping.is_some() || self.has_upnp_tcp
}
/// Get external HTTP address string for InitialExchange advertisement.
pub fn http_addr(&self) -> Option<String> {
if let Some(ref mapping) = self.upnp_mapping {