This is needed in several places in the code where we need to compare if
two strings differ, but either the strings are too long (e.g. content of
large files) or we don't want to pass the original values (e.g.
credentials, session tokens etc.).
- 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.