- Added `style` property to pass static style rules to the dropdown
body.
- Better positioning of the dropdown when the resulting body is too long
and may overflow the top of the screen - in that case, the dropdown
position needs to be maximized at zero.
- The MIME magic functions apparently aren't thread safe, and they may
crash the interpreter if called concurrently. Lock calls to
`file.get_mime_types`.
- Added an LRU cache for the MIME type results.
`_on_stop_event` may be set by the callback, but then cleared again when
`_reset_state` is called.
This can result in the `_on_stop_event.wait` call in `quit` to time out.
Instead, `_on_stop_event` should be cleared only when the player goes
into `playing` or `paused` mode. It's only then that we know for sure
that the state isn't `stopped`, and only in that case it makes sense to
wait for a stop.
- Support for _Play_ / _Play (With Cache)_ options for YouTube videos.
- Added `media.chromecast` and `media.gstreamer` UI panels.
- Removed `media.omxplayer` - the plugin has been removed.
- Enriched and improved the media info component.
- Propagate the media loading state to all children components.
- Persist query/search state on the URL.
Closes: #422
Don't wait for a value update on `device_set` - an event will be
triggered anyway when the value changes.
This should prevent timeouts when setting/toggling values.
Otherwise the installation won't work properly on Debian oldstable (and
probably any Python installation that doesn't fully support
pyproject.toml yet).
Instead of running `python setup.py --version`.
That's because earlier versions of Python that don't fully support
dynamic version specifications through `pyproject.toml` may just return
`0.0.0` here.
These are required for clients that don't have JS enabled and will get a
404 otherwise.
The routes simply render `index.html`, which will be empty if JS is
disabled and will redirect to the appropriate login/registration Vue
route if the user isn't logged in.