core: Protect against old clients that implement backend.play

This commit is contained in:
Thomas Adamcik 2015-03-22 23:54:37 +01:00
parent 5eebab6e18
commit a74bc24bdc
2 changed files with 19 additions and 2 deletions

View File

@ -312,8 +312,13 @@ class PlaybackController(object):
if backend:
backend.playback.prepare_change()
success = (backend.playback.change_track(tl_track.track).get() and
backend.playback.play().get())
try:
success = (
backend.playback.change_track(tl_track.track).get() and
backend.playback.play().get())
except TypeError:
logger.error('%s needs to be updated to work with this '
'version of Mopidy.', backend)
if success:
self.core.tracklist._mark_playing(tl_track)

View File

@ -650,3 +650,15 @@ class TestStream(unittest.TestCase):
self.replay_audio_events()
self.assertEqual(self.playback.get_stream_title(), None)
class CorePlaybackWithOldBackendTest(unittest.TestCase):
def test_type_error_from_old_backend_does_not_crash_core(self):
b = mock.Mock()
b.uri_schemes.get.return_value = ['dummy1']
b.playback = mock.Mock(spec=backend.PlaybackProvider)
b.playback.play.side_effect = TypeError
c = core.Core(mixer=None, backends=[b])
c.tracklist.add([Track(uri='dummy1:a', length=40000)])
c.playback.play() # No TypeError == test passed.