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] <body>" 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 <
noreply@anthropic.com>
---
■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net