* Add app icon to CastStatus (315) tbowmo
* Fix resetting status (313) balloob
* Support for Home Assistant Cast (301) balloob
* **BREAKING CHANGE** Dropped support for Python 3.4, 3.5
* Fix failure to reconnect after device reboot (305) soreau
* Better controller for plex. (300) Hellowlol
* Catch IndexError while parsing STATUS message. (296) skillingt
* Seek to a specified point in time via the Plex controller (295) tking2
* Update spotify controller and spotify example to handle casting to audio groups (294) emontnemery
* Add google home mini as audio device (284) Tsjippy
* Fix broken attempt to update status during tear down (289) emontnemery
* Dynamic auth token (282) fondberg
* Add support for queue_next / queue_prev (286) emontnemery
* Fix Spotify playback (275) fondberg
* Update spotify example (276) emontnemery
* Add multizone controller (278) emontnemery
* Do not wait forever when starting Spotify app (277) emontnemery
* Add MultizoneManager (283) emontnemery
* fixup! Remove the filters feature from get_chromecasts (141) (270) tompreston
* Do not automatically start worker thread and connect in Chromecast constructor (271) emontnemery
This is a breaking change. The method to call now depends on if you're running in blocking (the default) or non-blocking mode. Use one of the methods to start, appropriate for the mode you run in:
- **Blocking mode:** `cast.start()`: Start the worker thread and connect to the chromecast device. Connection status will be reported through the listener registered in `cast.register_connection_listener`.
- **Blocking mode:** `cast.wait()`: Wait for connection, this will also start the worker thread if it has not been started.
- **Non-blocking mode:** `cast.connect()`: Connect to the chromecast. This must only be called if the worker thread has not been started. Connection status will be reported through the listener registered in `cast.register_connection_listener`.
The automatic connect in the constructor meant that the constructor would hang forever if the number of retries was unlimited and the chromecast could not be found. It was also unnatural to start the worker thread in the constructor.
* Improve exponential backoff of mdns service resolution retries (269) emontnemery
* Exponential backoff of mdns service resolution retries (268) emontnemery
* Add support for connecting to named service (267) emontnemery
* YouTube controller version update (258) ur1katz
* Updated spotify controller description (232) Nobyx
* Allow users to pass the force_launch flag when launching an app (237) marcosdiez
* Better YouTube controller (236) ur1katz
* Simple event listener example (241) hjmsw
- Add Spotify controller (230 - enriquegh)
- Add `adjusted_current_time` property to media status (221 - tnyeanderson)
- Fix reconnecting right away when tries is None (222 - OttoWinter)
- Drop Python 2 support (211 - balloob) (Breaking change!)
- Fixes for discovery, FreeBSD Socket creation (215 - d8ahazard)
- FIx grouped Chromecasts and channel close (216 - OttoWinter)
- Fix SSL issues on Windows (212 - d8ahazard)
- Don't sleep when there are no tries remaining (204 - erik)
- Revert 184 socket client changes (202)
- Remove api_version from the rest of the code.
Breaking change: DeviceStatus object returned from `pychromecast.dial.get_device_status` no longer contains the `api_version` attribute. (OttoWinter - 197)
- Fix race in SocketClient.send_message (179) (emontnemery)
- Fix send message deadlock (180) (emontnemery)
- Do not print stack traces for known errors (balloob - 162)
- Fix bug in ReceiverController._send_launch_message (theychx - 166)
One of the last releases before we go for a 1.0 release. Refactor of the core to allow it to not-block. Also removal of some of the many filter functions that sneaked in. Contains breaking changes.
- Improved subtitle handling (palaviv)
- Support running PyChromecast in your own loop with non-blocking functions (dominikkarall)
- Support for non-blocking discovery (armills)
- Remove `get_chromecasts_as_dict()` (armills)
- Removed filtering from `get_chromecasts` (armills)
- Now able to specify delta for `volume_up` and `volume_down`. Will also no longer round the value before passing it in (smblott-github)
- Protobuf requirement is now >= 3.0 instead of requiring a beta version of v3 (theychx)
- Media Controller now has a wait method to wait till it is operational (armills)
- Zeroconf requirement is now >= 0.7.7
- Catch JSON error Python <3.5 compatibility (molobrakos)
- Subtitles typo (wa4557)
- Treat buffering as if the Chromecast is playing (jaharkes)
- Handle invalid JSON - 119 (molobrakos)
- Support for loading subtitles (wa4557, 105)
- Allow picking app id for media receiver (wa4557, 108)
- Ignore benign error in destructor (noob-4-life, 114)
- Fix setting a media thumbnail and title when playing media with the media controller. (noob-4-life, 88)
- Fix Chromecast discovery Python 3 compatibility
- Update dependencies `zeroconf` and `protobuf` to latest versions
- 65: Multi-room casting. Any groups that are created for Audio cast devices will appear as separate cast devices.
- Better support for audio devices. `CastStatus.is_active_input` and `CastStatus.is_stand_by` will report `None` for audio devices as this information is not available.
- The socket timeout value (`timeout`) can be specified when fetching cast devices.
- Improved information on Cast devices by primarily using the Dial information.
- New fields on `DeviceStatus`.
- `uuid`, the unique ID for the cast devices. Stored as `UUID` type.
- `cast_type`, type of cast device, one of `"cast"` (regular Chromecast), `"audio"` (Audio cast) or `"group"` (Grouped devices/multi-room). See `dial.CAST_TYPES` for details.
- Better `__repr__` strings on some classes.
- `ConnectionStatus` now reports the host/port pair using a namedtuple called `NetworkAddress`.
- Specify socket port using the new `port` parameter to `Chromecast` class. This is part of the multi-room support as groups use a different port but the same IP.
- New properties on `Chromecast` class for ease of access. `uuid`, `name`, `model_name` and `cast_type`.