state recovery, polling optimizations, error rendering
widget states cached to SQLite, loaded on startup to seed DataProjection so server restart preserves last-known data for reconnecting clients. polling: first poll runs immediately, widget list cached per-task with 30s refresh, static text polled once inline instead of looping. poll failures propagate WidgetError::SourceUnavailable to clients. render engine prepends [offline] prefix in accent color, stale data preserved below.
This commit is contained in:
@@ -19,6 +19,13 @@ impl DataProjection {
|
||||
Self::default()
|
||||
}
|
||||
|
||||
pub async fn seed(&self, states: Vec<(WidgetId, WidgetState)>) {
|
||||
let mut current = self.current.lock().await;
|
||||
for (id, state) in states {
|
||||
current.insert(id, state);
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn get_state(&self, widget_id: WidgetId) -> Option<WidgetState> {
|
||||
self.current.lock().await.get(&widget_id).cloned()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user