diff --git a/CHANGELOG.md b/CHANGELOG.md index feb9bc3f..4bbdfece 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,7 +17,37 @@ release that ships it. accepts both, but the store flags the old spelling as deprecated (`store_manager.py`) and only the new one is in `schema/manifest_schema.json`. -## Unreleased +## 3.8.0 + +Live Vegas elements: plugin content that keeps changing while it scrolls +(scores on the scoreboards' cards, the flight map's gliding aircraft, the +weather radar's loop), with live games kept in the ticker by default. Also +stable/beta update channels, the display control socket, the systemd +display watchdog, optional web login, ES-module web UI pages, sports +consolidation stage 4, and the removal of the 35 plugin APIs deprecated +since 3.5.0 (see Removed). + +### New modules + +A plugin may import these via `src.*` once it floors on 3.8.0 (and should +guard the import, since the loader's version check is advisory). + +- `src/plugin_system/vegas_elements.py` -- `VegasElement`, the unit a + plugin's `get_vegas_elements()` returns (also re-exported from + `base_plugin`). See "Live Vegas elements" below. +- `src/plugin_system/testing/vegas.py` -- the harness for those hooks: + `render_vegas_elements`, `check_vegas_elements`, `render_vegas_timeline`. +- `src/common/sports_vegas.py` -- what a scoreboard needs for live cards: + `game_key`, `game_fingerprint`, `dedupe_games`, `VegasCardCache`, + `StickyOdds`, `finished_games`. +- `src/common/sports_plugin_host.py`, `sports_live_scroll.py`, + `sports_display_rules.py` and `sports_font_path.py` -- sports + consolidation stage 4; see "New modules (sports consolidation stage 4)" + below. +- `src/display_watchdog.py`, `src/plugin_system/plugin_catalog.py`, + `src/plugin_system/plugin_runtime.py`, `src/plugin_system/field_model.py` + and the `src/ipc/` package -- new core modules (described below) that + plugins do not normally import. ### Web UI: ES modules and one form model (stage 1) @@ -509,6 +539,14 @@ read any of them: twice. Assigning `cached_image` still stores exactly what was assigned. New `ScrollHelper.has_strip()` says whether there is a strip without building its image; the frame path and Vegas use it. +- The frame after a Vegas strip extension is no longer late on a Pi 4. The + render thread also laid out every plugin block of the new group (joining + its rows, measuring the separation between each pair) and pasted the + blocks into one image, about 37ms on hdpi against ~3.75ms of slack. The + thread that fetches the group now does that as each plugin arrives, and + the extension only writes the prepared pixels into the strip + (`ScrollHelper.append_content` takes RGB arrays): 3.2ms. In a 4 x 8 minute + A/B soak, extension frames went from 10 of 10 late to 3 of 10. ### Tooling @@ -616,12 +654,11 @@ plugin that still calls one gets an `AttributeError`; ### New modules (sports consolidation stage 4) -A plugin may import these via `src.*` once it floors on the release that -ships them (the first release cut from this section). All four hold code the +A plugin may import these via `src.*` once it floors on 3.8.0. All four hold code the scoreboard plugins carry as identical copies (checked at ledmatrix-plugins `56c4f15`), moved without behaviour change under the plugins' own names; each docstring lists what the host class must provide. Nothing in core uses -them yet. The plugins delete their copies when they floor on that release. +them yet. The plugins delete their copies when they floor on 3.8.0. - `src/common/sports_plugin_host.py` — `SportsPluginHostMixin`, ten helpers of the scoreboard plugin class (`manager.py`) identical in all nine: diff --git a/src/__init__.py b/src/__init__.py index 7236d44f..b181d528 100644 --- a/src/__init__.py +++ b/src/__init__.py @@ -4,5 +4,5 @@ LEDMatrix Display System Core source package for the LED Matrix Display project. """ -__version__ = "3.7.0" +__version__ = "3.8.0" diff --git a/src/common/README.md b/src/common/README.md index 5b11188c..b707b685 100644 --- a/src/common/README.md +++ b/src/common/README.md @@ -40,13 +40,13 @@ Rules for the package: | [`sports_card`](#sports_card) | Scoreboard card settings, colours, fonts, dates | Yes (scoreboards) | 3.3.0 | | [`sports_card_wrappers`](#sports_card_wrappers) | The game renderer's `sports_card` delegations | Yes (scoreboards) | 3.7.0 | | [`sports_celebration`](#sports_celebration) | Draw a scoreboard's score/win celebration | Yes (scoreboards) | 3.7.0 | -| [`sports_display_rules`](#sports_display_rules) | Which games a scoreboard shows, for how long, and its scorebug date line | Yes (scoreboards) | Unreleased | +| [`sports_display_rules`](#sports_display_rules) | Which games a scoreboard shows, for how long, and its scorebug date line | Yes (scoreboards) | 3.8.0 | | [`sports_fetch`](#sports_fetch) | Scoreboard season fetch, lookback and live-odds decisions | Yes (scoreboards) | 3.7.0 | -| [`sports_font_path`](#sports_font_path) | Find a scoreboard's bundled font whatever the cwd | Yes (scoreboards) | Unreleased | +| [`sports_font_path`](#sports_font_path) | Find a scoreboard's bundled font whatever the cwd | Yes (scoreboards) | 3.8.0 | | [`sports_game_renderer`](#sports_game_renderer) | Scoreboard scroll/Vegas card geometry | Yes (scoreboards) | 3.3.0 | | [`sports_helpers`](#sports_helpers) | Small helpers every scoreboard `sports.py` copies | Yes (scoreboards) | 3.5.0 | -| [`sports_live_scroll`](#sports_live_scroll) | Rebuild a live scroll strip mid-cycle without moving it | Yes (scoreboards) | Unreleased | -| [`sports_plugin_host`](#sports_plugin_host) | Helpers of a scoreboard's plugin class (`manager.py`) | Yes (scoreboards) | Unreleased | +| [`sports_live_scroll`](#sports_live_scroll) | Rebuild a live scroll strip mid-cycle without moving it | Yes (scoreboards) | 3.8.0 | +| [`sports_plugin_host`](#sports_plugin_host) | Helpers of a scoreboard's plugin class (`manager.py`) | Yes (scoreboards) | 3.8.0 | | [`sports_scroll`](#sports_scroll) | Scoreboard scroll-display orchestration | Yes (scoreboards) | 3.2.0 | | [`sports_shared`](#sports_shared) | Sport-independent `sports.py` methods | Yes (scoreboards) | 3.3.0 | | [`sports_vegas`](#sports_vegas) | Live Vegas cards: keys, card cache, sticky odds, finished games | Yes (scoreboards) | 3.8.0 |