Keepalive fix, auto-reconnect on disconnect, tab icon fix, video playback guard

Keepalive: tokio::time::sleep inside select! was resetting every iteration —
keepalives never fired. Switched to tokio::time::interval which ticks reliably.
This caused connections to be zombie-reaped (10min timeout with no pings).

Auto-reconnect: unexpected disconnects (stream error, not SocialDisconnectNotice)
now attempt direct reconnect after 3s delay using last known address from peers
table or social route. Falls back to notify_growth() if direct reconnect fails.

Tab icons: updateTabBadge was using textContent which destroyed the icon and
label spans inside tab buttons. Now updates only the .tab-label span and manages
a separate .tab-badge element.

Video playback: feed re-render skipped while any video or audio is actively
playing, preventing echo from DOM destruction and media element recreation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Scott Reimers 2026-03-22 23:27:41 -04:00
parent 68afc40b16
commit 6320a82852
4 changed files with 118 additions and 12 deletions

View file

@ -81,6 +81,10 @@
<li><strong>Bottom nav bar</strong> &mdash; Mobile/tablet (&le;768px) gets a fixed bottom navigation bar with icon tabs. Desktop keeps the top tab bar.</li>
<li><strong>Text size update</strong> &mdash; Five options: XS (75%), S (100%), M (125% default), L (150%), XL (200%). Persisted to localStorage for instant restore on startup.</li>
<li><strong>Startup fix</strong> &mdash; Fixed blocking_lock panic that prevented app from launching (async runtime conflict). StoragePool reduced to 4 connections for Android compatibility.</li>
<li><strong>Keepalive fix</strong> &mdash; Mesh keepalive pings were never firing due to timer reset bug in select loop. Connections were being zombie-reaped instead of kept alive.</li>
<li><strong>Auto-reconnect</strong> &mdash; Unexpected disconnects now trigger immediate reconnect attempt (3s delay, then direct connect to last known address). Falls back to growth loop if direct fails.</li>
<li><strong>Tab icon fix</strong> &mdash; Badge updates were destroying tab icons on mobile. Now updates label and badge separately.</li>
<li><strong>Video playback</strong> &mdash; Feed re-render skipped while video/audio is playing to prevent echo and restart.</li>
</ul>
<div class="changelog-date">v0.4.2 &mdash; March 22, 2026</div>