Fix bug #1547964 by ignoring the exception (it's harmless)

Fixes: https://launchpad.net/bugs/1547964
This commit is contained in:
Raoul Snyman 2016-08-14 09:31:19 +02:00
parent 7d5a640a16
commit 33c5f7674e
2 changed files with 19 additions and 2 deletions

View File

@ -161,7 +161,13 @@ class SystemPlayer(MediaPlayer):
if start_time > 0:
self.seek(display, controller.media_info.start_time * 1000)
self.volume(display, controller.media_info.volume)
display.media_player.durationChanged.disconnect()
display.media_player.blockSignals(True)
try:
display.media_player.durationChanged.disconnect()
except TypeError:
# We get a type error if there are no slots attached to this signal, so ignore it
pass
display.media_player.blockSignals(False)
display.media_player.durationChanged.connect(functools.partial(self.set_duration, controller))
self.state = MediaState.Playing
display.video_widget.raise_()
@ -180,7 +186,11 @@ class SystemPlayer(MediaPlayer):
Stop the current media item
"""
display.media_player.blockSignals(True)
display.media_player.durationChanged.disconnect()
try:
display.media_player.durationChanged.disconnect()
except TypeError:
# We get a type error if there are no slots attached to this signal, so ignore it
pass
display.media_player.blockSignals(False)
display.media_player.stop()
self.set_visible(display, False)

View File

@ -193,6 +193,8 @@ class TestSystemPlayer(TestCase):
mocked_display.controller.media_info.start_time = 1
mocked_display.controller.media_info.volume = 1
mocked_display.media_player.state.return_value = QtMultimedia.QMediaPlayer.PlayingState
mocked_display.media_player.durationChanged.disconnect.side_effect = \
TypeError('disconnect() failed between \'durationChanged\' and all its connections')
# WHEN: play() is called
with patch.object(player, 'seek') as mocked_seek, \
@ -204,6 +206,8 @@ class TestSystemPlayer(TestCase):
mocked_display.media_player.play.assert_called_once_with()
mocked_seek.assert_called_once_with(mocked_display, 1000)
mocked_volume.assert_called_once_with(mocked_display, 1)
expected_block_signals_calls = [call(True), call(False)]
self.assertEqual(expected_block_signals_calls, mocked_display.media_player.blockSignals.call_args_list)
mocked_display.media_player.durationChanged.disconnect.assert_called_once_with()
mocked_display.media_player.durationChanged.connect.assert_called_once_with('function')
self.assertEqual(MediaState.Playing, player.state)
@ -240,6 +244,9 @@ class TestSystemPlayer(TestCase):
player.stop(mocked_display)
# THEN: The video is stopped
expected_block_signals_calls = [call(True), call(False)]
self.assertEqual(expected_block_signals_calls, mocked_display.media_player.blockSignals.call_args_list)
mocked_display.media_player.durationChanged.disconnect.assert_called_once_with()
mocked_display.media_player.stop.assert_called_once_with()
mocked_set_visible.assert_called_once_with(mocked_display, False)
self.assertEqual(MediaState.Stopped, player.state)