Subj : exec/load/game_lobby.js exec/load/tests/test_game_lobby_events.js xtrn To : Git commit to main/sbbs/master From : Rob Swindell (on Debian Linux) Date : Thu Jul 02 2026 00:55:42 https://gitlab.synchro.net/main/sbbs/-/commit/8368d6ee80bfa2103b2652e2 Modified Files: exec/load/game_lobby.js exec/load/tests/test_game_lobby_events.js xtrn/syncdoom/lobby.js syncdoom.example.ini syncdoom_lib.js xtrn/syncduke/lobby.js syncduke.example.ini syncduke_lib.js Log Message: syncduke/syncdoom/game_lobby: live who's-online + activity panel, configurable Give the SyncDuke lobby the same bottom-anchored "who's online + recent activity" panel SyncDOOM has, promoting the panel composer into the shared game_lobby.js so both doors share it rather than duplicating it: * game_lobby.js gains recent_events()/activity_cell()/panel_cells() (UI-free cell composition -- live nodes first, then recent activity); event_feed() now emits the "[age]
" line (the fmt callback returns the plain body); plus parse_duration() and the [lobby] config accessors activity_max()/ activity_max_age()/panel_rows(). * SyncDuke's lobby.js adds the bottom-anchored draw + ~1/s poll loop (mirroring SyncDOOM's), gated on [lobby] live; its sd_event_text is now body-only, matching SyncDOOM's convention so the shared display path adds the age prefix once. * SyncDOOM adopts the shared recent_events/panel_cells/event_feed (its own sd_activity_cell/sd_event_feed removed). Four [lobby] settings tune the panel/feed for both doors: live (enable the panel), activity_max (full-screen feed count, default 18), activity_max_age (hide activity older than this -- days, fractions or an h/d/w suffix; 0 = no limit), and panel_rows (panel height, default 6). Since JS File.iniGetValue has no native duration parsing, parse_duration() reads the age (bare number = days). The example inis document all four keys and ship live = true. Co-Authored-By: Claude Opus 4.8