diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index e846898b5..97f2f7eb5 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -157,7 +157,7 @@ class MainDisplay(OpenLPMixin, Display, RegistryProperties): # platforms. For OpenLP 2.0 keep it only for OS X to not cause any # regressions on other platforms. if is_macosx(): - window_flags = QtCore.Qt.FramelessWindowHint | QtCore.Qt.Window + window_flags = QtCore.Qt.FramelessWindowHint | QtCore.Qt.Window | QtCore.Qt.NoDropShadowWindowHint self.setWindowFlags(window_flags) self.setAttribute(QtCore.Qt.WA_DeleteOnClose) self.set_transparency(False) diff --git a/openlp/core/ui/media/mediacontroller.py b/openlp/core/ui/media/mediacontroller.py index 9b6b0979a..b778c68dd 100644 --- a/openlp/core/ui/media/mediacontroller.py +++ b/openlp/core/ui/media/mediacontroller.py @@ -297,7 +297,9 @@ class MediaController(RegistryMixin, OpenLPMixin, RegistryProperties): triggers=controller.send_to_plugins) controller.position_label = QtWidgets.QLabel() controller.position_label.setText(' 00:00 / 00:00') + controller.position_label.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter) controller.position_label.setToolTip(translate('OpenLP.SlideController', 'Video timer.')) + controller.position_label.setMinimumSize(90, 0) controller.position_label.setObjectName('position_label') controller.mediabar.add_toolbar_widget(controller.position_label) # Build the seek_slider. @@ -433,7 +435,7 @@ class MediaController(RegistryMixin, OpenLPMixin, RegistryProperties): log.debug('video mediatype: ' + str(controller.media_info.media_type)) # dont care about actual theme, set a black background if controller.is_live and not controller.media_info.is_background: - display.frame.evaluateJavaScript('show_video( "setBackBoard", null, null, null,"visible");') + display.frame.evaluateJavaScript('show_video("setBackBoard", null, null,"visible");') # now start playing - Preview is autoplay! autoplay = False # Preview requested @@ -766,6 +768,11 @@ class MediaController(RegistryMixin, OpenLPMixin, RegistryProperties): self.current_media_players[controller.controller_type].stop(display) self.current_media_players[controller.controller_type].set_visible(display, False) controller.seek_slider.setSliderPosition(0) + total_seconds = controller.media_info.length // 1000 + total_minutes = total_seconds // 60 + total_seconds %= 60 + controller.position_label.setText(' %02d:%02d / %02d:%02d' % + (0, 0, total_minutes, total_seconds)) controller.mediabar.actions['playbackPlay'].setVisible(True) controller.mediabar.actions['playbackStop'].setDisabled(True) controller.mediabar.actions['playbackPause'].setVisible(False) @@ -828,7 +835,7 @@ class MediaController(RegistryMixin, OpenLPMixin, RegistryProperties): display.override = {} self.current_media_players[controller.controller_type].reset(display) self.current_media_players[controller.controller_type].set_visible(display, False) - display.frame.evaluateJavaScript('show_video( "setBackBoard", null, null, null,"hidden");') + display.frame.evaluateJavaScript('show_video("setBackBoard", null, null, "hidden");') del self.current_media_players[controller.controller_type] def media_hide(self, msg): @@ -843,7 +850,7 @@ class MediaController(RegistryMixin, OpenLPMixin, RegistryProperties): display = self._define_display(self.live_controller) if self.live_controller.controller_type in self.current_media_players and \ self.current_media_players[self.live_controller.controller_type].get_live_state() == MediaState.Playing: - self.current_media_players[self.live_controller.controller_type].pause(display) + self.media_pause(display.controller) self.current_media_players[self.live_controller.controller_type].set_visible(display, False) def media_blank(self, msg): @@ -861,7 +868,7 @@ class MediaController(RegistryMixin, OpenLPMixin, RegistryProperties): display = self._define_display(self.live_controller) if self.live_controller.controller_type in self.current_media_players and \ self.current_media_players[self.live_controller.controller_type].get_live_state() == MediaState.Playing: - self.current_media_players[self.live_controller.controller_type].pause(display) + self.media_pause(display.controller) self.current_media_players[self.live_controller.controller_type].set_visible(display, False) def media_unblank(self, msg): @@ -879,7 +886,7 @@ class MediaController(RegistryMixin, OpenLPMixin, RegistryProperties): if self.live_controller.controller_type in self.current_media_players and \ self.current_media_players[self.live_controller.controller_type].get_live_state() != \ MediaState.Playing: - if self.current_media_players[self.live_controller.controller_type].play(display): + if self.media_play(display.controller): self.current_media_players[self.live_controller.controller_type].set_visible(display, True) # Start Timer for ui updates if not self.live_timer.isActive(): diff --git a/openlp/core/ui/media/systemplayer.py b/openlp/core/ui/media/systemplayer.py index 6209e218a..52ad1e749 100644 --- a/openlp/core/ui/media/systemplayer.py +++ b/openlp/core/ui/media/systemplayer.py @@ -258,7 +258,7 @@ class SystemPlayer(MediaPlayer): :param display: The display where the media is """ if display.media_player.state() == QtMultimedia.QMediaPlayer.PausedState and self.state != MediaState.Paused: - self.stop(display) + self.pause(display) controller = display.controller if controller.media_info.end_time > 0: if display.media_player.position() > controller.media_info.end_time: diff --git a/tests/functional/openlp_core_ui/test_maindisplay.py b/tests/functional/openlp_core_ui/test_maindisplay.py index e9ec825d2..8da2dbd55 100644 --- a/tests/functional/openlp_core_ui/test_maindisplay.py +++ b/tests/functional/openlp_core_ui/test_maindisplay.py @@ -154,9 +154,9 @@ class TestMainDisplay(TestCase, TestMixin): main_display = MainDisplay(display) # THEN: The window flags should be the same as those needed on Mac OS X. - self.assertEqual(QtCore.Qt.Window | QtCore.Qt.FramelessWindowHint, + self.assertEqual(QtCore.Qt.Window | QtCore.Qt.FramelessWindowHint | QtCore.Qt.NoDropShadowWindowHint, main_display.windowFlags(), - 'The window flags should be Qt.Window, and Qt.FramelessWindowHint.') + 'The window flags should be Qt.Window, Qt.FramelessWindowHint, and Qt.NoDropShadowWindowHint.') @skipUnless(is_macosx(), 'Can only run test on Mac OS X due to pyobjc dependency.') def test_macosx_display(self): diff --git a/tests/functional/openlp_core_ui_media/test_systemplayer.py b/tests/functional/openlp_core_ui_media/test_systemplayer.py index e62133a0c..396ae910e 100644 --- a/tests/functional/openlp_core_ui_media/test_systemplayer.py +++ b/tests/functional/openlp_core_ui_media/test_systemplayer.py @@ -402,7 +402,7 @@ class TestSystemPlayer(TestCase): """ # GIVEN: A SystemPlayer instance player = SystemPlayer(self) - player.state = MediaState.Playing + player.state = [MediaState.Playing, MediaState.Playing] mocked_display = MagicMock() mocked_display.media_player.state.return_value = QtMultimedia.QMediaPlayer.PausedState mocked_display.controller.media_info.end_time = 1 @@ -415,11 +415,11 @@ class TestSystemPlayer(TestCase): player.update_ui(mocked_display) # THEN: The UI is updated - expected_stop_calls = [call(mocked_display), call(mocked_display)] + expected_stop_calls = [call(mocked_display)] expected_position_calls = [call(), call()] expected_block_signals_calls = [call(True), call(False)] mocked_display.media_player.state.assert_called_once_with() - self.assertEqual(2, mocked_stop.call_count) + self.assertEqual(1, mocked_stop.call_count) self.assertEqual(expected_stop_calls, mocked_stop.call_args_list) self.assertEqual(2, mocked_display.media_player.position.call_count) self.assertEqual(expected_position_calls, mocked_display.media_player.position.call_args_list) @@ -442,11 +442,15 @@ class TestSystemPlayer(TestCase): # THEN: The css should be empty self.assertEqual('', result) - def test_get_info(self): + @patch('openlp.core.ui.media.systemplayer.QtMultimedia.QMediaPlayer') + def test_get_info(self, MockQMediaPlayer): """ Test the get_info() method of the SystemPlayer """ # GIVEN: A SystemPlayer instance + mocked_media_player = MagicMock() + mocked_media_player.supportedMimeTypes.return_value = [] + MockQMediaPlayer.return_value = mocked_media_player player = SystemPlayer(self) # WHEN: get_info() is called