def test_browse_items(backend, container, items):
    # FIXME: how to patch multiple object methods...
    with mock.patch.object(backend, 'client') as m:
        m.properties.return_value = Future.fromvalue(container)
        m.browse.return_value = Future.fromvalue(items)
        assert backend.library.browse(container['URI']) == [
            Ref.track(name='Track #1', uri='dleyna://media/1'),
            Ref.track(name='Track #2', uri='dleyna://media/2')
        ]
def to_mopidy_track_ref(spotify_track):
    uri = str(spotify.Link.from_track(spotify_track, 0))
    if not spotify_track.is_loaded():
        return Ref.track(uri=uri, name='[loading] %s' % uri)

    name = spotify_track.name()
    if spotify_track.availability() != TRACK_AVAILABLE:
        name = '[unplayable] %s' % name
    return Ref.track(uri=uri, name=name)
    def setUp(self):  # noqa: N802
        super(AddCommandsTest, self).setUp()

        self.tracks = [Track(uri='dummy:/a', name='a'),
                       Track(uri='dummy:/foo/b', name='b')]

        self.refs = {'/a': Ref.track(uri='dummy:/a', name='a'),
                     '/foo': Ref.directory(uri='dummy:/foo', name='foo'),
                     '/foo/b': Ref.track(uri='dummy:/foo/b', name='b')}

        self.backend.library.dummy_library = self.tracks
Exemple #4
0
    def test_browse_dir_returns_subdirs_and_tracks(self):
        self.library1.browse.return_value.get.return_value = [
            Ref.directory(uri='dummy1:directory:/foo/bar', name='Bar'),
            Ref.track(uri='dummy1:track:/foo/baz.mp3', name='Baz'),
        ]

        result = self.core.library.browse('dummy1:directory:/foo')
        self.assertEqual(result, [
            Ref.directory(uri='dummy1:directory:/foo/bar', name='Bar'),
            Ref.track(uri='dummy1:track:/foo/baz.mp3', name='Baz'),
        ])
    def test_add_with_library_should_recurse(self):
        tracks = [Track(uri='dummy:/a', name='a'),
                  Track(uri='dummy:/foo/b', name='b')]

        self.backend.library.dummy_library = tracks
        self.backend.library.dummy_browse_result = {
            'dummy:/': [Ref.track(uri='dummy:/a', name='a'),
                        Ref.directory(uri='dummy:/foo', name='foo')],
            'dummy:/foo': [Ref.track(uri='dummy:/foo/b', name='b')]}

        self.sendRequest('add "/dummy"')
        self.assertEqual(self.core.tracklist.tracks.get(), tracks)
        self.assertInResponse('OK')
Exemple #6
0
def test_browse_items(backend, container, items):
    # FIXME: how to patch multiple object methods...
    with mock.patch.object(backend, 'client') as m:
        m.properties.return_value = Future.fromvalue(container)
        m.browse.side_effect = [
            Future.fromvalue([items[0:2], True]),
            Future.fromvalue([items[2:3], True]),
            Future.fromvalue([[], False])
        ]
        assert backend.library.browse(container['URI']) == [
            Ref.track(name='Track #1', uri='dleyna://media/1'),
            Ref.track(name='Track #2', uri='dleyna://media/2'),
            Ref.track(name='Track #3', uri='dleyna://media/3'),
        ]
Exemple #7
0
    def test_listall_with_uri(self):
        tracks = [Track(uri="dummy:/a", name="a"), Track(uri="dummy:/foo/b", name="b")]
        self.backend.library.dummy_library = tracks
        self.backend.library.dummy_browse_result = {
            "dummy:/": [Ref.track(uri="dummy:/a", name="a"), Ref.directory(uri="dummy:/foo", name="foo")],
            "dummy:/foo": [Ref.track(uri="dummy:/foo/b", name="b")],
        }

        self.sendRequest('listall "/dummy/foo"')

        self.assertNotInResponse("file: dummy:/a")
        self.assertInResponse("directory: /dummy/foo")
        self.assertInResponse("file: dummy:/foo/b")
        self.assertInResponse("OK")
Exemple #8
0
    def test_listall_with_uri(self):
        tracks = [Track(uri='dummy:/a', name='a'),
                  Track(uri='dummy:/foo/b', name='b')]
        self.backend.library.dummy_library = tracks
        self.backend.library.dummy_browse_result = {
            'dummy:/': [Ref.track(uri='dummy:/a', name='a'),
                        Ref.directory(uri='dummy:/foo', name='foo')],
            'dummy:/foo': [Ref.track(uri='dummy:/foo/b', name='b')]}

        self.sendRequest('listall "/dummy/foo"')

        self.assertNotInResponse('file: dummy:/a')
        self.assertInResponse('directory: /dummy/foo')
        self.assertInResponse('file: dummy:/foo/b')
        self.assertInResponse('OK')
Exemple #9
0
    def test_browse_dir_returns_subdirs_and_tracks(self):
        self.library1.browse().get.return_value = [
            Ref.directory(uri="dummy1:directory:/foo/bar", name="Bar"),
            Ref.track(uri="dummy1:track:/foo/baz.mp3", name="Baz"),
        ]
        self.library1.browse.reset_mock()

        result = self.core.library.browse("dummy1:directory:/foo")
        self.assertEqual(
            result,
            [
                Ref.directory(uri="dummy1:directory:/foo/bar", name="Bar"),
                Ref.track(uri="dummy1:track:/foo/baz.mp3", name="Baz"),
            ],
        )
Exemple #10
0
def station_to_ref(station, show_country=True):
    name = station.get('name').strip()  # TODO: fallback to streams URI?
    if show_country:
        # TODO: make this a setting so users can set '$name [$country]' etc?
        name = '%s [%s]' % (name, station.get('country', '??'))
    uri = unparse_uri('station', station['id'])
    return Ref.track(uri=uri, name=name)
    def __init__(self, tracks, *args, **kwargs):
        logger.debug("initializing SpotifyWebLibraryProvider cache")
        self.albums2tracks = {}
        self.artists2albums = {}
        self.sortedAlbums = []
        self.sortedArtists = []
        self.tracks = []
        self.trackDict = {}
        for t in tracks:
            logger.debug("Adding track %s", t.name)
            self.tracks.append(Ref.track(name=t.name, uri=t.uri))
            self.trackDict[t.uri] = t
            if hasattr(t, 'album'):
                self.add_album_and_artists(t)

        logger.debug('Sorting albums and artists')
        cmp_dir_names = lambda x, y: cmp(x.name, y.name)
        self.sortedAlbums.sort(cmp_dir_names)
        self.sortedArtists.sort(cmp_dir_names)
        logger.debug('Sorting albums by track number')
        for key in self.albums2tracks:
            logger.debug('Sorting album %s', key)
            album = self.albums2tracks[key]
            cmp_tracknos = lambda x, y: \
                cmp(self.trackDict[x.uri].track_no,
                    self.trackDict[y.uri].track_no)
            album.sort(cmp_tracknos)
Exemple #12
0
    def get_items(self, uri):
        if self._playlists is None:
            self.refresh()

        playlist = self._playlists.get(uri)
        if playlist is None:
            return None
        return [Ref.track(uri=t.uri, name=t.name) for t in playlist.tracks]
Exemple #13
0
    def test_lsinfo_for_dir_includes_tracks(self):
        self.backend.library.dummy_library = [Track(uri="dummy:/a", name="a")]
        self.backend.library.dummy_browse_result = {"dummy:/": [Ref.track(uri="dummy:/a", name="a")]}

        self.sendRequest('lsinfo "/dummy"')
        self.assertInResponse("file: dummy:/a")
        self.assertInResponse("Title: a")
        self.assertInResponse("OK")
Exemple #14
0
    def test_lsinfo_for_dir_with_and_without_leading_slash_is_the_same(self):
        self.backend.library.dummy_browse_result = {
            "dummy:/": [Ref.track(uri="dummy:/a", name="a"), Ref.directory(uri="dummy:/foo", name="foo")]
        }

        response1 = self.sendRequest('lsinfo "dummy"')
        response2 = self.sendRequest('lsinfo "/dummy"')
        self.assertEqual(response1, response2)
Exemple #15
0
    def test_lsinfo_for_root_includes_dirs_for_each_lib_with_content(self):
        self.backend.library.dummy_browse_result = {
            "dummy:/": [Ref.track(uri="dummy:/a", name="a"), Ref.directory(uri="dummy:/foo", name="foo")]
        }

        self.sendRequest('lsinfo "/"')
        self.assertInResponse("directory: dummy")
        self.assertInResponse("OK")
Exemple #16
0
    def test_lsinfo_for_dir_does_not_include_self(self):
        self.backend.library.dummy_browse_result = {
            'dummy:/': [Ref.directory(uri='dummy:/foo', name='foo')],
            'dummy:/foo': [Ref.track(uri='dummy:/a', name='a')]}

        self.sendRequest('lsinfo "/dummy"')
        self.assertNotInResponse('directory: dummy')
        self.assertInResponse('OK')
Exemple #17
0
    def test_lsinfo_for_dir_with_and_without_trailing_slash_is_the_same(self):
        self.backend.library.dummy_browse_result = {
            'dummy:/': [Ref.track(uri='dummy:/a', name='a'),
                        Ref.directory(uri='dummy:/foo', name='foo')]}

        response1 = self.sendRequest('lsinfo "dummy"')
        response2 = self.sendRequest('lsinfo "dummy/"')
        self.assertEqual(response1, response2)
Exemple #18
0
    def test_lsinfo_for_root_includes_dirs_for_each_lib_with_content(self):
        self.backend.library.dummy_browse_result = {
            'dummy:/': [Ref.track(uri='dummy:/a', name='a'),
                        Ref.directory(uri='dummy:/foo', name='foo')]}

        self.sendRequest('lsinfo "/"')
        self.assertInResponse('directory: dummy')
        self.assertInResponse('OK')
    def test_add_root_should_not_add_anything_and_ok(self):
        self.backend.library.dummy_library = [Track(uri='dummy:/a', name='a')]
        self.backend.library.dummy_browse_result = {
            'dummy:/': [Ref.track(uri='dummy:/a', name='a')]}

        self.sendRequest('add "/"')
        self.assertEqual(len(self.core.tracklist.tracks.get()), 0)
        self.assertInResponse('OK')
def test_get_items_when_playlist_exists(session_mock, sp_playlist_mock, provider):
    session_mock.get_playlist.return_value = sp_playlist_mock

    result = provider.get_items("spotify:user:alice:playlist:foo")

    assert len(result) == 1

    assert result[0] == Ref.track(uri="spotify:track:abc", name="ABC 123")
def test_load_items():
    assert loads('') == []

    assert loads('test.mp3', basedir=b'/playlists') == [
        Ref.track(uri='file:///playlists/test.mp3', name='test')
    ]
    assert loads('../test.mp3', basedir=b'/playlists') == [
        Ref.track(uri='file:///test.mp3', name='test')
    ]
    assert loads('/test.mp3') == [
        Ref.track(uri='file:///test.mp3', name='test')
    ]
    assert loads('file:///test.mp3') == [
        Ref.track(uri='file:///test.mp3')
    ]
    assert loads('http://example.com/stream') == [
        Ref.track(uri='http://example.com/stream')
    ]

    assert loads('#EXTM3U\n#EXTINF:42,Test\nfile:///test.mp3\n') == [
        Ref.track(uri='file:///test.mp3', name='Test')
    ]
    assert loads('#EXTM3U\n#EXTINF:-1,Test\nhttp://example.com/stream\n') == [
        Ref.track(uri='http://example.com/stream', name='Test')
    ]
    def test_add_with_library_should_recurse(self):
        tracks = [
            Track(uri='dummy:/a', name='a'),
            Track(uri='dummy:/foo/b', name='b')
        ]

        self.backend.library.dummy_library = tracks
        self.backend.library.dummy_browse_result = {
            'dummy:/': [
                Ref.track(uri='dummy:/a', name='a'),
                Ref.directory(uri='dummy:/foo', name='foo')
            ],
            'dummy:/foo': [Ref.track(uri='dummy:/foo/b', name='b')]
        }

        self.send_request('add "/dummy"')
        self.assertEqual(self.core.tracklist.tracks.get(), tracks)
        self.assertInResponse('OK')
Exemple #23
0
    def test_get_items_selects_the_matching_backend(self):
        ref = Ref.track()
        self.sp2.get_items.return_value.get.return_value = [ref]

        result = self.core.playlists.get_items('dummy2:pl:a')

        self.assertEqual([ref], result)
        self.assertFalse(self.sp1.get_items.called)
        self.sp2.get_items.assert_called_once_with('dummy2:pl:a')
Exemple #24
0
    def test_lsinfo_for_dir_does_not_include_self(self):
        self.backend.library.dummy_browse_result = {
            "dummy:/": [Ref.directory(uri="dummy:/foo", name="foo")],
            "dummy:/foo": [Ref.track(uri="dummy:/a", name="a")],
        }

        self.sendRequest('lsinfo "/dummy"')
        self.assertNotInResponse("directory: dummy")
        self.assertInResponse("OK")
Exemple #25
0
    def test_lsinfo_for_root_returns_browse_result_before_playlists(self):
        last_modified = 1390942873222
        self.backend.library.dummy_browse_result = {
            "dummy:/": [Ref.track(uri="dummy:/a", name="a"), Ref.directory(uri="dummy:/foo", name="foo")]
        }
        self.backend.playlists.playlists = [Playlist(name="a", uri="dummy:/a", last_modified=last_modified)]

        response = self.sendRequest('lsinfo "/"')
        self.assertLess(response.index("directory: dummy"), response.index("playlist: a"))
Exemple #26
0
    def test_lsinfo_for_dir_does_not_include_self(self):
        self.backend.library.dummy_browse_result = {
            "dummy:/": [Ref.directory(uri="dummy:/foo", name="foo")],
            "dummy:/foo": [Ref.track(uri="dummy:/a", name="a")],
        }

        self.send_request('lsinfo "/dummy"')
        self.assertNotInResponse("directory: dummy")
        self.assertInResponse("OK")
Exemple #27
0
    def test_lsinfo_for_dir_does_not_include_self(self):
        self.backend.library.dummy_browse_result = {
            'dummy:/': [Ref.directory(uri='dummy:/foo', name='foo')],
            'dummy:/foo': [Ref.track(uri='dummy:/a', name='a')]
        }

        self.send_request('lsinfo "/dummy"')
        self.assertNotInResponse('directory: dummy')
        self.assertInResponse('OK')
def test_get_items_when_playlist_exists(session_mock, sp_playlist_mock,
                                        provider):
    session_mock.get_playlist.return_value = sp_playlist_mock

    result = provider.get_items('spotify:user:alice:playlist:foo')

    assert len(result) == 1

    assert result[0] == Ref.track(uri='spotify:track:abc', name='ABC 123')
Exemple #29
0
    def test_get_items_selects_the_matching_backend(self):
        ref = Ref.track()
        self.sp2.get_items.return_value.get.return_value = [ref]

        result = self.core.playlists.get_items("dummy2:pl:a")

        assert [ref] == result
        assert not self.sp1.get_items.called
        self.sp2.get_items.assert_called_once_with("dummy2:pl:a")
 def repl(p):
     if p.type == Ref.TRACK and p.uri.startswith(podcast_scheme):
         if self.current_level() is not None:
             cname = self.current_level().name
             path=self.subscriptions.path_on_disk(cname,p.name)
             if path is not None:
                 return Ref.track(name=p.name,uri=path)
         
     return p
    def test_add_root_should_not_add_anything_and_ok(self):
        self.backend.library.dummy_library = [Track(uri='dummy:/a', name='a')]
        self.backend.library.dummy_browse_result = {
            'dummy:/': [Ref.track(uri='dummy:/a', name='a')]
        }

        self.send_request('add "/"')
        self.assertEqual(len(self.core.tracklist.tracks.get()), 0)
        self.assertInResponse('OK')
Exemple #32
0
def test_audio_broadcast_ref():
    assert translator.ref(
        {
            "DisplayName": "Foo",
            "URI": BASEURI + "/foo",
            "Type": "audio",
            "TypeEx": AUDIO_BROADCAST_TYPE,
        }
    ) == Ref.track(uri=BASEURI + "/foo", name="Foo")
Exemple #33
0
    def test_get_items_selects_the_matching_backend(self):
        ref = Ref.track()
        self.sp2.get_items.return_value.get.return_value = [ref]

        result = self.core.playlists.get_items('dummy2:pl:a')

        self.assertEqual([ref], result)
        self.assertFalse(self.sp1.get_items.called)
        self.sp2.get_items.assert_called_once_with('dummy2:pl:a')
    def test_lsinfo_for_root_returns_browse_result_before_playlists(self):
        self.backend.library.dummy_browse_result = {
            'dummy:/': [Ref.track(uri='dummy:/a', name='a'),
                        Ref.directory(uri='dummy:/foo', name='foo')]}
        self.backend.playlists.set_dummy_playlists([
            Playlist(name='a', uri='dummy:/a')])

        response = self.send_request('lsinfo "/"')
        self.assertLess(response.index('directory: dummy'),
                        response.index('playlist: a'))
    def get_items(self, uri):
        '''
        Query local playlist cache for a given playlist, returns tracks
        '''
        playlist = self._playlists.get(uri)
        if not playlist:
            logger.info('Jellyfin: No playlists found')
            return None

        return [Ref.track(uri=i.uri, name=i.name) for i in playlist.tracks]
def station_to_ref(station):
    logger.debug('RadioBrowser: Start translator.station_to_ref')

    stationUuid = station.get('stationuuid', '??')
    uri = unparse_uri('station', stationUuid)
    name = station.get('name', station.get('url', '??'))
    # TODO: Should the name include 'now playing' for all stations?
    # if get_id_type(id) == RADIOBROWSER_ID_TOPIC:
    #     name = name + ' [%s]' % station.get('subtext', '??')
    return Ref.track(uri=uri, name=name)
    def test_lsinfo_for_dir_with_and_without_trailing_slash_is_the_same(
            self, last_modified_mock):
        last_modified_mock.return_value = '2015-08-05T22:51:06Z'
        self.backend.library.dummy_browse_result = {
            'dummy:/': [Ref.track(uri='dummy:/a', name='a'),
                        Ref.directory(uri='dummy:/foo', name='foo')]}

        response1 = self.send_request('lsinfo "dummy"')
        response2 = self.send_request('lsinfo "dummy/"')
        self.assertEqual(response1, response2)
 def reciter_suras(self, reciter_id):
     results = []
     reciter_id = int(reciter_id)
     reciter = self.reciters[reciter_id]
     for sura_no in reciter['suras']:
         results.append(
             Ref.track(uri='mp3quran:reciter:%d:%d' % (reciter_id, sura_no),
                       name=self.suras_name[sura_no]))
     logger.info(results)
     return results
Exemple #39
0
def station_to_ref(station):
    if station['type'] != 'audio':
        logger.debug('Expecting station but got %s' % station['type'])
    guide_id = station.get('guide_id', '??')
    uri = unparse_uri('station', guide_id)
    name = station.get('text', station['URL'])
    # TODO: Should the name include 'now playing' for all stations?
    if get_id_type(guide_id) == TUNEIN_ID_TOPIC:
        name = name + ' [%s]' % station.get('subtext', '??')
    return Ref.track(uri=uri, name=name)
Exemple #40
0
    def test_listall_without_uri(self):
        tracks = [Track(uri='dummy:/a', name='a'),
                  Track(uri='dummy:/foo/b', name='b')]
        self.backend.library.dummy_library = tracks
        self.backend.library.dummy_browse_result = {
            'dummy:/': [Ref.track(uri='dummy:/a', name='a'),
                        Ref.directory(uri='dummy:/foo', name='foo'),
                        Ref.album(uri='dummy:/album', name='album'),
                        Ref.playlist(uri='dummy:/pl', name='pl')],
            'dummy:/foo': [Ref.track(uri='dummy:/foo/b', name='b')]}

        self.sendRequest('listall')

        self.assertInResponse('file: dummy:/a')
        self.assertInResponse('directory: /dummy/foo')
        self.assertInResponse('directory: /dummy/album')
        self.assertInResponse('directory: /dummy/pl')
        self.assertInResponse('file: dummy:/foo/b')
        self.assertInResponse('OK')
    def test_lsinfo_for_root_includes_dirs_for_each_lib_with_content(self):
        self.backend.library.dummy_browse_result = {
            "dummy:/": [
                Ref.track(uri="dummy:/a", name="a"),
                Ref.directory(uri="dummy:/foo", name="foo"),
            ]
        }

        self.send_request('lsinfo "/"')
        self.assertInResponse("directory: dummy")
        self.assertInResponse("OK")
    def test_listallinfo_for_dir_with_and_without_trailing_slash_is_same(self):
        self.backend.library.dummy_browse_result = {
            "dummy:/": [
                Ref.track(uri="dummy:/a", name="a"),
                Ref.directory(uri="dummy:/foo", name="foo"),
            ]
        }

        response1 = self.send_request('listallinfo "dummy"')
        response2 = self.send_request('listallinfo "dummy/"')
        assert response1 == response2
    def test_listall_with_uri(self):
        tracks = [
            Track(uri="dummy:/a", name="a"),
            Track(uri="dummy:/foo/b", name="b"),
        ]
        self.backend.library.dummy_library = tracks
        self.backend.library.dummy_browse_result = {
            "dummy:/": [
                Ref.track(uri="dummy:/a", name="a"),
                Ref.directory(uri="dummy:/foo", name="foo"),
            ],
            "dummy:/foo": [Ref.track(uri="dummy:/foo/b", name="b")],
        }

        self.send_request('listall "/dummy/foo"')

        self.assertNotInResponse("file: dummy:/a")
        self.assertInResponse("directory: dummy/foo")
        self.assertInResponse("file: dummy:/foo/b")
        self.assertInResponse("OK")
Exemple #44
0
    def test_browse_dummy2_selects_dummy2_backend(self):
        self.library2.browse.return_value.get.return_value = [
            Ref.directory(uri='dummy2:directory:/bar/baz', name='quux'),
            Ref.track(uri='dummy2:track:/bar/foo.mp3', name='Baz'),
        ]

        self.core.library.browse('dummy2:directory:/bar')

        self.assertEqual(self.library1.browse.call_count, 0)
        self.assertEqual(self.library2.browse.call_count, 1)
        self.library2.browse.assert_called_with('dummy2:directory:/bar')
Exemple #45
0
    def test_lsinfo_for_root_includes_dirs_for_each_lib_with_content(self):
        self.backend.library.dummy_browse_result = {
            'dummy:/': [
                Ref.track(uri='dummy:/a', name='a'),
                Ref.directory(uri='dummy:/foo', name='foo')
            ]
        }

        self.send_request('lsinfo "/"')
        self.assertInResponse('directory: dummy')
        self.assertInResponse('OK')
Exemple #46
0
    def test_listallinfo_for_dir_with_and_without_trailing_slash_is_same(self):
        self.backend.library.dummy_browse_result = {
            'dummy:/': [
                Ref.track(uri='dummy:/a', name='a'),
                Ref.directory(uri='dummy:/foo', name='foo')
            ]
        }

        response1 = self.send_request('listallinfo "dummy"')
        response2 = self.send_request('listallinfo "dummy/"')
        self.assertEqual(response1, response2)
Exemple #47
0
    def test_listall_with_uri(self):
        tracks = [
            Track(uri='dummy:/a', name='a'),
            Track(uri='dummy:/foo/b', name='b')
        ]
        self.backend.library.dummy_library = tracks
        self.backend.library.dummy_browse_result = {
            'dummy:/': [
                Ref.track(uri='dummy:/a', name='a'),
                Ref.directory(uri='dummy:/foo', name='foo')
            ],
            'dummy:/foo': [Ref.track(uri='dummy:/foo/b', name='b')]
        }

        self.send_request('listall "/dummy/foo"')

        self.assertNotInResponse('file: dummy:/a')
        self.assertInResponse('directory: /dummy/foo')
        self.assertInResponse('file: dummy:/foo/b')
        self.assertInResponse('OK')
Exemple #48
0
    def test_browse_dummy2_selects_dummy2_backend(self):
        self.library2.browse.return_value.get.return_value = [
            Ref.directory(uri="dummy2:directory:/bar/baz", name="quux"),
            Ref.track(uri="dummy2:track:/bar/foo.mp3", name="Baz"),
        ]

        self.core.library.browse("dummy2:directory:/bar")

        assert self.library1.browse.call_count == 0
        assert self.library2.browse.call_count == 1
        self.library2.browse.assert_called_with("dummy2:directory:/bar")
Exemple #49
0
    def test_lsinfo_for_dir_includes_tracks(self):
        self.backend.library.dummy_library = [
            Track(uri='dummy:/a', name='a'),
        ]
        self.backend.library.dummy_browse_result = {
            'dummy:/': [Ref.track(uri='dummy:/a', name='a')]}

        self.sendRequest('lsinfo "/dummy"')
        self.assertInResponse('file: dummy:/a')
        self.assertInResponse('Title: a')
        self.assertInResponse('OK')
Exemple #50
0
    def test_lsinfo_for_root_returns_browse_result_before_playlists(self):
        last_modified = 1390942873222
        self.backend.library.dummy_browse_result = {
            'dummy:/': [Ref.track(uri='dummy:/a', name='a'),
                        Ref.directory(uri='dummy:/foo', name='foo')]}
        self.backend.playlists.playlists = [
            Playlist(name='a', uri='dummy:/a', last_modified=last_modified)]

        response = self.sendRequest('lsinfo "/"')
        self.assertLess(response.index('directory: dummy'),
                        response.index('playlist: a'))
Exemple #51
0
    def test_lsinfo_for_dir_does_not_recurse(self):
        self.backend.library.dummy_library = [
            Track(uri='dummy:/a', name='a'),
        ]
        self.backend.library.dummy_browse_result = {
            'dummy:/': [Ref.directory(uri='dummy:/foo', name='foo')],
            'dummy:/foo': [Ref.track(uri='dummy:/a', name='a')]}

        self.sendRequest('lsinfo "/dummy"')
        self.assertNotInResponse('file: dummy:/a')
        self.assertInResponse('OK')
Exemple #52
0
    def test_browse_dummy2_selects_dummy2_backend(self):
        self.library2.browse.return_value.get.return_value = [
            Ref.directory(uri='dummy2:directory:/bar/baz', name='quux'),
            Ref.track(uri='dummy2:track:/bar/foo.mp3', name='Baz'),
        ]

        self.core.library.browse('dummy2:directory:/bar')

        self.assertEqual(self.library1.browse.call_count, 0)
        self.assertEqual(self.library2.browse.call_count, 1)
        self.library2.browse.assert_called_with('dummy2:directory:/bar')
Exemple #53
0
    def test_lsinfo_for_dir_includes_tracks(self):
        self.backend.library.dummy_library = [
            Track(uri='dummy:/a', name='a'),
        ]
        self.backend.library.dummy_browse_result = {
            'dummy:/': [Ref.track(uri='dummy:/a', name='a')]}

        self.sendRequest('lsinfo "/dummy"')
        self.assertInResponse('file: dummy:/a')
        self.assertInResponse('Title: a')
        self.assertInResponse('OK')
Exemple #54
0
    def test_lsinfo_for_root_returns_browse_result_before_playlists(self):
        last_modified = 1390942873222
        self.backend.library.dummy_browse_result = {
            'dummy:/': [Ref.track(uri='dummy:/a', name='a'),
                        Ref.directory(uri='dummy:/foo', name='foo')]}
        self.backend.playlists.playlists = [
            Playlist(name='a', uri='dummy:/a', last_modified=last_modified)]

        response = self.sendRequest('lsinfo "/"')
        self.assertLess(response.index('directory: dummy'),
                        response.index('playlist: a'))
Exemple #55
0
def trackToRef(track):
    """Convert a mopidy track to a mopidy ref."""
    name = track.name
    if (len(track.artists)) > 0:
        name += ' - '
    for artist in track.artists:
        if len(name) > 0:
            name += ', '
        name += artist.name

    return Ref.track(uri=track.uri, name=name)
 def _track_to_ref(self, track, uri=None):
     if not uri:
         uri = track.uri
     name = ''
     for artist in track.artists:
         if len(name) > 0:
             name += ', '
         name += artist.name
     if (len(name)) > 0:
         name += ' - '
     name += track.name
     return Ref.track(uri=uri, name=name)