- Re-added support for Python 2.6 (#154)
- Added :meth:`SoCo.get_sonos_playlists` (#114)
- Added methods for working with speaker topology
:attr:`soco.SoCo.group` retrieves the :class:`soco.groups.ZoneGroup` to which the speaker belongs (#132). The group itself has a :attr:`soco.groups.ZoneGroup.member` attribute returning all of its members. Iterating directly over the group is possible as well.
Speakers can be grouped using :meth:`soco.SoCo.join` (#136):
z1 = SoCo('192.168.1.101') z2 = SoCo('192.168.1.102') z1.join(z2):attr:`soco.SoCo.all_zones` and :attr:`soco.SoCo.visible_zones` return all and all visible zones, respectively.
:attr:`soco.SoCo.is_bridge` indicates if the
SoCo
instance represents a bridge.:attr:`soco.SoCo.is_coordinator` indicates if the
SoCo
instance is a group coordinator (#166)
A new :class:`soco.plugins.spotify.Spotify` plugin allows querying and playing the Spotify music catalogue (#119):
from soco.plugins.spotify import Spotify from soco.plugins.spotify import SpotifyTrack # create a new plugin, pass the soco instance to it myplugin = Spotify(device) print 'index: ' + str(myplugin.add_track_to_queue(SpotifyTrack(' spotify:track:20DfkHC5grnKNJCzZQB6KC'))) print 'index: ' + str(myplugin.add_album_to_queue(SpotifyAlbum(' spotify:album:6a50SaJpvdWDp13t0wUcPU')))
A :class:`soco.data_structures.URI` item can be passed to
add_to_queue
which allows playing music from arbitrary URIs (#147)import soco from soco.data_structures import URI soc = soco.SoCo('...ip_address...') uri = URI('http://www.noiseaddicts.com/samples/17.mp3') soc.add_to_queue(uri)
A new
include_invisible
parameter to :meth:`soco.discover` can be used to retrieve invisible speakers or bridges (#146)A new
timeout
parameter to :meth:`soco.discover`. If no zones are found withintimeout
secondsNone
is returned. (#146)Network requests can be cached for better performance (#131).
It is now possible to subscribe to events of a service using its :meth:`~soco.services.Service.subscribe` method, which returns a Subscription object. To unsubscribe, call the unsubscribe method on the returned object. (#121, #130)
Support for reading and setting crossfade (#165)
- Performance improvements for speaker discovery (#146)
- Various improvements to the Wimp plugin (#140).
- Test coverage tracking using coveralls.io (#163)
- Queue related use 0-based indexing consistently (#103)
- :meth:`soco.SoCo.get_speakers_ip` is deprecated in favour of :meth:`soco.discover` (#124)