Skip to content

v0.11.4: Feature/media keys tabbed UI (#98)

Choose a tag to compare

@Sholofly Sholofly released this 03 May 12:45
8f6a847
* feat: add all media keys, per-box tabbed UI with remote control layout

- Add 40+ media key constants to const.py grouped by category (Power,
  Playback, Navigation, D-Pad, Colour, Digits)
- Add /api/keys endpoint to web.py
- Redesign web_ui.html: per-box tabs instead of grid, full-page remote
  control layout with D-pad cross, numpad, colour buttons, and all keys

* feat: export all media key constants from package __init__

* feat: add set_channel_by_number and deduplicate channels by number

- Add set_channel_by_number() to LGHorizonDevice for tuning by channel
  number instead of name
- Refactor set_channel to share _tune_to_channel helper
- Deduplicate channels in _refresh_channels: keep last entry per
  logicalChannelNumber (HD over SD)
- Add set_channel_by_number command to web.py

* fix: deduplicate channels at output layer instead of storage

Move channel deduplication from _refresh_channels to get_profile_channels
so all channel IDs remain in _channels for state processor lookups.
Prevents KeyError when the box reports a channel variant (e.g. SD) that
was previously removed by dedup.

* fix: switch channels by number instead of name to avoid duplicates

Web UI and CLI now use set_channel_by_number to prevent ambiguity
when multiple channels share the same name but have different numbers.

* feat: add /api/explore and /api/services endpoints for API discovery