mirror of
https://github.com/ChuckBuilds/LEDMatrix.git
synced 2026-04-12 05:42:59 +00:00
fix(vegas): keep plugin data and visuals fresh during Vegas scroll mode (#291)
* fix(vegas): keep plugin data and visuals fresh during Vegas scroll mode Plugins using ESPN APIs and other data sources were not updating during Vegas mode because the render loop blocked for 60-600s per iteration, starving the scheduled update tick. This adds a non-blocking background thread that runs plugin updates every ~1s during Vegas mode, bridges update notifications to the stream manager, and clears stale scroll caches so all three content paths (native, scroll_helper, fallback) reflect fresh data. - Add background update tick thread in Vegas coordinator (non-blocking) - Add _tick_plugin_updates_for_vegas() bridge in display controller - Fix fallback capture to call update() instead of only update_data() - Clear scroll_helper.cached_image on update for scroll-based plugins - Drain background thread on Vegas stop/exit to prevent races Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(vegas): address review findings in update pipeline - Extract _drive_background_updates() helper and call it from both the render loop and the static-pause wait loop so plugin data stays fresh during static pauses (was skipped by the early `continue`) - Remove synchronous plugin.update() from the fallback capture path; the background update tick already handles API refreshes so the content-fetch thread should only call lightweight update_data() - Use scroll_helper.clear_cache() instead of just clearing cached_image so cached_array, total_scroll_width and scroll_position are also reset Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Chuck <chuck@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -217,6 +217,15 @@ class StreamManager:
|
||||
refreshed_segments = {}
|
||||
for plugin_id in updated_plugins:
|
||||
self.plugin_adapter.invalidate_cache(plugin_id)
|
||||
|
||||
# Clear the plugin's scroll_helper cache so the visual is rebuilt
|
||||
# from fresh data (affects stocks, news, odds-ticker, etc.)
|
||||
plugin = None
|
||||
if hasattr(self.plugin_manager, 'plugins'):
|
||||
plugin = self.plugin_manager.plugins.get(plugin_id)
|
||||
if plugin:
|
||||
self.plugin_adapter.invalidate_plugin_scroll_cache(plugin, plugin_id)
|
||||
|
||||
segment = self._fetch_plugin_content(plugin_id)
|
||||
if segment:
|
||||
refreshed_segments[plugin_id] = segment
|
||||
|
||||
Reference in New Issue
Block a user