def test_add_item_to_sonos_playlist(self, moco): moco.contentDirectory.reset_mock() playlist = mock.Mock() playlist.item_id = 7 ressource = mock.Mock() ressource.uri = 'fake_uri' track = mock.Mock() track.resources = [ressource] track.uri = 'fake_uri' track.to_element.return_value = XML.Element('a') update_id = 100 moco.contentDirectory.Browse.return_value = { 'NumberReturned': '0', 'Result': '<DIDL-Lite xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:r="urn:schemas-rinconnetworks-com:metadata-1-0/" xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"></DIDL-Lite>', 'TotalMatches': '0', 'UpdateID': update_id } moco.add_item_to_sonos_playlist(track, playlist) moco.contentDirectory.Browse.assert_called_once_with([ ('ObjectID', playlist.item_id), ('BrowseFlag', 'BrowseDirectChildren'), ('Filter', '*'), ('StartingIndex', 0), ('RequestedCount', 1), ('SortCriteria', '') ]) moco.avTransport.AddURIToSavedQueue.assert_called_once_with([ ('InstanceID', 0), ('UpdateID', update_id), ('ObjectID', playlist.item_id), ('EnqueuedURI', track.uri), ('EnqueuedURIMetaData', to_didl_string(track)), ('AddAtIndex', 4294967295) ])
def __add_uri_to_queue(self, uri, didl, position): """Add URI to queue.""" meta = to_didl_string(didl) self.soco.avTransport.AddURIToQueue([ ('InstanceID', 0), ('EnqueuedURI', uri), ('EnqueuedURIMetaData', meta), ('DesiredFirstTrackNumberEnqueued', position), ('EnqueueAsNext', 1) ])
def play_radio_station(player, uri): """Plays the selected radio station. The URI must be in the format as it is currently returned from soco: x-sonosapi-stream:s25111?sid=254&flags=32 """ verbose_output("Switching to radio station {0}".format(uri)) service = MusicService('TuneIn') didl = DidlItem( title="DUMMY", parent_id="DUMMY", item_id="DUMMY", desc=service.desc) meta = to_didl_string(didl) player.avTransport.SetAVTransportURI( [('InstanceID', 0), ('CurrentURI', uri), ('CurrentURIMetaData', meta)]) player.play()
def AddToQueue(artist = '', song = '', url = '', queue_position = 0, playnow = False, keepinqueue = True): if not url: results = service.search(category='tracks', term=song) tracks = results.items().pop()[1] for track in tracks: currentArtist = track.items()[4][1].items()[1][1] if currentArtist == artist: break #track_id = "spotify:track:2qs5ZcLByNTctJKbhAZ9JE" track_id = track.items()[0][1] else: segmentedurl = urlparse.urlparse(url) segmentedpath = segmentedurl[2].split('/') trackHash = segmentedpath[len(segmentedpath) - 1] track_id = "spotify:track:" + trackHash didl = DidlMusicTrack( title="DUMMY", # This is ignored. Sonos gets the title from the item_id parent_id="DUMMY", # Ditto item_id="0fffffff{0}".format(quote_url(track_id)), desc=service.desc ) meta = to_didl_string(didl) # Add it to the queue and play it response = sonos.avTransport.AddURIToQueue([ ("InstanceID", 0), ("EnqueuedURI", service.sonos_uri_from_id( track_id)), ("EnqueuedURIMetaData", meta), ("DesiredFirstTrackNumberEnqueued", queue_position), ("EnqueueAsNext", 1) ]) index = int(response["FirstTrackNumberEnqueued"]) - 1 if playnow: sonos.play_from_queue(index, True) if not keepinqueue: thr = threading.Thread(target=RemoveItemFromQueue, args=[index], kwargs={}) thr.start() # will run "foo" return True
def play_radio_station(player, uri): """Plays the selected radio station. The URI must be in the format as it is currently returned from soco: x-sonosapi-stream:s25111?sid=254&flags=32 """ verbose_output("Switching to radio station {0}".format(uri)) service = MusicService('TuneIn') didl = DidlItem(title="DUMMY", parent_id="DUMMY", item_id="DUMMY", desc=service.desc) meta = to_didl_string(didl) player.avTransport.SetAVTransportURI([('InstanceID', 0), ('CurrentURI', uri), ('CurrentURIMetaData', meta)]) player.play()
def test_add_item_to_sonos_playlist(self, moco): moco.contentDirectory.reset_mock() playlist = mock.Mock() playlist.item_id = 7 ressource = mock.Mock() ressource.uri = 'fake_uri' track = mock.Mock() track.resources = [ressource] track.uri = 'fake_uri' track.to_element.return_value = XML.Element('a') update_id = 100 moco.contentDirectory.Browse.return_value = { 'NumberReturned': '0', 'Result': '<DIDL-Lite xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:r="urn:schemas-rinconnetworks-com:metadata-1-0/" xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"></DIDL-Lite>', 'TotalMatches': '0', 'UpdateID': update_id } moco.add_item_to_sonos_playlist(track, playlist) moco.contentDirectory.Browse.assert_called_once_with([ ('ObjectID', playlist.item_id), ('BrowseFlag', 'BrowseDirectChildren'), ('Filter', '*'), ('StartingIndex', 0), ('RequestedCount', 1), ('SortCriteria', '') ]) moco.avTransport.AddURIToSavedQueue.assert_called_once_with( [('InstanceID', 0), ('UpdateID', update_id), ('ObjectID', playlist.item_id), ('EnqueuedURI', track.uri), ('EnqueuedURIMetaData', to_didl_string(track)), ('AddAtIndex', 4294967295)] )
def play_track(self, track): if self._current_zone is not None: self._current_zone.play_uri(track.resources[0].uri, to_didl_string(track))