Exemplo n.º 1
0
    def test_listplaylistinfo_without_quotes(self):
        self.backend.playlists.set_dummy_playlists([
            Playlist(name='name',
                     uri='dummy:name',
                     tracks=[Track(uri='dummy:a')])
        ])

        self.send_request('listplaylistinfo name')
        self.assertInResponse('file: dummy:a')
        self.assertInResponse('Track: 0')
        self.assertNotInResponse('Pos: 0')
        self.assertInResponse('OK')
Exemplo n.º 2
0
 def test_with_new_last_modified(self):
     tracks = [Track()]
     last_modified = datetime.datetime.utcnow()
     new_last_modified = last_modified + datetime.timedelta(1)
     playlist = Playlist(
         uri='an uri', name='a name', tracks=tracks,
         last_modified=last_modified)
     new_playlist = playlist.copy(last_modified=new_last_modified)
     self.assertEqual(new_playlist.uri, 'an uri')
     self.assertEqual(new_playlist.name, 'a name')
     self.assertEqual(list(new_playlist.tracks), tracks)
     self.assertEqual(new_playlist.last_modified, new_last_modified)
Exemplo n.º 3
0
 def test_with_new_tracks(self):
     tracks = [Track()]
     last_modified = 1390942873000
     playlist = Playlist(
         uri='an uri', name='a name', tracks=tracks,
         last_modified=last_modified)
     new_tracks = [Track(), Track()]
     new_playlist = playlist.replace(tracks=new_tracks)
     self.assertEqual(new_playlist.uri, 'an uri')
     self.assertEqual(new_playlist.name, 'a name')
     self.assertEqual(list(new_playlist.tracks), new_tracks)
     self.assertEqual(new_playlist.last_modified, last_modified)
Exemplo n.º 4
0
    def test_playlist_contents_get_written_to_disk(self):
        track = Track(uri=generate_song(1))
        uri = track.uri[len('file://'):]
        playlist = Playlist(tracks=[track], name='test')
        path = os.path.join(settings.LOCAL_PLAYLIST_PATH, 'test.m3u')

        self.stored.save(playlist)

        with open(path) as playlist_file:
            contents = playlist_file.read()

        self.assertEqual(uri, contents.strip())
Exemplo n.º 5
0
    def test_create_without_uri_scheme_ignores_exception(self):
        playlist = Playlist()
        self.sp1.create().get.side_effect = Exception
        self.sp1.reset_mock()
        self.sp2.create().get.return_value = playlist
        self.sp2.reset_mock()

        result = self.core.playlists.create('foo')

        self.assertEqual(playlist, result)
        self.sp1.create.assert_called_once_with('foo')
        self.sp2.create.assert_called_once_with('foo')
Exemplo n.º 6
0
    def test_playlists_are_loaded_at_startup(self):
        track = Track(uri=path_to_uri(path_to_data_dir('uri2')))
        playlist = Playlist(tracks=[track], name='test')

        self.stored.save(playlist)

        self.backend = self.backend_class()
        self.stored = self.backend.stored_playlists

        self.assert_(self.stored.playlists)
        self.assertEqual('test', self.stored.playlists[0].name)
        self.assertEqual(track.uri, self.stored.playlists[0].tracks[0].uri)
Exemplo n.º 7
0
 def test_with_new_name(self):
     tracks = [Track()]
     last_modified = datetime.datetime.now()
     playlist = Playlist(uri='an uri',
                         name='a name',
                         tracks=tracks,
                         last_modified=last_modified)
     new_playlist = playlist.copy(name='another name')
     self.assertEqual(new_playlist.uri, 'an uri')
     self.assertEqual(new_playlist.name, 'another name')
     self.assertEqual(list(new_playlist.tracks), tracks)
     self.assertEqual(new_playlist.last_modified, last_modified)
Exemplo n.º 8
0
    def test_listplaylistinfo(self):
        self.backend.playlists.playlists = [
            Playlist(name='name',
                     uri='dummy:name',
                     tracks=[Track(uri='dummy:a')])
        ]

        self.sendRequest('listplaylistinfo "name"')
        self.assertInResponse('file: dummy:a')
        self.assertInResponse('Track: 0')
        self.assertNotInResponse('Pos: 0')
        self.assertInResponse('OK')
Exemplo n.º 9
0
 def test_with_new_uri(self):
     tracks = [Track()]
     last_modified = 1390942873000
     playlist = Playlist(uri='an uri',
                         name='a name',
                         tracks=tracks,
                         last_modified=last_modified)
     new_playlist = playlist.copy(uri='another uri')
     self.assertEqual(new_playlist.uri, 'another uri')
     self.assertEqual(new_playlist.name, 'a name')
     self.assertEqual(list(new_playlist.tracks), tracks)
     self.assertEqual(new_playlist.last_modified, last_modified)
Exemplo n.º 10
0
    def test(self):
        self.backend.library.dummy_browse_result = {
            'dummy:/': [Ref.playlist(name='Top 100 tracks', uri='dummy:/1')],
        }
        self.backend.playlists.set_dummy_playlists([
            Playlist(name='Top 100 tracks', uri='dummy:/1', last_modified=123),
        ])

        response1 = self.send_request('lsinfo "/"')
        self.send_request('lsinfo "/dummy"')

        response2 = self.send_request('lsinfo "/"')
        self.assertEqual(response1, response2)
Exemplo n.º 11
0
    def test_playlistadd(self):
        tracks = [
            Track(uri="dummy:a"),
            Track(uri="dummy:b"),
        ]
        self.backend.library.dummy_library = tracks
        self.backend.playlists.set_dummy_playlists(
            [Playlist(name="name", uri="dummy:a1", tracks=[tracks[0]])])

        self.send_request('playlistadd "name" "dummy:b"')

        self.assertInResponse("OK")
        assert 2 == len(self.backend.playlists.get_items("dummy:a1").get())
Exemplo n.º 12
0
    def test(self, last_modified_mock):
        last_modified_mock.return_value = "2015-08-05T22:51:06Z"
        self.backend.library.dummy_browse_result = {
            "dummy:/": [Ref.playlist(name="Top 100 tracks", uri="dummy:/1")],
        }
        self.backend.playlists.set_dummy_playlists(
            [Playlist(name="Top 100 tracks", uri="dummy:/1")])

        response1 = self.send_request('lsinfo "/"')
        self.send_request('lsinfo "/dummy"')

        response2 = self.send_request('lsinfo "/"')
        assert response1 == response2
Exemplo n.º 13
0
    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 "/"')
        assert response.index("directory: dummy") < response.index(
            "playlist: a")
Exemplo n.º 14
0
 def test_with_new_tracks(self):
     tracks = [Track()]
     last_modified = datetime.datetime.now()
     playlist = Playlist(uri=u'an uri',
                         name=u'a name',
                         tracks=tracks,
                         last_modified=last_modified)
     new_tracks = [Track(), Track()]
     new_playlist = playlist.copy(tracks=new_tracks)
     self.assertEqual(new_playlist.uri, u'an uri')
     self.assertEqual(new_playlist.name, u'a name')
     self.assertEqual(list(new_playlist.tracks), new_tracks)
     self.assertEqual(new_playlist.last_modified, last_modified)
Exemplo n.º 15
0
    def test_playlistdelete(self):
        tracks = [
            Track(uri="dummy:a"),
            Track(uri="dummy:b"),
            Track(uri="dummy:c"),
        ]  # len() == 3
        self.backend.playlists.set_dummy_playlists(
            [Playlist(name="namé", uri="dummy:a1", tracks=tracks)])

        self.send_request('playlistdelete "namé" "2"')

        self.assertInResponse("OK")
        assert 2 == len(self.backend.playlists.get_items("dummy:a1").get())
Exemplo n.º 16
0
    def setUp(self):  # noqa: N802
        self.plr1a = Ref.playlist(name='A', uri='dummy1:pl:a')
        self.plr1b = Ref.playlist(name='B', uri='dummy1:pl:b')
        self.plr2a = Ref.playlist(name='A', uri='dummy2:pl:a')
        self.plr2b = Ref.playlist(name='B', uri='dummy2:pl:b')

        self.pl1a = Playlist(name='A', tracks=[Track(uri='dummy1:t:a')])
        self.pl1b = Playlist(name='B', tracks=[Track(uri='dummy1:t:b')])
        self.pl2a = Playlist(name='A', tracks=[Track(uri='dummy2:t:a')])
        self.pl2b = Playlist(name='B', tracks=[Track(uri='dummy2:t:b')])

        self.sp1 = mock.Mock(spec=backend.PlaylistsProvider)
        self.sp1.as_list.return_value.get.return_value = [
            self.plr1a, self.plr1b]
        self.sp1.lookup.return_value.get.side_effect = [self.pl1a, self.pl1b]

        self.sp2 = mock.Mock(spec=backend.PlaylistsProvider)
        self.sp2.as_list.return_value.get.return_value = [
            self.plr2a, self.plr2b]
        self.sp2.lookup.return_value.get.side_effect = [self.pl2a, self.pl2b]

        self.backend1 = mock.Mock()
        self.backend1.actor_ref.actor_class.__name__ = 'Backend1'
        self.backend1.uri_schemes.get.return_value = ['dummy1']
        self.backend1.playlists = self.sp1

        self.backend2 = mock.Mock()
        self.backend2.actor_ref.actor_class.__name__ = 'Backend2'
        self.backend2.uri_schemes.get.return_value = ['dummy2']
        self.backend2.playlists = self.sp2

        # A backend without the optional playlists provider
        self.backend3 = mock.Mock()
        self.backend3.uri_schemes.get.return_value = ['dummy3']
        self.backend3.has_playlists().get.return_value = False
        self.backend3.playlists = None

        self.core = core.Core(mixer=None, backends=[
            self.backend3, self.backend1, self.backend2])
Exemplo n.º 17
0
    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'))
Exemplo n.º 18
0
    def test_playlistdelete(self):
        tracks = [
            Track(uri='dummy:a'),
            Track(uri='dummy:b'),
            Track(uri='dummy:c'),
        ]  # len() == 3
        self.backend.playlists.set_dummy_playlists(
            [Playlist(name='name', uri='dummy:a1', tracks=tracks)])

        self.send_request('playlistdelete "name" "2"')

        self.assertInResponse('OK')
        self.assertEqual(
            2, len(self.backend.playlists.get_items('dummy:a1').get()))
Exemplo n.º 19
0
    def test_playlistadd(self):
        tracks = [
            Track(uri='dummy:a'),
            Track(uri='dummy:b'),
        ]
        self.backend.library.dummy_library = tracks
        self.backend.playlists.set_dummy_playlists(
            [Playlist(name='name', uri='dummy:a1', tracks=[tracks[0]])])

        self.send_request('playlistadd "name" "dummy:b"')

        self.assertInResponse('OK')
        self.assertEqual(
            2, len(self.backend.playlists.get_items('dummy:a1').get()))
Exemplo n.º 20
0
    def test_playlistmove_save_fails(self):
        tracks = [
            Track(uri="dummy:a"),
            Track(uri="dummy:b"),
            Track(uri="dummy:c"),  # this one is getting moved to top
        ]
        self.backend.playlists.set_dummy_playlists(
            [Playlist(name="name", uri="dummy:a1", tracks=tracks)])
        self.backend.playlists.set_allow_save(False)

        self.send_request('playlistmove "name" "2" "0"')

        self.assertInResponse("ACK [0@0] {playlistmove} Backend with "
                              'scheme "dummy" failed to save playlist')
Exemplo n.º 21
0
 def get_user_playlists(self):
     results = self.api.getPlaylists().get('playlists')
     if results is u'':
         return []
     else:
         results = makelist(
             unescapeobj(
                 self.api.getPlaylists().get('playlists').get('playlist')))
         return [
             Playlist(uri=u'subsonic://%s' % playlist.get('id'),
                      name='User Playlist: %s' %
                      self.fix_playlist_name(playlist.get('name')))
             for playlist in results
         ]
Exemplo n.º 22
0
    def test_playlistmove(self):
        tracks = [
            Track(uri="dummy:a"),
            Track(uri="dummy:b"),
            Track(uri="dummy:c"),  # this one is getting moved to top
        ]
        self.backend.playlists.set_dummy_playlists(
            [Playlist(name="namé", uri="dummy:a1", tracks=tracks)])

        self.send_request('playlistmove "namé" "2" "0"')

        self.assertInResponse("OK")
        assert ("dummy:c" == self.backend.playlists.get_items(
            "dummy:a1").get()[0].uri)
Exemplo n.º 23
0
 def test_with_new_name(self):
     tracks = [Track()]
     last_modified = 1390942873000
     playlist = Playlist(
         uri="an uri",
         name="a name",
         tracks=tracks,
         last_modified=last_modified,
     )
     new_playlist = playlist.replace(name="another name")
     assert new_playlist.uri == "an uri"
     assert new_playlist.name == "another name"
     assert list(new_playlist.tracks) == tracks
     assert new_playlist.last_modified == last_modified
Exemplo n.º 24
0
    def test_playlistdelete_save_fails(self):
        tracks = [
            Track(uri="dummy:a"),
            Track(uri="dummy:b"),
            Track(uri="dummy:c"),
        ]  # len() == 3
        self.backend.playlists.set_dummy_playlists(
            [Playlist(name="name", uri="dummy:a1", tracks=tracks)])
        self.backend.playlists.set_allow_save(False)

        self.send_request('playlistdelete "name" "2"')

        self.assertInResponse("ACK [0@0] {playlistdelete} Backend with "
                              'scheme "dummy" failed to save playlist')
Exemplo n.º 25
0
    def test_listplaylistinfo_without_quotes(self):
        tracks = [
            Track(uri="dummy:a"),
        ]
        self.backend.library.dummy_library = tracks
        self.backend.playlists.set_dummy_playlists(
            [Playlist(name="name", uri="dummy:name", tracks=tracks)])

        self.send_request("listplaylistinfo name")

        self.assertInResponse("file: dummy:a")
        self.assertNotInResponse("Track: 0")
        self.assertNotInResponse("Pos: 0")
        self.assertInResponse("OK")
Exemplo n.º 26
0
    def test(self, last_modified_mock):
        last_modified_mock.return_value = '2015-08-05T22:51:06Z'
        self.backend.library.dummy_browse_result = {
            'dummy:/': [Ref.playlist(name='Top 100 tracks', uri='dummy:/1')],
        }
        self.backend.playlists.set_dummy_playlists([
            Playlist(name='Top 100 tracks', uri='dummy:/1'),
        ])

        response1 = self.send_request('lsinfo "/"')
        self.send_request('lsinfo "/dummy"')

        response2 = self.send_request('lsinfo "/"')
        self.assertEqual(response1, response2)
Exemplo n.º 27
0
    def refresh(self):
        playl = []
        playl.append(
            self.backend.session.get_playlist(
                'ccba4c72-6aaf-43db-a46f-7f0cc579362d'))
        playl.append(
            self.backend.session.get_playlist(
                '0c84fe6a-4cf1-425a-9598-f09eb377738b'))
        playl.append(
            self.backend.session.get_playlist(
                '5d5b6916-3201-4293-ac8d-e204852c90f8'))
        #playl.append(self.backend.session.get_playlist('14cb2e61-bd41-4aab-a03a-33b2d9a65181'))
        #playl.append(self.backend.session.get_playlist('895a801a-eb62-4466-b811-6043c148fb98'))
        playlists = []

        tracks = []
        logger.info(u'Trying to load wimp playlists')
        # load user playlists
        #logger.debug(u'Playlists fetched: ')

        for playlist in self.backend.session.get_all_playlists():
            #for playlist in playl:
            tracks = []
            logger.debug(u'PlaylistId=%s' % playlist.id)
            for track in self.backend.session.get_playlist_tracks(playlist.id):
                if self.backend.library.lookup('wimpy:track:' + str(track.id)):

                    tracks += self.backend.library.lookup('wimpy:track:' +
                                                          str(track.id))
                    logger.debug(u'Track exists: %s' % track)
                else:
                    logger.debug(u'Track does not exist, adding: %s' %
                                 track.name)
                    self.backend.library._to_mopidy_track(track)
                    tracks += self.backend.library.lookup('wimpy:track:' +
                                                          str(track.id))

            logger.debug(u'tracks=%s' % tracks)
            playlist = Playlist(uri='wimpy:playlist:' + playlist.id,
                                name=playlist.name,
                                tracks=tracks)
            #playlist = Playlist(uri='wimp:playlist:' + playlist.id)

            playlists.append(playlist)
            self.playlists = playlists
            backend.BackendListener.send('playlists_loaded')
        logger.info(u'Loaded %s playlist from wimp' % len(playlists))
        self.playlists = playlists
        backend.BackendListener.send('playlists_loaded')
Exemplo n.º 28
0
    def refresh(self):
        playlists = {}

        encoding = sys.getfilesystemencoding()
        for path in glob.glob(os.path.join(self._playlists_dir, b'*.m3u*')):
            relpath = os.path.basename(path)
            uri = translator.path_to_playlist_uri(relpath)
            name = os.path.splitext(relpath)[0].decode(encoding, 'replace')
            tracks = translator.parse_m3u(path)
            playlists[uri] = Playlist(uri=uri, name=name, tracks=tracks)

        self._playlists = playlists

        logger.info('Loaded %d M3U playlists from %s', len(playlists),
                    self._playlists_dir)
Exemplo n.º 29
0
    def test_playlistmove(self):
        tracks = [
            Track(uri='dummy:a'),
            Track(uri='dummy:b'),
            Track(uri='dummy:c')  # this one is getting moved to top
        ]
        self.backend.playlists.set_dummy_playlists(
            [Playlist(name='name', uri='dummy:a1', tracks=tracks)])

        self.send_request('playlistmove "name" "2" "0"')

        self.assertInResponse('OK')
        self.assertEqual(
            "dummy:c",
            self.backend.playlists.get_items('dummy:a1').get()[0].uri)
Exemplo n.º 30
0
    def test_load_with_range_loads_part_of_playlist(self):
        self.core.tracklist.add([Track(uri='a'), Track(uri='b')])
        self.assertEqual(len(self.core.tracklist.tracks.get()), 2)
        self.backend.playlists.playlists = [
            Playlist(name='A-list', uri='dummy:A-list', tracks=[
                Track(uri='c'), Track(uri='d'), Track(uri='e')])]

        self.sendRequest('load "A-list" "1:2"')

        tracks = self.core.tracklist.tracks.get()
        self.assertEqual(3, len(tracks))
        self.assertEqual('a', tracks[0].uri)
        self.assertEqual('b', tracks[1].uri)
        self.assertEqual('d', tracks[2].uri)
        self.assertInResponse('OK')