Getting there many bits work

This commit is contained in:
Tim Bentley 2016-02-26 16:00:04 +00:00
parent 9eed19ee50
commit 5f5d69d4d2
5 changed files with 114 additions and 58 deletions

View File

@ -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

View File

@ -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)

View File

@ -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):
"""

View File

@ -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):
"""

View File

@ -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):
"""