Files
meshcore-gui/meshcore_gui/services
pe1hvh 21e266ceb5 feat: add offline BBS with GUI configuration and persistent storage(#v1.14.0)
Implements a fully offline Bulletin Board System for emergency mesh
communication (NoodNet Zwolle, NoodNet OV, Dalfsen and similar
organisations).

New files:
- services/bbs_config_store.py: Manages ~/.meshcore-gui/bbs/bbs_config.json.
  Thread-safe, atomic writes. Created on first run. Channels are
  enabled and configured at runtime via the GUI — no code changes
  required.
- services/bbs_service.py: SQLite persistence at
  ~/.meshcore-gui/bbs/bbs_messages.db. WAL-mode enabled so multiple
  simultaneous instances (e.g. 800 MHz + 433 MHz) share the same
  bulletin board safely. BbsCommandHandler parses !bbs post/read/help
  mesh commands with live config from BbsConfigStore. Whitelist
  enforcement via sender public key (silent drop on unknown key).
- gui/panels/bbs_panel.py: Dashboard panel with channel selector,
  region/category filters, scrollable message list and post form.
  Settings section lists all active device channels; per channel:
  enable toggle, categories, regions, retention and key whitelist.
  Changes take effect immediately without restart.

Modified files:
- services/bot.py: MeshBot accepts optional bbs_handler; !bbs commands
  are routed to BbsCommandHandler before keyword matching.
- config.py: BBS_CHANNELS removed (config now lives in bbs_config.json).
  Version bumped to 1.14.0.
- gui/dashboard.py: BbsConfigStore and BbsService instantiated and
  shared across handler and panel. BBS drawer menu item added.
- gui/panels/__init__.py: BbsPanel re-exported.

Storage layout:
  ~/.meshcore-gui/bbs/bbs_config.json   — channel configuration
  ~/.meshcore-gui/bbs/bbs_messages.db   — SQLite message store

No new external dependencies (SQLite is stdlib).
2026-03-14 08:43:50 +01:00
..
2026-03-09 17:53:29 +01:00
2026-03-09 17:53:29 +01:00
2026-03-09 17:53:29 +01:00
2026-03-09 17:53:29 +01:00
2026-03-09 17:53:29 +01:00
2026-03-09 17:53:29 +01:00
2026-03-09 17:53:29 +01:00
2026-03-09 17:53:29 +01:00
2026-03-09 17:53:29 +01:00
2026-03-09 17:53:29 +01:00