mirror of
https://github.com/ChuckBuilds/LEDMatrix.git
synced 2026-04-10 13:02:59 +00:00
* feat: add March Madness plugin and tournament round logos New dedicated March Madness plugin with scrolling tournament ticker: - Fetches NCAA tournament data from ESPN scoreboard API - Shows seeded matchups with team logos, live scores, and round separators - Highlights upsets (higher seed beating lower seed) in gold - Auto-enables during tournament window (March 10 - April 10) - Configurable for NCAAM and NCAAW tournaments - Vegas mode support via get_vegas_content() Tournament round logo assets: - MARCH_MADNESS.png, ROUND_64.png, ROUND_32.png - SWEET_16.png, ELITE_8.png, FINAL_4.png, CHAMPIONSHIP.png Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(store): prevent bulk-update from stalling on bundled/in-repo plugins Three related bugs caused the bulk plugin update to stall at 3/19: 1. Bundled plugins (e.g. starlark-apps, shipped with LEDMatrix rather than the plugin registry) had no metadata file, so update_plugin() returned False → API returned 500 → frontend queue halted. Fix: check for .plugin_metadata.json with install_type=bundled and return True immediately (these plugins update with LEDMatrix itself). 2. git config --get remote.origin.url (without --local) walked up the directory tree and found the parent LEDMatrix repo's remote URL for plugins that live inside plugin-repos/. This caused the store manager to attempt a 60-second git clone of the wrong repo for every update. Fix: use --local to scope the lookup to the plugin directory only. 3. hello-world manifest.json had a trailing comma causing JSON parse errors on every plugin discovery cycle (fixed on devpi directly). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(march-madness): address PR #263 code review findings - Replace self.is_enabled with BasePlugin.self.enabled in update(), display(), and supports_dynamic_duration() so runtime toggles work - Support quarter-based period labels for NCAAW (Q1..Q4 vs H1..H2), detected via league key or status_detail content - Use live refresh interval (60s) for cache max_age during live games instead of hardcoded 300s - Narrow broad except in _load_round_logos to (OSError, ValueError) with a fallback except Exception using logger.exception for traces - Remove unused `situation` local variable from _parse_event() - Add numpy>=1.24.0 to requirements.txt (imported but was missing) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Chuck <chuck@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
139 lines
4.0 KiB
JSON
139 lines
4.0 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"title": "March Madness Plugin Configuration",
|
|
"type": "object",
|
|
"properties": {
|
|
"enabled": {
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Enable the March Madness tournament display"
|
|
},
|
|
"leagues": {
|
|
"type": "object",
|
|
"title": "Tournament Leagues",
|
|
"description": "Which NCAA tournaments to display",
|
|
"properties": {
|
|
"ncaam": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Show NCAA Men's Tournament games"
|
|
},
|
|
"ncaaw": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Show NCAA Women's Tournament games"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"favorite_teams": {
|
|
"type": "array",
|
|
"title": "Favorite Teams",
|
|
"description": "Team abbreviations to highlight (e.g., DUKE, UNC). Leave empty to show all teams equally.",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"uniqueItems": true,
|
|
"default": []
|
|
},
|
|
"display_options": {
|
|
"type": "object",
|
|
"title": "Display Options",
|
|
"x-collapsed": true,
|
|
"properties": {
|
|
"show_seeds": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Show tournament seeds (1-16) next to team names"
|
|
},
|
|
"show_round_logos": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Show round logo separators between game groups"
|
|
},
|
|
"highlight_upsets": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Highlight upset winners (higher seed beating lower seed) in gold"
|
|
},
|
|
"show_bracket_progress": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Show which teams are still alive in each region"
|
|
},
|
|
"scroll_speed": {
|
|
"type": "number",
|
|
"default": 1.0,
|
|
"minimum": 0.5,
|
|
"maximum": 5.0,
|
|
"description": "Scroll speed (pixels per frame)"
|
|
},
|
|
"scroll_delay": {
|
|
"type": "number",
|
|
"default": 0.02,
|
|
"minimum": 0.001,
|
|
"maximum": 0.1,
|
|
"description": "Delay between scroll frames (seconds)"
|
|
},
|
|
"target_fps": {
|
|
"type": "integer",
|
|
"default": 120,
|
|
"minimum": 30,
|
|
"maximum": 200,
|
|
"description": "Target frames per second"
|
|
},
|
|
"loop": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Loop the scroll continuously"
|
|
},
|
|
"dynamic_duration": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Automatically adjust display duration based on content width"
|
|
},
|
|
"min_duration": {
|
|
"type": "integer",
|
|
"default": 30,
|
|
"minimum": 10,
|
|
"maximum": 300,
|
|
"description": "Minimum display duration in seconds"
|
|
},
|
|
"max_duration": {
|
|
"type": "integer",
|
|
"default": 300,
|
|
"minimum": 30,
|
|
"maximum": 600,
|
|
"description": "Maximum display duration in seconds"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"data_settings": {
|
|
"type": "object",
|
|
"title": "Data Settings",
|
|
"x-collapsed": true,
|
|
"properties": {
|
|
"update_interval": {
|
|
"type": "integer",
|
|
"default": 300,
|
|
"minimum": 60,
|
|
"maximum": 3600,
|
|
"description": "How often to refresh tournament data (seconds). Automatically shortens to 60s when live games are detected."
|
|
},
|
|
"request_timeout": {
|
|
"type": "integer",
|
|
"default": 30,
|
|
"minimum": 5,
|
|
"maximum": 60,
|
|
"description": "API request timeout in seconds"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"required": ["enabled"],
|
|
"additionalProperties": false,
|
|
"x-propertyOrder": ["enabled", "leagues", "favorite_teams", "display_options", "data_settings"]
|
|
}
|