Now all the media players are looking better

This commit is contained in:
Raoul Snyman 2013-02-02 08:32:29 +02:00
parent c891edc40c
commit e25326512d
7 changed files with 253 additions and 57 deletions

View File

@ -26,6 +26,9 @@
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
"""
The :mod:`~openlp.core.ui.media` module contains classes and objects for media player integration.
"""
import logging
from openlp.core.lib import Settings
@ -34,6 +37,7 @@ from PyQt4 import QtCore
log = logging.getLogger(__name__)
class MediaState(object):
"""
An enumeration for possible States of the Media Player
@ -70,6 +74,7 @@ class MediaInfo(object):
end_time = 0
media_type = MediaType()
def get_media_players():
"""
This method extracts the configured media players and overridden player
@ -85,7 +90,7 @@ def get_media_players():
overridden_player = u'auto'
else:
overridden_player = u''
saved_players_list = saved_players.replace(u'[', u'').replace(u']',u'').split(u',')
saved_players_list = saved_players.replace(u'[', u'').replace(u']', u'').split(u',')
return saved_players_list, overridden_player
@ -108,3 +113,5 @@ def set_media_players(players_list, overridden_player=u'auto'):
from mediacontroller import MediaController
from playertab import PlayerTab
__all__ = [u'MediaController', u'PlayerTab']

View File

@ -26,7 +26,10 @@
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
"""
The :mod:`~openlp.core.ui.media.mediacontroller` module contains a base class for media components and other widgets
related to playing media, such as sliders.
"""
import logging
import os
import datetime
@ -41,11 +44,15 @@ from openlp.core.ui import DisplayControllerType
log = logging.getLogger(__name__)
class MediaSlider(QtGui.QSlider):
"""
Allows the mouse events of a slider to be overridden and extra functionality added
"""
def __init__(self, direction, manager, controller, parent=None):
"""
Constructor
"""
QtGui.QSlider.__init__(self, direction)
self.manager = manager
self.controller = controller
@ -55,7 +62,7 @@ class MediaSlider(QtGui.QSlider):
Override event to allow hover time to be displayed.
"""
timevalue = QtGui.QStyle.sliderValueFromPosition(self.minimum(), self.maximum(), event.x(), self.width())
self.setToolTip(u'%s' % datetime.timedelta(seconds=int(timevalue/1000)))
self.setToolTip(u'%s' % datetime.timedelta(seconds=int(timevalue / 1000)))
QtGui.QSlider.mouseMoveEvent(self, event)
def mousePressEvent(self, event):
@ -87,6 +94,9 @@ class MediaController(object):
"""
def __init__(self, parent):
"""
Constructor
"""
self.mainWindow = parent
Registry().register(u'media_controller', self)
self.mediaPlayers = {}
@ -96,7 +106,7 @@ class MediaController(object):
self.timer = QtCore.QTimer()
self.timer.setInterval(200)
# Signals
QtCore.QObject.connect(self.timer, QtCore.SIGNAL("timeout()"), self.media_state)
self.timer.timeout.connect(self.media_state)
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'playbackPlay'), self.media_play_msg)
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'playbackPause'), self.media_pause_msg)
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'playbackStop'), self.media_stop_msg)
@ -298,7 +308,6 @@ class MediaController(object):
QtCore.QObject.connect(controller.seekSlider, QtCore.SIGNAL(u'valueChanged(int)'), controller.sendToPlugins)
QtCore.QObject.connect(controller.volumeSlider, QtCore.SIGNAL(u'valueChanged(int)'), controller.sendToPlugins)
def setup_display(self, display, preview):
"""
After a new display is configured, all media related widget will be
@ -428,7 +437,7 @@ class MediaController(object):
``serviceItem``
The ServiceItem containing the details to be played.
"""
controller = self.displayControllers[DisplayControllerType.Plugin]
controller = self.displayControllers[DisplayControllerType.Plugin]
log.debug(u'media_length')
# stop running videos
self.media_reset(controller)
@ -500,8 +509,7 @@ class MediaController(object):
First element is the controller which should be used
"""
log.debug(u'media_play_msg')
self.media_play(msg[0],status)
self.media_play(msg[0], status)
def media_play(self, controller, status=True):
"""
@ -551,7 +559,7 @@ class MediaController(object):
First element is the controller which should be used
"""
log.debug(u'media_pause_msg')
self.media_pause( msg[0])
self.media_pause(msg[0])
def media_pause(self, controller):
"""
@ -716,6 +724,9 @@ class MediaController(object):
self.timer.start()
def finalise(self):
"""
Reset all the media controllers when OpenLP shuts down
"""
self.timer.stop()
for controller in self.displayControllers:
self.media_reset(self.displayControllers[controller])

View File

@ -26,9 +26,12 @@
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
"""
The :mod:`~openlp.core.ui.media.mediaplayer` module contains the MediaPlayer class.
"""
from openlp.core.ui.media import MediaState
class MediaPlayer(object):
"""
This is the base class media Player class to provide OpenLP with a
@ -36,6 +39,9 @@ class MediaPlayer(object):
"""
def __init__(self, parent, name=u'media_player'):
"""
Constructor
"""
self.parent = parent
self.name = name
self.available = self.check_available()

View File

@ -26,7 +26,9 @@
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
"""
The :mod:`~openlp.core.ui.media.phononplayer` contains the Phonon player component.
"""
import logging
import mimetypes
from datetime import datetime
@ -56,24 +58,25 @@ ADDITIONAL_EXT = {
u'video/x-matroska': [u'.mpv', u'.mkv'],
u'video/x-wmv': [u'.wmv'],
u'video/x-mpg': [u'.mpg'],
u'video/mpeg' : [u'.mp4', u'.mts', u'.mov'],
u'video/mpeg': [u'.mp4', u'.mts', u'.mov'],
u'video/x-ms-wmv': [u'.wmv']}
VIDEO_CSS = u"""
#videobackboard {
z-index:3;
background-color: %s;
background-color: %(bgcolor)s;
}
#video1 {
background-color: %s;
background-color: %(bgcolor)s;
z-index:4;
}
#video2 {
background-color: %s;
background-color: %(bgcolor)s;
z-index:4;
}
"""
class PhononPlayer(MediaPlayer):
"""
A specialised version of the MediaPlayer class, which provides a Phonon
@ -81,6 +84,9 @@ class PhononPlayer(MediaPlayer):
"""
def __init__(self, parent):
"""
Constructor
"""
MediaPlayer.__init__(self, parent, u'phonon')
self.original_name = u'Phonon'
self.display_name = u'&Phonon'
@ -94,13 +100,16 @@ class PhononPlayer(MediaPlayer):
elif mimetype.startswith(u'video/'):
self._addToList(self.video_extensions_list, mimetype)
def _addToList(self, list, mimetype):
def _addToList(self, mimetype_list, mimetype):
"""
Add mimetypes to the provided list
"""
# Add all extensions which mimetypes provides us for supported types.
extensions = mimetypes.guess_all_extensions(unicode(mimetype))
for extension in extensions:
ext = u'*%s' % extension
if ext not in list:
list.append(ext)
if ext not in mimetype_list:
mimetype_list.append(ext)
log.info(u'MediaPlugin: %s extensions: %s' % (mimetype, u' '.join(extensions)))
# Add extensions for this mimetype from self.additional_extensions.
# This hack clears mimetypes' and operating system's shortcomings
@ -108,12 +117,15 @@ class PhononPlayer(MediaPlayer):
if mimetype in self.additional_extensions.keys():
for extension in self.additional_extensions[mimetype]:
ext = u'*%s' % extension
if ext not in list:
list.append(ext)
if ext not in mimetype_list:
mimetype_list.append(ext)
log.info(u'MediaPlugin: %s additional extensions: %s' %
(mimetype, u' '.join(self.additional_extensions[mimetype])))
def setup(self, display):
"""
Set up the player widgets
"""
display.phononWidget = Phonon.VideoWidget(display)
display.phononWidget.resize(display.size())
display.mediaObject = Phonon.MediaObject(display)
@ -126,9 +138,15 @@ class PhononPlayer(MediaPlayer):
self.hasOwnWidget = True
def check_available(self):
"""
Check if the player is available
"""
return True
def load(self, display):
"""
Load a video into the display
"""
log.debug(u'load vid in Phonon Controller')
controller = display.controller
volume = controller.media_info.volume
@ -156,9 +174,15 @@ class PhononPlayer(MediaPlayer):
return True
def resize(self, display):
"""
Resize the display
"""
display.phononWidget.resize(display.size())
def play(self, display):
"""
Play the current media item
"""
controller = display.controller
start_time = 0
if display.mediaObject.state() != Phonon.PausedState and \
@ -177,25 +201,40 @@ class PhononPlayer(MediaPlayer):
return True
def pause(self, display):
"""
Pause the current media item
"""
display.mediaObject.pause()
if self.media_state_wait(display, Phonon.PausedState):
self.state = MediaState.Paused
def stop(self, display):
"""
Stop the current media item
"""
display.mediaObject.stop()
self.set_visible(display, False)
self.state = MediaState.Stopped
def volume(self, display, vol):
"""
Set the volume
"""
# 1.0 is the highest value
if display.hasAudio:
vol = float(vol) / float(100)
display.audio.setVolume(vol)
def seek(self, display, seekVal):
"""
Go to a particular point in the current media item
"""
display.mediaObject.seek(seekVal)
def reset(self, display):
"""
Reset the media player
"""
display.mediaObject.stop()
display.mediaObject.clearQueue()
self.set_visible(display, False)
@ -203,10 +242,16 @@ class PhononPlayer(MediaPlayer):
self.state = MediaState.Off
def set_visible(self, display, status):
"""
Set the visibility of the widget
"""
if self.hasOwnWidget:
display.phononWidget.setVisible(status)
def update_ui(self, display):
"""
Update the UI
"""
if display.mediaObject.state() == Phonon.PausedState and self.state != MediaState.Paused:
self.stop(display)
controller = display.controller
@ -224,9 +269,12 @@ class PhononPlayer(MediaPlayer):
Add css style sheets to htmlbuilder
"""
background = QtGui.QColor(Settings().value(u'players/background color')).name()
return VIDEO_CSS % (background,background,background)
return VIDEO_CSS % {u'bgcolor': background}
def get_info(self):
"""
Return some info about this player
"""
return(translate('Media.player', 'Phonon is a media player which '
'interacts with the operating system to provide media capabilities.') +
u'<br/> <strong>' + translate('Media.player', 'Audio') +

View File

@ -26,18 +26,24 @@
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
"""
The :mod:`~openlp.core.ui.media.playertab` module holds the configuration tab for the media stuff.
"""
from PyQt4 import QtCore, QtGui
from openlp.core.lib import SettingsTab, translate, Receiver, Settings, UiStrings
from openlp.core.lib.ui import create_button
from openlp.core.ui.media import get_media_players, set_media_players
class MediaQCheckBox(QtGui.QCheckBox):
"""
MediaQCheckBox adds an extra property, playerName to the QCheckBox class.
"""
def setPlayerName(self, name):
"""
Set the player name
"""
self.playerName = name
@ -46,6 +52,9 @@ class PlayerTab(SettingsTab):
MediaTab is the Media settings tab in the settings dialog.
"""
def __init__(self, parent, mainWindow):
"""
Constructor
"""
self.parent = parent
self.mainWindow = mainWindow
self.mediaPlayers = mainWindow.mediaController.mediaPlayers
@ -55,6 +64,9 @@ class PlayerTab(SettingsTab):
SettingsTab.__init__(self, parent, u'Players', player_translated)
def setupUi(self):
"""
Set up the UI
"""
self.setObjectName(u'MediaTab')
SettingsTab.setupUi(self)
self.bgColorGroupBox = QtGui.QGroupBox(self.leftColumn)
@ -116,6 +128,9 @@ class PlayerTab(SettingsTab):
self.onbackgroundColorButtonClicked)
def retranslateUi(self):
"""
Translate the UI on the fly
"""
self.mediaPlayerGroupBox.setTitle(translate('OpenLP.PlayerTab', 'Available Media Players'))
self.playerOrderGroupBox.setTitle(translate('OpenLP.PlayerTab', 'Player Search Order'))
self.bgColorGroupBox.setTitle(UiStrings().BackgroundColor)
@ -125,12 +140,18 @@ class PlayerTab(SettingsTab):
self.retranslatePlayers()
def onbackgroundColorButtonClicked(self):
"""
Set the background color
"""
new_color = QtGui.QColorDialog.getColor(QtGui.QColor(self.bg_color), self)
if new_color.isValid():
self.bg_color = new_color.name()
self.backgroundColorButton.setStyleSheet(u'background-color: %s' % self.bg_color)
def onPlayerCheckBoxChanged(self, check_state):
"""
Add or remove players depending on their status
"""
player = self.sender().playerName
if check_state == QtCore.Qt.Checked:
if player not in self.usedPlayers:
@ -141,6 +162,9 @@ class PlayerTab(SettingsTab):
self.updatePlayerList()
def updatePlayerList(self):
"""
Update the list of media players
"""
self.playerOrderlistWidget.clear()
for player in self.usedPlayers:
if player in self.playerCheckBoxes.keys():
@ -152,6 +176,9 @@ class PlayerTab(SettingsTab):
self.playerOrderlistWidget.addItem(self.mediaPlayers[unicode(player)].original_name)
def onUpButtonClicked(self):
"""
Move a media player up in the order
"""
row = self.playerOrderlistWidget.currentRow()
if row <= 0:
return
@ -161,6 +188,9 @@ class PlayerTab(SettingsTab):
self.usedPlayers.insert(row - 1, self.usedPlayers.pop(row))
def onDownButtonClicked(self):
"""
Move a media player down in the order
"""
row = self.playerOrderlistWidget.currentRow()
if row == -1 or row > self.playerOrderlistWidget.count() - 1:
return
@ -170,6 +200,9 @@ class PlayerTab(SettingsTab):
self.usedPlayers.insert(row + 1, self.usedPlayers.pop(row))
def load(self):
"""
Load the settings
"""
if self.savedUsedPlayers:
self.usedPlayers = self.savedUsedPlayers
self.usedPlayers = get_media_players()[0]
@ -183,6 +216,9 @@ class PlayerTab(SettingsTab):
self.backgroundColorButton.setStyleSheet(u'background-color: %s' % self.bg_color)
def save(self):
"""
Save the settings
"""
player_string_changed = False
settings = Settings()
settings.beginGroup(self.settingsSection)
@ -211,7 +247,7 @@ class PlayerTab(SettingsTab):
checkbox.setToolTip(player.get_info())
checkbox.setPlayerName(player.name)
self.playerCheckBoxes[player.name] = checkbox
QtCore.QObject.connect(checkbox,QtCore.SIGNAL(u'stateChanged(int)'), self.onPlayerCheckBoxChanged)
QtCore.QObject.connect(checkbox, QtCore.SIGNAL(u'stateChanged(int)'), self.onPlayerCheckBoxChanged)
self.mediaPlayerLayout.addWidget(checkbox)
if player.available and player.name in self.usedPlayers:
checkbox.setChecked(True)

View File

@ -26,7 +26,9 @@
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
"""
The :mod:`~openlp.core.ui.media.vlcplayer` module contains our VLC component wrapper
"""
from datetime import datetime
from distutils.version import LooseVersion
import logging
@ -80,8 +82,8 @@ VIDEO_EXT = [
u'*.nsc',
u'*.nsv',
u'*.nut',
u'*.ra', u'*.ram', u'*.rm', u'*.rv' ,u'*.rmbv',
u'*.a52', u'*.dts', u'*.aac', u'*.flac' ,u'*.dv', u'*.vid',
u'*.ra', u'*.ram', u'*.rm', u'*.rv', u'*.rmbv',
u'*.a52', u'*.dts', u'*.aac', u'*.flac', u'*.dv', u'*.vid',
u'*.tta', u'*.tac',
u'*.ty',
u'*.dts',
@ -99,6 +101,9 @@ class VlcPlayer(MediaPlayer):
"""
def __init__(self, parent):
"""
Constructor
"""
MediaPlayer.__init__(self, parent, u'vlc')
self.original_name = u'VLC'
self.display_name = u'&VLC'
@ -108,6 +113,9 @@ class VlcPlayer(MediaPlayer):
self.video_extensions_list = VIDEO_EXT
def setup(self, display):
"""
Set up the media player
"""
display.vlcWidget = QtGui.QFrame(display)
display.vlcWidget.setFrameStyle(QtGui.QFrame.NoFrame)
# creating a basic vlc instance
@ -141,9 +149,15 @@ class VlcPlayer(MediaPlayer):
self.hasOwnWidget = True
def check_available(self):
"""
Return the availability of VLC
"""
return VLC_AVAILABLE
def load(self, display):
"""
Load a video into VLC
"""
log.debug(u'load vid in Vlc Controller')
controller = display.controller
volume = controller.media_info.volume
@ -179,9 +193,15 @@ class VlcPlayer(MediaPlayer):
return True
def resize(self, display):
"""
Resize the player
"""
display.vlcWidget.resize(display.size())
def play(self, display):
"""
Play the current item
"""
controller = display.controller
start_time = 0
if self.state != MediaState.Paused and controller.media_info.start_time > 0:
@ -199,6 +219,9 @@ class VlcPlayer(MediaPlayer):
return True
def pause(self, display):
"""
Pause the current item
"""
if display.vlcMedia.get_state() != vlc.State.Playing:
return
display.vlcMediaPlayer.pause()
@ -206,27 +229,45 @@ class VlcPlayer(MediaPlayer):
self.state = MediaState.Paused
def stop(self, display):
"""
Stop the current item
"""
display.vlcMediaPlayer.stop()
self.state = MediaState.Stopped
def volume(self, display, vol):
"""
Set the volume
"""
if display.hasAudio:
display.vlcMediaPlayer.audio_set_volume(vol)
def seek(self, display, seekVal):
"""
Go to a particular position
"""
if display.vlcMediaPlayer.is_seekable():
display.vlcMediaPlayer.set_time(seekVal)
def reset(self, display):
"""
Reset the player
"""
display.vlcMediaPlayer.stop()
display.vlcWidget.setVisible(False)
self.state = MediaState.Off
def set_visible(self, display, status):
"""
Set the visibility
"""
if self.hasOwnWidget:
display.vlcWidget.setVisible(status)
def update_ui(self, display):
"""
Update the UI
"""
# Stop video if playback is finished.
if display.vlcMedia.get_state() == vlc.State.Ended:
self.stop(display)
@ -241,6 +282,9 @@ class VlcPlayer(MediaPlayer):
controller.seekSlider.blockSignals(False)
def get_info(self):
"""
Return some information about this player
"""
return(translate('Media.player', 'VLC is an external player which '
'supports a number of different formats.') +
u'<br/> <strong>' + translate('Media.player', 'Audio') +

View File

@ -26,8 +26,10 @@
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
from PyQt4 import QtCore, QtGui
"""
The :mod:`~openlp.core.ui.media.webkit` module contains our WebKit video player
"""
from PyQt4 import QtGui
import logging
@ -40,14 +42,14 @@ log = logging.getLogger(__name__)
VIDEO_CSS = u"""
#videobackboard {
z-index:3;
background-color: %s;
background-color: %(bgcolor)s;
}
#video1 {
background-color: %s;
background-color: %(bgcolor)s;
z-index:4;
}
#video2 {
background-color: %s;
background-color: %(bgcolor)s;
z-index:4;
}
"""
@ -234,33 +236,33 @@ FLASH_HTML = u"""
"""
VIDEO_EXT = [
u'*.3gp'
, u'*.3gpp'
, u'*.3g2'
, u'*.3gpp2'
, u'*.aac'
, u'*.flv'
, u'*.f4a'
, u'*.f4b'
, u'*.f4p'
, u'*.f4v'
, u'*.mov'
, u'*.m4a'
, u'*.m4b'
, u'*.m4p'
, u'*.m4v'
, u'*.mkv'
, u'*.mp4'
, u'*.ogv'
, u'*.webm'
, u'*.mpg', u'*.wmv', u'*.mpeg', u'*.avi'
, u'*.swf'
]
u'*.3gp',
u'*.3gpp',
u'*.3g2',
u'*.3gpp2',
u'*.aac',
u'*.flv',
u'*.f4a',
u'*.f4b',
u'*.f4p',
u'*.f4v',
u'*.mov',
u'*.m4a',
u'*.m4b',
u'*.m4p',
u'*.m4v',
u'*.mkv',
u'*.mp4',
u'*.ogv',
u'*.webm',
u'*.mpg', u'*.wmv', u'*.mpeg', u'*.avi',
u'*.swf'
]
AUDIO_EXT = [
u'*.mp3'
, u'*.ogg'
]
u'*.mp3',
u'*.ogg'
]
class WebkitPlayer(MediaPlayer):
@ -270,6 +272,9 @@ class WebkitPlayer(MediaPlayer):
"""
def __init__(self, parent):
"""
Constructor
"""
MediaPlayer.__init__(self, parent, u'webkit')
self.original_name = u'WebKit'
self.display_name = u'&WebKit'
@ -283,7 +288,7 @@ class WebkitPlayer(MediaPlayer):
Add css style sheets to htmlbuilder
"""
background = QtGui.QColor(Settings().value(u'players/background color')).name()
css = VIDEO_CSS % (background,background,background)
css = VIDEO_CSS % {u'bgcolor': background}
return css + FLASH_CSS
def get_media_display_javascript(self):
@ -299,14 +304,23 @@ class WebkitPlayer(MediaPlayer):
return VIDEO_HTML + FLASH_HTML
def setup(self, display):
"""
Set up the player
"""
display.webView.resize(display.size())
display.webView.raise_()
self.hasOwnWidget = False
def check_available(self):
"""
Check the availability of the media player
"""
return True
def load(self, display):
"""
Load a video
"""
log.debug(u'load vid in Webkit Controller')
controller = display.controller
if display.hasAudio and not controller.media_info.is_background:
@ -329,9 +343,15 @@ class WebkitPlayer(MediaPlayer):
return True
def resize(self, display):
"""
Resize the player
"""
display.webView.resize(display.size())
def play(self, display):
"""
Play a video
"""
controller = display.controller
display.webLoaded = True
length = 0
@ -352,6 +372,9 @@ class WebkitPlayer(MediaPlayer):
return True
def pause(self, display):
"""
Pause a video
"""
controller = display.controller
if controller.media_info.is_flash:
display.frame.evaluateJavaScript(u'show_flash("pause");')
@ -360,6 +383,9 @@ class WebkitPlayer(MediaPlayer):
self.state = MediaState.Paused
def stop(self, display):
"""
Stop a video
"""
controller = display.controller
if controller.media_info.is_flash:
display.frame.evaluateJavaScript(u'show_flash("stop");')
@ -368,6 +394,9 @@ class WebkitPlayer(MediaPlayer):
self.state = MediaState.Stopped
def volume(self, display, vol):
"""
Set the volume
"""
controller = display.controller
# 1.0 is the highest value
if display.hasAudio:
@ -376,6 +405,9 @@ class WebkitPlayer(MediaPlayer):
display.frame.evaluateJavaScript(u'show_video(null, null, %s);' % str(vol))
def seek(self, display, seekVal):
"""
Go to a position in the video
"""
controller = display.controller
if controller.media_info.is_flash:
seek = seekVal
@ -385,6 +417,9 @@ class WebkitPlayer(MediaPlayer):
display.frame.evaluateJavaScript(u'show_video("seek", null, null, null, "%f");' % (seek))
def reset(self, display):
"""
Reset the player
"""
controller = display.controller
if controller.media_info.is_flash:
display.frame.evaluateJavaScript(u'show_flash("close");')
@ -393,6 +428,9 @@ class WebkitPlayer(MediaPlayer):
self.state = MediaState.Off
def set_visible(self, display, status):
"""
Set the visibility
"""
controller = display.controller
if status:
is_visible = "visible"
@ -404,6 +442,9 @@ class WebkitPlayer(MediaPlayer):
display.frame.evaluateJavaScript(u'show_video("setVisible", null, null, null, "%s");' % (is_visible))
def update_ui(self, display):
"""
Update the UI
"""
controller = display.controller
if controller.media_info.is_flash:
currentTime = display.frame.evaluateJavaScript(u'show_flash("currentTime");')
@ -428,6 +469,9 @@ class WebkitPlayer(MediaPlayer):
controller.seekSlider.blockSignals(False)
def get_info(self):
"""
Return some information about this player
"""
return(translate('Media.player', 'Webkit is a media player which runs '
'inside a web browser. This player allows text over video to be '
'rendered.') +