mpd: Make mpd warnings safe with respect to tracklist.add(tracks=...)
This commit is contained in:
parent
f7399c1849
commit
c85689edad
@ -26,18 +26,17 @@ def add(context, uri):
|
||||
return
|
||||
|
||||
try:
|
||||
tracks = []
|
||||
for path, lookup_future in context.browse(uri):
|
||||
if lookup_future:
|
||||
for result in lookup_future.get().values():
|
||||
tracks.extend(result)
|
||||
uris = []
|
||||
for path, ref in context.browse(uri, lookup=False):
|
||||
if ref:
|
||||
uris.append(ref.uri)
|
||||
except exceptions.MpdNoExistError as e:
|
||||
e.message = 'directory or file not found'
|
||||
raise
|
||||
|
||||
if not tracks:
|
||||
if not uris:
|
||||
raise exceptions.MpdNoExistError('directory or file not found')
|
||||
context.core.tracklist.add(tracks=tracks)
|
||||
context.core.tracklist.add(uris=uris).get()
|
||||
|
||||
|
||||
@protocol.commands.add('addid', songpos=protocol.UINT)
|
||||
@ -351,8 +350,13 @@ def swap(context, songpos1, songpos2):
|
||||
tracks.insert(songpos1, song2)
|
||||
del tracks[songpos2]
|
||||
tracks.insert(songpos2, song1)
|
||||
|
||||
# TODO: do we need a tracklist.replace()
|
||||
context.core.tracklist.clear()
|
||||
context.core.tracklist.add(tracks)
|
||||
|
||||
with warnings.catch_warnings():
|
||||
warnings.filterwarnings('ignore', 'tracklist.add.*"tracks".*')
|
||||
context.core.tracklist.add(tracks=tracks).get()
|
||||
|
||||
|
||||
@protocol.commands.add('swapid', tlid1=protocol.UINT, tlid2=protocol.UINT)
|
||||
|
||||
@ -2,6 +2,7 @@ from __future__ import absolute_import, unicode_literals
|
||||
|
||||
import functools
|
||||
import itertools
|
||||
import warnings
|
||||
|
||||
from mopidy.models import Track
|
||||
from mopidy.mpd import exceptions, protocol, translator
|
||||
@ -168,8 +169,14 @@ def findadd(context, *args):
|
||||
query = _query_from_mpd_search_parameters(args, _SEARCH_MAPPING)
|
||||
except ValueError:
|
||||
return
|
||||
|
||||
results = context.core.library.search(query=query, exact=True).get()
|
||||
context.core.tracklist.add(_get_tracks(results))
|
||||
|
||||
with warnings.catch_warnings():
|
||||
# TODO: for now just use tracks as other wise we have to lookup the
|
||||
# tracks we just got from the search.
|
||||
warnings.filterwarnings('ignore', 'tracklist.add.*"tracks" argument.*')
|
||||
context.core.tracklist.add(tracks=_get_tracks(results)).get()
|
||||
|
||||
|
||||
@protocol.commands.add('list')
|
||||
@ -437,8 +444,14 @@ def searchadd(context, *args):
|
||||
query = _query_from_mpd_search_parameters(args, _SEARCH_MAPPING)
|
||||
except ValueError:
|
||||
return
|
||||
|
||||
results = context.core.library.search(query).get()
|
||||
context.core.tracklist.add(_get_tracks(results))
|
||||
|
||||
with warnings.catch_warnings():
|
||||
# TODO: for now just use tracks as other wise we have to lookup the
|
||||
# tracks we just got from the search.
|
||||
warnings.filterwarnings('ignore', 'tracklist.add.*"tracks".*')
|
||||
context.core.tracklist.add(_get_tracks(results)).get()
|
||||
|
||||
|
||||
@protocol.commands.add('searchaddpl')
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
from __future__ import absolute_import, division, unicode_literals
|
||||
|
||||
import datetime
|
||||
import warnings
|
||||
|
||||
from mopidy.mpd import exceptions, protocol, translator
|
||||
|
||||
@ -127,7 +128,10 @@ def load(context, name, playlist_slice=slice(0, None)):
|
||||
playlist = uri is not None and context.core.playlists.lookup(uri).get()
|
||||
if not playlist:
|
||||
raise exceptions.MpdNoExistError('No such playlist')
|
||||
context.core.tracklist.add(playlist.tracks[playlist_slice])
|
||||
|
||||
with warnings.catch_warnings():
|
||||
warnings.filterwarnings('ignore', 'tracklist.add.*"tracks".*')
|
||||
context.core.tracklist.add(playlist.tracks[playlist_slice]).get()
|
||||
|
||||
|
||||
@protocol.commands.add('playlistadd')
|
||||
|
||||
@ -7,6 +7,8 @@ from mopidy.mpd.protocol import music_db
|
||||
|
||||
from tests.mpd import protocol
|
||||
|
||||
# TODO: split into more modules for faster parallel tests?
|
||||
|
||||
|
||||
class QueryFromMpdSearchFormatTest(unittest.TestCase):
|
||||
def test_dates_are_extracted(self):
|
||||
@ -32,6 +34,8 @@ class QueryFromMpdListFormatTest(unittest.TestCase):
|
||||
pass # TODO
|
||||
|
||||
|
||||
# TODO: why isn't core.playlists.filter getting deprecation warnings?
|
||||
|
||||
class MusicDatabaseHandlerTest(protocol.BaseTestCase):
|
||||
def test_count(self):
|
||||
self.send_request('count "artist" "needle"')
|
||||
|
||||
@ -18,14 +18,17 @@ class IssueGH17RegressionTest(protocol.BaseTestCase):
|
||||
- Press next until you get to the unplayable track
|
||||
"""
|
||||
def test(self):
|
||||
self.core.tracklist.add([
|
||||
tracks = [
|
||||
Track(uri='dummy:a'),
|
||||
Track(uri='dummy:b'),
|
||||
Track(uri='dummy:error'),
|
||||
Track(uri='dummy:d'),
|
||||
Track(uri='dummy:e'),
|
||||
Track(uri='dummy:f'),
|
||||
])
|
||||
]
|
||||
self.backend.library.dummy_library = tracks
|
||||
self.core.tracklist.add(uris=[t.uri for t in tracks]).get()
|
||||
|
||||
random.seed(1) # Playlist order: abcfde
|
||||
|
||||
self.send_request('play')
|
||||
@ -59,9 +62,13 @@ class IssueGH18RegressionTest(protocol.BaseTestCase):
|
||||
"""
|
||||
|
||||
def test(self):
|
||||
self.core.tracklist.add([
|
||||
tracks = [
|
||||
Track(uri='dummy:a'), Track(uri='dummy:b'), Track(uri='dummy:c'),
|
||||
Track(uri='dummy:d'), Track(uri='dummy:e'), Track(uri='dummy:f')])
|
||||
Track(uri='dummy:d'), Track(uri='dummy:e'), Track(uri='dummy:f'),
|
||||
]
|
||||
self.backend.library.dummy_library = tracks
|
||||
self.core.tracklist.add(uris=[t.uri for t in tracks]).get()
|
||||
|
||||
random.seed(1)
|
||||
|
||||
self.send_request('play')
|
||||
@ -95,9 +102,13 @@ class IssueGH22RegressionTest(protocol.BaseTestCase):
|
||||
"""
|
||||
|
||||
def test(self):
|
||||
self.core.tracklist.add([
|
||||
tracks = [
|
||||
Track(uri='dummy:a'), Track(uri='dummy:b'), Track(uri='dummy:c'),
|
||||
Track(uri='dummy:d'), Track(uri='dummy:e'), Track(uri='dummy:f')])
|
||||
Track(uri='dummy:d'), Track(uri='dummy:e'), Track(uri='dummy:f'),
|
||||
]
|
||||
self.backend.library.dummy_library = tracks
|
||||
self.core.tracklist.add(uris=[t.uri for t in tracks]).get()
|
||||
|
||||
random.seed(1)
|
||||
|
||||
self.send_request('play')
|
||||
@ -124,9 +135,13 @@ class IssueGH69RegressionTest(protocol.BaseTestCase):
|
||||
|
||||
def test(self):
|
||||
self.core.playlists.create('foo')
|
||||
self.core.tracklist.add([
|
||||
|
||||
tracks = [
|
||||
Track(uri='dummy:a'), Track(uri='dummy:b'), Track(uri='dummy:c'),
|
||||
Track(uri='dummy:d'), Track(uri='dummy:e'), Track(uri='dummy:f')])
|
||||
Track(uri='dummy:d'), Track(uri='dummy:e'), Track(uri='dummy:f'),
|
||||
]
|
||||
self.backend.library.dummy_library = tracks
|
||||
self.core.tracklist.add(uris=[t.uri for t in tracks]).get()
|
||||
|
||||
self.send_request('play')
|
||||
self.send_request('stop')
|
||||
|
||||
@ -130,54 +130,78 @@ class PlaylistsHandlerTest(protocol.BaseTestCase):
|
||||
self.assertInResponse('OK')
|
||||
|
||||
def test_load_appends_to_tracklist(self):
|
||||
self.core.tracklist.add([Track(uri='a'), Track(uri='b')])
|
||||
tracks = [
|
||||
Track(uri='dummy:a'),
|
||||
Track(uri='dummy:b'),
|
||||
Track(uri='dummy:c'),
|
||||
Track(uri='dummy:d'),
|
||||
Track(uri='dummy:e'),
|
||||
]
|
||||
self.backend.library.dummy_library = tracks
|
||||
self.core.tracklist.add(uris=['dummy:a', 'dummy:b']).get()
|
||||
|
||||
self.assertEqual(len(self.core.tracklist.tracks.get()), 2)
|
||||
self.backend.playlists.set_dummy_playlists([
|
||||
Playlist(name='A-list', uri='dummy:A-list', tracks=[
|
||||
Track(uri='c'), Track(uri='d'), Track(uri='e')])])
|
||||
Playlist(name='A-list', uri='dummy:A-list', tracks=tracks[2:])])
|
||||
|
||||
self.send_request('load "A-list"')
|
||||
|
||||
tracks = self.core.tracklist.tracks.get()
|
||||
self.assertEqual(5, len(tracks))
|
||||
self.assertEqual('a', tracks[0].uri)
|
||||
self.assertEqual('b', tracks[1].uri)
|
||||
self.assertEqual('c', tracks[2].uri)
|
||||
self.assertEqual('d', tracks[3].uri)
|
||||
self.assertEqual('e', tracks[4].uri)
|
||||
self.assertEqual('dummy:a', tracks[0].uri)
|
||||
self.assertEqual('dummy:b', tracks[1].uri)
|
||||
self.assertEqual('dummy:c', tracks[2].uri)
|
||||
self.assertEqual('dummy:d', tracks[3].uri)
|
||||
self.assertEqual('dummy:e', tracks[4].uri)
|
||||
self.assertInResponse('OK')
|
||||
|
||||
def test_load_with_range_loads_part_of_playlist(self):
|
||||
self.core.tracklist.add([Track(uri='a'), Track(uri='b')])
|
||||
tracks = [
|
||||
Track(uri='dummy:a'),
|
||||
Track(uri='dummy:b'),
|
||||
Track(uri='dummy:c'),
|
||||
Track(uri='dummy:d'),
|
||||
Track(uri='dummy:e'),
|
||||
]
|
||||
self.backend.library.dummy_library = tracks
|
||||
self.core.tracklist.add(uris=['dummy:a', 'dummy:b']).get()
|
||||
|
||||
self.assertEqual(len(self.core.tracklist.tracks.get()), 2)
|
||||
self.backend.playlists.set_dummy_playlists([
|
||||
Playlist(name='A-list', uri='dummy:A-list', tracks=[
|
||||
Track(uri='c'), Track(uri='d'), Track(uri='e')])])
|
||||
Playlist(name='A-list', uri='dummy:A-list', tracks=tracks[2:])])
|
||||
|
||||
self.send_request('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.assertEqual('dummy:a', tracks[0].uri)
|
||||
self.assertEqual('dummy:b', tracks[1].uri)
|
||||
self.assertEqual('dummy:d', tracks[2].uri)
|
||||
self.assertInResponse('OK')
|
||||
|
||||
def test_load_with_range_without_end_loads_rest_of_playlist(self):
|
||||
self.core.tracklist.add([Track(uri='a'), Track(uri='b')])
|
||||
tracks = [
|
||||
Track(uri='dummy:a'),
|
||||
Track(uri='dummy:b'),
|
||||
Track(uri='dummy:c'),
|
||||
Track(uri='dummy:d'),
|
||||
Track(uri='dummy:e'),
|
||||
]
|
||||
self.backend.library.dummy_library = tracks
|
||||
self.core.tracklist.add(uris=['dummy:a', 'dummy:b']).get()
|
||||
|
||||
self.assertEqual(len(self.core.tracklist.tracks.get()), 2)
|
||||
self.backend.playlists.set_dummy_playlists([
|
||||
Playlist(name='A-list', uri='dummy:A-list', tracks=[
|
||||
Track(uri='c'), Track(uri='d'), Track(uri='e')])])
|
||||
Playlist(name='A-list', uri='dummy:A-list', tracks=tracks[2:])])
|
||||
|
||||
self.send_request('load "A-list" "1:"')
|
||||
|
||||
tracks = self.core.tracklist.tracks.get()
|
||||
self.assertEqual(4, len(tracks))
|
||||
self.assertEqual('a', tracks[0].uri)
|
||||
self.assertEqual('b', tracks[1].uri)
|
||||
self.assertEqual('d', tracks[2].uri)
|
||||
self.assertEqual('e', tracks[3].uri)
|
||||
self.assertEqual('dummy:a', tracks[0].uri)
|
||||
self.assertEqual('dummy:b', tracks[1].uri)
|
||||
self.assertEqual('dummy:d', tracks[2].uri)
|
||||
self.assertEqual('dummy:e', tracks[3].uri)
|
||||
self.assertInResponse('OK')
|
||||
|
||||
def test_load_unknown_playlist_acks(self):
|
||||
|
||||
Loading…
Reference in New Issue
Block a user