Exemplo n.º 1
0
    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)
        ])
Exemplo n.º 2
0
 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)
     ])
Exemplo n.º 3
0
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()
Exemplo n.º 4
0
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
Exemplo n.º 5
0
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()
Exemplo n.º 6
0
    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)]
        )
Exemplo n.º 7
0
 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))