feat: reflect server mode in client UI #8

Merged
forbes merged 2 commits from feature/server-mode-ui into main 2026-02-08 22:10:23 +00:00
Owner

Add server mode awareness so the client reflects the state of the silo server (normal, read-only, degraded, offline).

Changes

Server mode tracking

  • New _server_mode module-level variable tracks current mode
  • _fetch_server_mode() queries GET /ready endpoint and maps the response status to a mode string ("normal", "read-only", "degraded", "offline")

SSE real-time updates

  • New server_mode_changed signal on SiloEventListener
  • _dispatch() handles server.state SSE events, updating _server_mode immediately

Mode banner in auth dock widget

  • Colored banner below the "Live:" row, hidden when mode is normal
  • Yellow: "Server is in read-only mode"
  • Orange: "MinIO unavailable — file ops limited"
  • Red: "Disconnected from silo"
  • Updated every 30s via _refresh_status() and in real-time via SSE

Write commands disabled by mode

  • Silo_New, Silo_Save, Silo_Commit, Silo_PushIsActive() now checks _server_mode == "normal"
  • Commands are grayed out in toolbar/menu when server is not in normal mode
  • Read commands (Silo_Open, Silo_Pull, Silo_Info) remain enabled

Mode behavior matrix

Mode New/Save/Commit/Push Open/Pull Banner
normal enabled enabled hidden
read-only disabled enabled "Server is in read-only mode"
degraded disabled enabled "MinIO unavailable — file ops limited"
offline disabled enabled "Disconnected from silo"

Closes #4

Add server mode awareness so the client reflects the state of the silo server (normal, read-only, degraded, offline). ## Changes ### Server mode tracking - New `_server_mode` module-level variable tracks current mode - `_fetch_server_mode()` queries `GET /ready` endpoint and maps the response status to a mode string (`"normal"`, `"read-only"`, `"degraded"`, `"offline"`) ### SSE real-time updates - New `server_mode_changed` signal on `SiloEventListener` - `_dispatch()` handles `server.state` SSE events, updating `_server_mode` immediately ### Mode banner in auth dock widget - Colored banner below the "Live:" row, hidden when mode is `normal` - Yellow: "Server is in read-only mode" - Orange: "MinIO unavailable — file ops limited" - Red: "Disconnected from silo" - Updated every 30s via `_refresh_status()` and in real-time via SSE ### Write commands disabled by mode - `Silo_New`, `Silo_Save`, `Silo_Commit`, `Silo_Push` — `IsActive()` now checks `_server_mode == "normal"` - Commands are grayed out in toolbar/menu when server is not in normal mode - Read commands (`Silo_Open`, `Silo_Pull`, `Silo_Info`) remain enabled ## Mode behavior matrix | Mode | New/Save/Commit/Push | Open/Pull | Banner | |------|---------------------|-----------|--------| | normal | enabled | enabled | hidden | | read-only | disabled | enabled | "Server is in read-only mode" | | degraded | disabled | enabled | "MinIO unavailable — file ops limited" | | offline | disabled | enabled | "Disconnected from silo" | Closes #4
forbes added 1 commit 2026-02-08 22:07:06 +00:00
Add server mode awareness to the FreeCAD client. The mode (normal,
read-only, degraded, offline) is fetched from the /ready endpoint on
each status refresh and updated in real-time via SSE server.state events.

Changes:
- Add _server_mode global and _fetch_server_mode() helper that queries
  /ready and maps response status to mode string
- Add server_mode_changed signal to SiloEventListener, handle
  server.state SSE events in _dispatch()
- Add mode banner to SiloAuthDockWidget: colored bar shown when server
  is not in normal mode (yellow=read-only, orange=degraded, red=offline)
- Update _refresh_status() to fetch mode and update banner
- Disable write commands (New, Save, Commit, Push) when server is not
  in normal mode via IsActive() checks

Closes #4
forbes added 1 commit 2026-02-08 22:10:16 +00:00
forbes merged commit fd3c97ff97 into main 2026-02-08 22:10:23 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: kindred/silo-mod#8