forked from openlp/openlp
Getting there many bits work
This commit is contained in:
parent
9eed19ee50
commit
5f5d69d4d2
|
@ -205,53 +205,63 @@ class MediaController(RegistryMixin, OpenLPMixin, RegistryProperties):
|
|||
"""
|
||||
Check if there is a running Live media Player and do updating stuff (e.g. update the UI)
|
||||
"""
|
||||
self.tick(self.display_controllers[DisplayControllerType.Live])
|
||||
display = self._define_display(self.display_controllers[DisplayControllerType.Live])
|
||||
if len(self.current_media_players):
|
||||
self.current_media_players[DisplayControllerType.Live].resize(display)
|
||||
self.current_media_players[DisplayControllerType.Live].update_ui(display)
|
||||
if self.current_media_players[DisplayControllerType.Live].state is not MediaState.Playing:
|
||||
self.tick(self.display_controllers[DisplayControllerType.Live])
|
||||
if self.current_media_players[DisplayControllerType.Live].get_live_state() is not MediaState.Playing:
|
||||
self.live_timer.stop()
|
||||
else:
|
||||
self.live_timer.stop()
|
||||
self.media_stop(self.display_controllers[DisplayControllerType.Live])
|
||||
if self.display_controllers[DisplayControllerType.Live].media_info.loop_playback:
|
||||
self.media_play(self.display_controllers[DisplayControllerType.Live], True)
|
||||
|
||||
def media_state_preview(self):
|
||||
"""
|
||||
Check if there is a running Preview media Player and do updating stuff (e.g. update the UI)
|
||||
"""
|
||||
self.tick(self.display_controllers[DisplayControllerType.Preview])
|
||||
display = self._define_display(self.display_controllers[DisplayControllerType.Preview])
|
||||
if len(self.current_media_players):
|
||||
self.current_media_players[DisplayControllerType.Preview].resize(display)
|
||||
self.current_media_players[DisplayControllerType.Preview].update_ui(display)
|
||||
if self.current_media_players[DisplayControllerType.Preview].state is not MediaState.Playing:
|
||||
self.tick(self.display_controllers[DisplayControllerType.Preview])
|
||||
if self.current_media_players[DisplayControllerType.Preview].get_preview_state() is not MediaState.Playing:
|
||||
self.preview_timer.stop()
|
||||
|
||||
def media_state(self):
|
||||
"""
|
||||
Check if there is a running media Player and do updating stuff (e.g. update the UI)
|
||||
"""
|
||||
if not list(self.current_media_players.keys()):
|
||||
self.live_timer.stop()
|
||||
else:
|
||||
any_active = False
|
||||
for source in list(self.current_media_players.keys()):
|
||||
display = self._define_display(self.display_controllers[source])
|
||||
self.current_media_players[source].resize(display)
|
||||
self.current_media_players[source].update_ui(display)
|
||||
if self.current_media_players[source].state == MediaState.Playing:
|
||||
any_active = True
|
||||
print(source)
|
||||
self.tick(self.display_controllers[source])
|
||||
# There are still any active players - no need to stop live_timer.
|
||||
if any_active:
|
||||
return
|
||||
# no players are active anymore
|
||||
for source in list(self.current_media_players.keys()):
|
||||
if self.current_media_players[source].state != MediaState.Paused:
|
||||
display = self._define_display(self.display_controllers[source])
|
||||
display.controller.seek_slider.setSliderPosition(0)
|
||||
display.controller.mediabar.actions['playbackPlay'].setVisible(True)
|
||||
display.controller.mediabar.actions['playbackPause'].setVisible(False)
|
||||
self.live_timer.stop()
|
||||
print("A2")
|
||||
self.preview_timer.stop()
|
||||
self.media_stop(self.display_controllers[DisplayControllerType.Preview])
|
||||
if self.display_controllers[DisplayControllerType.Preview].media_info.loop_playback:
|
||||
self.media_play(self.display_controllers[DisplayControllerType.Preview], True)
|
||||
|
||||
# def media_state_preview(self):
|
||||
# """
|
||||
# Check if there is a running media preview Player and do updating stuff (e.g. update the UI)
|
||||
# """
|
||||
# if not list(self.current_media_players.keys()):
|
||||
# self.preview_timer.stop()
|
||||
# else:
|
||||
# any_active = False
|
||||
# for source in list(self.current_media_players.keys()):
|
||||
# display = self._define_display(self.display_controllers[source])
|
||||
# self.current_media_players[source].resize(display)
|
||||
# self.current_media_players[source].update_ui(display)
|
||||
# if self.current_media_players[source].get_preview_state() == MediaState.Playing:
|
||||
# any_active = True
|
||||
# self.tick(self.display_controllers[source])
|
||||
# # There are still any active players - no need to stop live_timer.
|
||||
# if any_active:
|
||||
# return
|
||||
# # no players are active anymore
|
||||
# for source in list(self.current_media_players.keys()):
|
||||
# if self.current_media_players[source].get_preview_state() != MediaState.Paused:
|
||||
# display = self._define_display(self.display_controllers[source])
|
||||
# display.controller.seek_slider.setSliderPosition(0)
|
||||
# display.controller.mediabar.actions['playbackPlay'].setVisible(True)
|
||||
# display.controller.mediabar.actions['playbackPause'].setVisible(False)
|
||||
# self.preview_timer.stop()
|
||||
|
||||
def get_media_display_css(self):
|
||||
"""
|
||||
|
@ -682,8 +692,12 @@ class MediaController(RegistryMixin, OpenLPMixin, RegistryProperties):
|
|||
:param controller: The Controller to be processed
|
||||
"""
|
||||
start_again = False
|
||||
print("D")
|
||||
print(controller.media_info.playing, controller.media_info.length)
|
||||
if controller.media_info.playing and controller.media_info.length > 0:
|
||||
print(controller.media_info.timer, controller.media_info.length)
|
||||
if controller.media_info.timer > controller.media_info.length:
|
||||
print("D1")
|
||||
self.media_stop(controller, True)
|
||||
if controller.media_info.loop_playback:
|
||||
start_again = True
|
||||
|
@ -697,6 +711,7 @@ class MediaController(RegistryMixin, OpenLPMixin, RegistryProperties):
|
|||
controller.position_label.setText(' %02d:%02d / %02d:%02d' %
|
||||
(minutes, seconds, total_minutes, total_seconds))
|
||||
if start_again:
|
||||
print("D2")
|
||||
self.media_play(controller, True)
|
||||
|
||||
def media_pause_msg(self, msg):
|
||||
|
@ -753,8 +768,10 @@ class MediaController(RegistryMixin, OpenLPMixin, RegistryProperties):
|
|||
:param controller: The controller that needs to be stopped
|
||||
:param looping_background: The background is looping so do not blank.
|
||||
"""
|
||||
print("E")
|
||||
display = self._define_display(controller)
|
||||
if controller.controller_type in self.current_media_players:
|
||||
print("E1")
|
||||
if not looping_background:
|
||||
display.frame.evaluateJavaScript('show_blank("black");')
|
||||
self.current_media_players[controller.controller_type].stop(display)
|
||||
|
@ -836,7 +853,7 @@ class MediaController(RegistryMixin, OpenLPMixin, RegistryProperties):
|
|||
return
|
||||
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].state == MediaState.Playing:
|
||||
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.current_media_players[self.live_controller.controller_type].set_visible(display, False)
|
||||
|
||||
|
@ -854,7 +871,7 @@ class MediaController(RegistryMixin, OpenLPMixin, RegistryProperties):
|
|||
Registry().execute('live_display_hide', hide_mode)
|
||||
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].state == MediaState.Playing:
|
||||
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.current_media_players[self.live_controller.controller_type].set_visible(display, False)
|
||||
|
||||
|
@ -871,7 +888,8 @@ class MediaController(RegistryMixin, OpenLPMixin, RegistryProperties):
|
|||
return
|
||||
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].state != MediaState.Playing:
|
||||
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):
|
||||
self.current_media_players[self.live_controller.controller_type].set_visible(display, True)
|
||||
# Start Timer for ui updates
|
||||
|
|
|
@ -41,7 +41,7 @@ class MediaPlayer(RegistryProperties):
|
|||
self.is_active = False
|
||||
self.can_background = False
|
||||
self.can_folder = False
|
||||
self.state = MediaState.Off
|
||||
self.state = {0: MediaState.Off, 1: MediaState.Off}
|
||||
self.has_own_widget = False
|
||||
self.audio_extensions_list = []
|
||||
self.video_extensions_list = []
|
||||
|
@ -167,3 +167,21 @@ class MediaPlayer(RegistryProperties):
|
|||
Returns Information about the player
|
||||
"""
|
||||
return ''
|
||||
|
||||
def get_live_state(self):
|
||||
return self.state[0]
|
||||
|
||||
def set_live_state(self, state):
|
||||
self.state[0] = state
|
||||
|
||||
def get_preview_state(self):
|
||||
return self.state[1]
|
||||
|
||||
def set_preview_state(self, state):
|
||||
self.state[1] = state
|
||||
|
||||
def set_state(self, state, display):
|
||||
if display.controller.is_live:
|
||||
self.set_live_state(state)
|
||||
else:
|
||||
self.set_preview_state(state)
|
||||
|
|
|
@ -149,15 +149,19 @@ class SystemPlayer(MediaPlayer):
|
|||
log.info('Play the current item')
|
||||
controller = display.controller
|
||||
start_time = 0
|
||||
if display.media_player.state() != QtMultimedia.QMediaPlayer.PausedState and \
|
||||
controller.media_info.start_time > 0:
|
||||
start_time = controller.media_info.start_time
|
||||
if display.controller.is_live:
|
||||
if self.get_live_state() != QtMultimedia.QMediaPlayer.PausedState and controller.media_info.start_time > 0:
|
||||
start_time = controller.media_info.start_time
|
||||
else:
|
||||
if self.get_preview_state() != QtMultimedia.QMediaPlayer.PausedState and \
|
||||
controller.media_info.start_time > 0:
|
||||
start_time = controller.media_info.start_time
|
||||
display.media_player.play()
|
||||
if start_time > 0:
|
||||
self.seek(display, controller.media_info.start_time * 1000)
|
||||
self.volume(display, controller.media_info.volume)
|
||||
display.media_player.durationChanged.connect(functools.partial(self.set_duration, controller))
|
||||
self.state = MediaState.Playing
|
||||
self.set_state(MediaState.Playing, display)
|
||||
display.video_widget.raise_()
|
||||
return True
|
||||
|
||||
|
@ -168,8 +172,12 @@ class SystemPlayer(MediaPlayer):
|
|||
:param display: The display where the media is
|
||||
"""
|
||||
display.media_player.pause()
|
||||
if display.media_player.state() == QtMultimedia.QMediaPlayer.PausedState:
|
||||
self.state = MediaState.Paused
|
||||
if display.controller.is_live:
|
||||
if self.get_live_state() == QtMultimedia.QMediaPlayer.PausedState:
|
||||
self.set_state(MediaState.Paused, display)
|
||||
else:
|
||||
if self.get_preview_state() == QtMultimedia.QMediaPlayer.PausedState:
|
||||
self.set_state(MediaState.Paused, display)
|
||||
|
||||
def stop(self, display):
|
||||
"""
|
||||
|
@ -182,7 +190,7 @@ class SystemPlayer(MediaPlayer):
|
|||
display.media_player.blockSignals(False)
|
||||
display.media_player.stop()
|
||||
self.set_visible(display, False)
|
||||
self.state = MediaState.Stopped
|
||||
self.set_state(MediaState.Stopped, display)
|
||||
|
||||
def volume(self, display, volume):
|
||||
"""
|
||||
|
|
|
@ -261,14 +261,23 @@ class VlcPlayer(MediaPlayer):
|
|||
controller = display.controller
|
||||
start_time = 0
|
||||
log.debug('vlc play')
|
||||
if self.state != MediaState.Paused and controller.media_info.start_time > 0:
|
||||
start_time = controller.media_info.start_time
|
||||
if display.controller.is_live:
|
||||
if self.get_live_state() != MediaState.Paused and controller.media_info.start_time > 0:
|
||||
start_time = controller.media_info.start_time
|
||||
else:
|
||||
if self.get_preview_state() != MediaState.Paused and controller.media_info.start_time > 0:
|
||||
start_time = controller.media_info.start_time
|
||||
threading.Thread(target=display.vlc_media_player.play).start()
|
||||
if not self.media_state_wait(display, vlc.State.Playing):
|
||||
return False
|
||||
if self.state != MediaState.Paused and controller.media_info.start_time > 0:
|
||||
log.debug('vlc play, start time set')
|
||||
start_time = controller.media_info.start_time
|
||||
if display.controller.is_live:
|
||||
if self.get_live_state() != MediaState.Paused and controller.media_info.start_time > 0:
|
||||
log.debug('vlc play, start time set')
|
||||
start_time = controller.media_info.start_time
|
||||
else:
|
||||
if self.get_preview_state() != MediaState.Paused and controller.media_info.start_time > 0:
|
||||
log.debug('vlc play, start time set')
|
||||
start_time = controller.media_info.start_time
|
||||
log.debug('mediatype: ' + str(controller.media_info.media_type))
|
||||
# Set tracks for the optical device
|
||||
if controller.media_info.media_type == MediaType.DVD:
|
||||
|
@ -293,7 +302,7 @@ class VlcPlayer(MediaPlayer):
|
|||
if start_time > 0 and display.vlc_media_player.is_seekable():
|
||||
display.vlc_media_player.set_time(int(start_time))
|
||||
controller.seek_slider.setMaximum(controller.media_info.length)
|
||||
self.state = MediaState.Playing
|
||||
self.set_state(MediaState.Playing, display)
|
||||
display.vlc_widget.raise_()
|
||||
return True
|
||||
|
||||
|
@ -309,7 +318,7 @@ class VlcPlayer(MediaPlayer):
|
|||
return
|
||||
display.vlc_media_player.pause()
|
||||
if self.media_state_wait(display, vlc.State.Paused):
|
||||
self.state = MediaState.Paused
|
||||
self.set_state(MediaState.Paused, display)
|
||||
|
||||
def stop(self, display):
|
||||
"""
|
||||
|
@ -319,7 +328,7 @@ class VlcPlayer(MediaPlayer):
|
|||
:return:
|
||||
"""
|
||||
threading.Thread(target=display.vlc_media_player.stop).start()
|
||||
self.state = MediaState.Stopped
|
||||
self.set_state(MediaState.Stopped, display)
|
||||
|
||||
def volume(self, display, vol):
|
||||
"""
|
||||
|
@ -353,7 +362,7 @@ class VlcPlayer(MediaPlayer):
|
|||
"""
|
||||
display.vlc_media_player.stop()
|
||||
display.vlc_widget.setVisible(False)
|
||||
self.state = MediaState.Off
|
||||
self.set_state(MediaState.Off, display)
|
||||
|
||||
def set_visible(self, display, status):
|
||||
"""
|
||||
|
|
|
@ -205,15 +205,18 @@ class WebkitPlayer(MediaPlayer):
|
|||
"""
|
||||
controller = display.controller
|
||||
display.web_loaded = True
|
||||
length = 0
|
||||
start_time = 0
|
||||
if self.state != MediaState.Paused and controller.media_info.start_time > 0:
|
||||
start_time = controller.media_info.start_time
|
||||
if display.controller.is_live:
|
||||
if self.get_live_state() != MediaState.Paused and controller.media_info.start_time > 0:
|
||||
start_time = controller.media_info.start_time
|
||||
else:
|
||||
if self.get_preview_state() != MediaState.Paused and controller.media_info.start_time > 0:
|
||||
start_time = controller.media_info.start_time
|
||||
self.set_visible(display, True)
|
||||
display.frame.evaluateJavaScript('show_video("play");')
|
||||
if start_time > 0:
|
||||
self.seek(display, controller.media_info.start_time * 1000)
|
||||
self.state = MediaState.Playing
|
||||
self.set_state(MediaState.Playing, display)
|
||||
display.web_view.raise_()
|
||||
return True
|
||||
|
||||
|
@ -224,7 +227,7 @@ class WebkitPlayer(MediaPlayer):
|
|||
:param display: The display to be updated.
|
||||
"""
|
||||
display.frame.evaluateJavaScript('show_video("pause");')
|
||||
self.state = MediaState.Paused
|
||||
self.set_state(MediaState.Paused, display)
|
||||
|
||||
def stop(self, display):
|
||||
"""
|
||||
|
@ -233,7 +236,7 @@ class WebkitPlayer(MediaPlayer):
|
|||
:param display: The display to be updated.
|
||||
"""
|
||||
display.frame.evaluateJavaScript('show_video("stop");')
|
||||
self.state = MediaState.Stopped
|
||||
self.set_state(MediaState.Stopped, display)
|
||||
|
||||
def volume(self, display, volume):
|
||||
"""
|
||||
|
@ -264,7 +267,7 @@ class WebkitPlayer(MediaPlayer):
|
|||
:param display: The display to be updated.
|
||||
"""
|
||||
display.frame.evaluateJavaScript('show_video("close");')
|
||||
self.state = MediaState.Off
|
||||
self.set_state(MediaState.Off, display)
|
||||
|
||||
def set_visible(self, display, visibility):
|
||||
"""
|
||||
|
|
Loading…
Reference in New Issue