diff --git a/openlp/core/lib/htmlbuilder.py b/openlp/core/lib/htmlbuilder.py index 06eedb762..9608a5219 100644 --- a/openlp/core/lib/htmlbuilder.py +++ b/openlp/core/lib/htmlbuilder.py @@ -36,6 +36,7 @@ log = logging.getLogger(__name__) # FIXME: Add html5 doctype. However, do not break theme gradients. HTMLSRC = u""" + OpenLP Display @@ -276,25 +277,25 @@ def build_html(item, screen, alert, islive, background, plugins=None, \ image_src = u'src="data:image/png;base64,%s"' % image else: image_src = u'style="display:none;"' - plugin_css = u'' - plugin_js = u'' - plugin_html = u'' + css_additions = u'' + js_additions = u'' + html_additions = u'' if plugins: for plugin in plugins: - plugin_css += plugin.getDisplayCss() - plugin_js += plugin.getDisplayJavascript() - plugin_html += plugin.getDisplayHtml() + css_additions += plugin.getDisplayCss() + js_additions += plugin.getDisplayJavascript() + html_additions += plugin.getDisplayHtml() html = HTMLSRC % (build_background_css(item, width, height), width, height, - plugin_css, + css_additions, build_alert_css(alert, width), build_footer_css(item, height), build_lyrics_css(item, webkitvers), u'true' if theme and theme.display_slide_transition and islive \ else u'false', - plugin_js, + js_additions, bgimage_src, image_src, - plugin_html, + html_additions, build_lyrics_html(item, webkitvers)) return html diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index f027e8db9..3c369593a 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -67,6 +67,7 @@ class Display(QtGui.QGraphicsView): self.width(), self.height()) self.webView.settings().setAttribute( QtWebKit.QWebSettings.PluginsEnabled, True) + self.webView.settings().setAttribute(7, True) self.page = self.webView.page() self.frame = self.page.mainFrame() self.frame.setScrollBarPolicy(QtCore.Qt.Vertical, @@ -129,6 +130,7 @@ class MainDisplay(Display): self.screen[u'size'].width(), self.screen[u'size'].height()) self.webView.settings().setAttribute( \ QtWebKit.QWebSettings.PluginsEnabled, True) + self.webView.settings().setAttribute(7, True) self.page = self.webView.page() self.frame = self.page.mainFrame() QtCore.QObject.connect(self.webView, @@ -253,7 +255,7 @@ class MainDisplay(Display): """ log.debug(u'image to display') image = self.imageManager.get_image_bytes(name) - self.resetVideo() + self.controller.mediaManager.video_reset(self.controller) self.displayImage(image) return self.preview() diff --git a/openlp/core/ui/media/__init__.py b/openlp/core/ui/media/__init__.py index 12830524d..edd1ad5f6 100644 --- a/openlp/core/ui/media/__init__.py +++ b/openlp/core/ui/media/__init__.py @@ -39,10 +39,12 @@ class MediaState(object): class MediaType(object): """ """ - Audio = 0 - Video = 1 + Unused = 0 + Audio = 1 + Video = 2 Cd = 3 Dvd = 4 + Folder = 5 class MediaInfo(object): """ @@ -50,7 +52,7 @@ class MediaInfo(object): """ file_info = None volume = 100 - isFlash = False + is_flash = False is_background = False length = 0 start_time = 0 diff --git a/openlp/core/ui/media/mediaapi.py b/openlp/core/ui/media/mediaapi.py index d6a9bab9b..58ecd49d0 100644 --- a/openlp/core/ui/media/mediaapi.py +++ b/openlp/core/ui/media/mediaapi.py @@ -49,7 +49,6 @@ class MediaAPI(object): """ return False - def setup(self, display): """ Create the related widgets for the current display @@ -118,21 +117,19 @@ class MediaAPI(object): """ pass - def getDisplayCss(self): + def get_media_display_css(self): """ Add css style sheets to htmlbuilder """ return u'' - - def getDisplayJavascript(self): + def get_media_display_javascript(self): """ Add javascript functions to htmlbuilder """ return u'' - - def getDisplayHtml(self): + def get_media_display_html(self): """ Add html code to htmlbuilder """ diff --git a/openlp/core/ui/media/mediamanager.py b/openlp/core/ui/media/mediamanager.py index 60d99c80c..a43339c29 100644 --- a/openlp/core/ui/media/mediamanager.py +++ b/openlp/core/ui/media/mediamanager.py @@ -32,7 +32,7 @@ from PyQt4 import QtCore, QtGui, QtWebKit from openlp.core.lib import OpenLPToolbar, Receiver, translate from openlp.core.lib.ui import UiStrings, critical_error_message_box -from openlp.core.ui.media import MediaAPI, MediaState, MediaInfo +from openlp.core.ui.media import MediaAPI, MediaState, MediaInfo, MediaType from openlp.core.utils import AppLocation log = logging.getLogger(__name__) @@ -61,12 +61,12 @@ class MediaManager(object): self.APIs = {} self.controller = [] self.curDisplayMediaAPI = {} - #Timer for video state + # Timer for video state self.Timer = QtCore.QTimer() self.Timer.setInterval(200) self.withLivePreview = False - self.checkPreConditions() - #Signals + self.check_available_media_apis() + # Signals QtCore.QObject.connect(self.Timer, QtCore.SIGNAL("timeout()"), self.video_state) QtCore.QObject.connect(Receiver.get_receiver(), @@ -86,7 +86,7 @@ class MediaManager(object): QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'media_unblank'), self.video_unblank) - def registerControllers(self, controller): + def register_controllers(self, controller): """ Register each media API controller (Webkit, Phonon, etc) and store for later use @@ -94,12 +94,12 @@ class MediaManager(object): if controller.check_available(): self.APIs[controller.name] = controller - def checkPreConditions(self): + def check_available_media_apis(self): """ Check to see if we have any media API's available If Not do not install the plugin. """ - log.debug(u'checkPreConditions') + log.debug(u'check_available_media_apis') controller_dir = os.path.join( AppLocation.get_directory(AppLocation.AppDir), u'core', u'ui', u'media') @@ -119,7 +119,7 @@ class MediaManager(object): controller_classes = MediaAPI.__subclasses__() for controller_class in controller_classes: controller = controller_class(self) - self.registerControllers(controller) + self.register_controllers(controller) if self.APIs: return True else: @@ -143,34 +143,34 @@ class MediaManager(object): if not isAnyonePlaying: self.Timer.stop() - def getDisplayCss(self): + def get_media_display_css(self): """ Add css style sheets to htmlbuilder """ css = u''; for api in self.APIs.values(): - css += api.getDisplayCss() + css += api.get_media_display_css() return css - def getDisplayJavascript(self): + def get_media_display_javascript(self): """ Add javascript functions to htmlbuilder """ js = u'' for api in self.APIs.values(): - js += api.getDisplayJavascript() + js += api.get_media_display_javascript() return js - def getDisplayHtml(self): + def get_media_display_html(self): """ Add html code to htmlbuilder """ html = u'' for api in self.APIs.values(): - html += api.getDisplayHtml() + html += api.get_media_display_html() return html - def addControllerItems(self, controller, control_panel): + def add_controller_items(self, controller, control_panel): self.controller.append(controller) self.setup_generic_controls(controller, control_panel) for api in self.APIs.values(): @@ -210,7 +210,7 @@ class MediaManager(object): controller.mediabar.addToolbarWidget(u'Audio Volume', controller.volumeSlider) control_panel.addWidget(controller.mediabar) controller.mediabar.setVisible(False) - #Signals + # Signals QtCore.QObject.connect(controller.seekSlider, QtCore.SIGNAL(u'sliderMoved(int)'), controller.sendToPlugins) QtCore.QObject.connect(controller.volumeSlider, @@ -277,20 +277,26 @@ class MediaManager(object): display = controller.previewDisplay isValid = self.check_file_type(controller, display) if not isValid: - #Media could not be loaded correctly + # Media could not be loaded correctly critical_error_message_box( translate('MediaPlugin.MediaItem', 'Unsupported File'), unicode(translate('MediaPlugin.MediaItem', 'Unsupported File'))) return False - #now start playing - self.video_play([controller]) - self.video_pause([controller]) - self.video_seek([controller, [0]]) - self.video_play([controller]) - self.set_controls_visible(controller, True) - log.debug(u'use %s controller' % self.curDisplayMediaAPI[display]) - return True + # now start playing + if self.video_play([controller]): + self.video_pause([controller]) + self.video_seek([controller, [0]]) + if self.video_play([controller]): + self.set_controls_visible(controller, True) + log.debug(u'use %s controller' % self.curDisplayMediaAPI[display]) + return True + else: + critical_error_message_box( + translate('MediaPlugin.MediaItem', 'Unsupported File'), + unicode(translate('MediaPlugin.MediaItem', + 'Unsupported File'))) + return False def check_file_type(self, controller, display): """ @@ -310,7 +316,13 @@ class MediaManager(object): self.resize(controller, display, api) if api.load(display): self.curDisplayMediaAPI[display] = api + controller.media_info.media_type = MediaType.Video return True + if suffix in api.audio_extensions_list: + if api.load(display): + self.curDisplayMediaAPI[display] = api + controller.media_info.media_type = MediaType.Audio + return True # no valid api found return False @@ -325,17 +337,19 @@ class MediaManager(object): if controller.isLive: if controller.hideMenu.defaultAction().isChecked(): controller.hideMenu.defaultAction().trigger() - #Receiver.send_message(u'maindisplay_show') - self.curDisplayMediaAPI[display].play(display) + if not self.curDisplayMediaAPI[display].play(display): + return False + self.curDisplayMediaAPI[display].set_visible(display, True) # Start Timer for ui updates if not self.Timer.isActive(): self.Timer.start() + return True def video_pause(self, msg): """ Responds to the request to pause a loaded video """ - log.debug(u'videoPause') + log.debug(u'video_pause') controller = msg[0] for display in self.curDisplayMediaAPI.keys(): if display.controller == controller: @@ -383,6 +397,7 @@ class MediaManager(object): if display.controller == controller: display.override = {} self.curDisplayMediaAPI[display].reset(display) + self.curDisplayMediaAPI[display].set_visible(display, False) del self.curDisplayMediaAPI[display] self.set_controls_visible(controller, False) @@ -428,9 +443,9 @@ class MediaManager(object): if display.controller == controller: if self.curDisplayMediaAPI[display] \ .state == MediaState.Paused: - self.curDisplayMediaAPI[display].play(display) - self.curDisplayMediaAPI[display] \ - .set_visible(display, True) + if self.curDisplayMediaAPI[display].play(display): + self.curDisplayMediaAPI[display] \ + .set_visible(display, True) def get_audio_extensions_list(self): audio_list = [] diff --git a/openlp/core/ui/media/phononapi.py b/openlp/core/ui/media/phononapi.py index ee20fd1da..0fe8a1825 100644 --- a/openlp/core/ui/media/phononapi.py +++ b/openlp/core/ui/media/phononapi.py @@ -76,7 +76,6 @@ class PhononAPI(MediaAPI): ext = u'*%s' % extension if ext not in list: list.append(ext) - #self.parent.parent.serviceManagerContents.supportedSuffixes(extension[1:]) log.info(u'MediaPlugin: %s extensions: %s' % (mimetype, u' '.join(extensions))) # Add extensions for this mimetype from self.additional_extensions. @@ -87,7 +86,6 @@ class PhononAPI(MediaAPI): ext = u'*%s' % extension if ext not in list: list.append(ext) - #self.parent.parent.serviceManagerContents.supportedSuffixes(extension[1:]) log.info(u'MediaPlugin: %s additional extensions: %s' % (mimetype, u' '.join(self.additional_extensions[mimetype]))) @@ -133,19 +131,21 @@ class PhononAPI(MediaAPI): volume = controller.media_info.volume path = controller.media_info.file_info.absoluteFilePath() display.mediaObject.setCurrentSource(Phonon.MediaSource(path)) - if not self.mediaStateWait(display, Phonon.StoppedState): + if not self.media_state_wait(display, Phonon.StoppedState): return False self.volume(display, volume) return True - def mediaStateWait(self, display, mediaState): + def media_state_wait(self, display, mediaState): """ Wait for the video to change its state Wait no longer than 5 seconds. """ start = datetime.now() - while display.mediaObject.state() != mediaState: - if display.mediaObject.state() == Phonon.ErrorState: + current_state = display.mediaObject.state() + while current_state != mediaState: + current_state = display.mediaObject.state() + if current_state == Phonon.ErrorState: return False Receiver.send_message(u'openlp_process_events') if (datetime.now() - start).seconds > 5: @@ -162,7 +162,7 @@ class PhononAPI(MediaAPI): controller.media_info.start_time > 0: start_time = controller.media_info.start_time display.mediaObject.play() - if self.mediaStateWait(display, Phonon.PlayingState): + if self.media_state_wait(display, Phonon.PlayingState): if start_time > 0: self.seek(display, controller.media_info.start_time*1000) self.volume(display, controller.media_info.volume) @@ -170,11 +170,15 @@ class PhononAPI(MediaAPI): int(display.mediaObject.totalTime()/1000) controller.seekSlider.setMaximum(controller.media_info.length*1000) self.state = MediaState.Playing - self.set_visible(display, True) + #self.set_visible(display, True) + return True + else: + return False def pause(self, display): display.mediaObject.pause() - self.state = MediaState.Paused + if self.media_state_wait(display, Phonon.PausedState): + self.state = MediaState.Paused def stop(self, display): display.mediaObject.stop() diff --git a/openlp/core/ui/media/vlcapi.py b/openlp/core/ui/media/vlcapi.py index 0af89438d..ffc928238 100644 --- a/openlp/core/ui/media/vlcapi.py +++ b/openlp/core/ui/media/vlcapi.py @@ -48,6 +48,11 @@ class VlcAPI(MediaAPI): def __init__(self, parent): MediaAPI.__init__(self, parent, u'Vlc') self.parent = parent + self.audio_extensions_list = [ + u'*.mp3' + , u'*.wav' + , u'*.ogg' + ] self.video_extensions_list = [ u'*.3gp' , u'*.asf', u'*.wmv' @@ -56,10 +61,10 @@ class VlcAPI(MediaAPI): , u'*.flv' , u'*.mov' , u'*.mp4' - , u'*.ogm', u'*.ogg' + , u'*.ogm' , u'*.mkv', u'*.mka' , u'*.ts', u'*.mpg' - , u'*.mpg', u'*.mp3', u'*.mp2' + , u'*.mpg', u'*.mp2' , u'*.nsc' , u'*.nsv' , u'*.nut' @@ -67,7 +72,7 @@ class VlcAPI(MediaAPI): , u'*.a52', u'*.dts', u'*.aac', u'*.flac' ,u'*.dv', u'*.vid' , u'*.tta', u'*.tac' , u'*.ty' - , u'*.wav', u'*.dts' + , u'*.dts' , u'*.xa' , u'*.iso' ] @@ -120,7 +125,7 @@ class VlcAPI(MediaAPI): self.volume(display, volume) return True - def mediaStateWait(self, display, mediaState): + def media_state_wait(self, display, mediaState): """ Wait for the video to change its state Wait no longer than 5 seconds. @@ -143,20 +148,23 @@ class VlcAPI(MediaAPI): if controller.media_info.start_time > 0: start_time = controller.media_info.start_time display.vlcMediaPlayer.play() - if self.mediaStateWait(display, vlc.State.Playing): + if self.media_state_wait(display, vlc.State.Playing): if start_time > 0: self.seek(display, controller.media_info.start_time*1000) controller.media_info.length = \ int(display.vlcMediaPlayer.get_media().get_duration()/1000) controller.seekSlider.setMaximum(controller.media_info.length*1000) self.state = MediaState.Playing - self.set_visible(display, True) + #self.set_visible(display, True) + return True + else: + return False def pause(self, display): if display.vlcMedia.get_state() != vlc.State.Playing: return display.vlcMediaPlayer.pause() - if self.mediaStateWait(display, vlc.State.Paused): + if self.media_state_wait(display, vlc.State.Paused): self.state = MediaState.Paused def stop(self, display): diff --git a/openlp/core/ui/media/webkitapi.py b/openlp/core/ui/media/webkitapi.py index 08c2a8b5b..1fbb54576 100644 --- a/openlp/core/ui/media/webkitapi.py +++ b/openlp/core/ui/media/webkitapi.py @@ -44,6 +44,10 @@ class WebkitAPI(MediaAPI): MediaAPI.__init__(self, parent, u'Webkit') self.parent = parent self.canBackground = True + self.audio_extensions_list = [ + u'*.mp3' + , u'*.ogg' + ] self.video_extensions_list = [ u'*.3gp' , u'*.3gpp' @@ -62,8 +66,6 @@ class WebkitAPI(MediaAPI): , u'*.m4v' , u'*.mkv' , u'*.mp4' - , u'*.mp3' - , u'*.ogg' , u'*.ogv' , u'*.webm' , u'*.swf', u'*.mpg', u'*.wmv', u'*.mpeg', u'*.avi' @@ -73,7 +75,7 @@ class WebkitAPI(MediaAPI): # no special controls pass - def getDisplayCss(self): + def get_media_display_css(self): """ Add css style sheets to htmlbuilder """ @@ -91,7 +93,7 @@ class WebkitAPI(MediaAPI): return css - def getDisplayJavascript(self): + def get_media_display_javascript(self): """ Add javascript functions to htmlbuilder """ @@ -99,7 +101,7 @@ class WebkitAPI(MediaAPI): var video_timer = null; var current_video = '1'; - function show_video(state, path, volume, loop, seekVal){ + function show_video(state, path, volume, loop, varVal){ // Note, the preferred method for looping would be to use the // video tag loop attribute. // But QtWebKit doesn't support this. Neither does it support the @@ -139,7 +141,7 @@ class WebkitAPI(MediaAPI): break; case 'play': vid.play(); - vid.style.visibility = 'visible'; + //vid.style.visibility = 'visible'; if(vid.looping){ video_timer = setInterval( function() { @@ -156,7 +158,6 @@ class WebkitAPI(MediaAPI): break; case 'stop': show_video('pause'); - vid.style.visibility = 'hidden'; break; case 'poll': if(vid.ended||vid.currentTime+0.2>vid.duration) @@ -182,7 +183,10 @@ class WebkitAPI(MediaAPI): return vid.currentTime; case 'seek': // doesnt work currently - //vid.currentTime = seekVal; + //vid.currentTime = varVal; + break; + case 'setVisible': + vid.style.visibility = varVal; break; } } @@ -197,8 +201,7 @@ class WebkitAPI(MediaAPI): return document.embeds[movieName]; } - // http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_03.html - function show_flash(state, path, volume, seekVal){ + function show_flash(state, path, volume, varVal){ var text = document.getElementById('flash'); var flashMovie = getFlashMovieObject("OpenLPFlashMovie"); var src = "src = 'file:///" + path + "'"; @@ -214,27 +217,22 @@ class WebkitAPI(MediaAPI): case 'load': text.innerHTML = ""; flashMovie = getFlashMovieObject("OpenLPFlashMovie"); - text.style.visibility = 'visible'; flashMovie.Play(); break; case 'play': - text.style.visibility = 'visible'; flashMovie.Play(); break; case 'pause': flashMovie.StopPlay(); - text.style.visibility = 'hidden'; break; case 'stop': flashMovie.StopPlay(); - text.style.visibility = 'hidden'; tempHtml = text.innerHTML; text.innerHTML = ''; text.innerHTML = tempHtml; break; case 'close': flashMovie.StopPlay(); - text.style.visibility = 'hidden'; text.innerHTML = ''; break; case 'length': @@ -242,7 +240,10 @@ class WebkitAPI(MediaAPI): case 'currentTime': return flashMovie.CurrentFrame(); case 'seek': - // flashMovie.GotoFrame(seekVal); + // flashMovie.GotoFrame(varVal); + break; + case 'setVisible': + text.style.visibility = varVal; break; } } @@ -250,16 +251,16 @@ class WebkitAPI(MediaAPI): return js - def getDisplayHtml(self): + def get_media_display_html(self): """ Add html code to htmlbuilder """ html = u''' - - - + + + ''' return html @@ -267,7 +268,6 @@ class WebkitAPI(MediaAPI): display.webView.resize(display.size()) display.webView.raise_() self.hasOwnWidget = False - #display.webView.hide() def check_available(self): return True @@ -287,7 +287,7 @@ class WebkitAPI(MediaAPI): loop = u'false' display.webView.setVisible(True) if controller.media_info.file_info.suffix() == u'swf': - controller.media_info.isFlash = True + controller.media_info.is_flash = True js = u'show_flash("load","%s");' % \ (path.replace(u'\\', u'\\\\')) else: @@ -305,17 +305,18 @@ class WebkitAPI(MediaAPI): display.webLoaded = True length = 0 self.set_visible(display, True) - if controller.media_info.isFlash: + if controller.media_info.is_flash: display.frame.evaluateJavaScript(u'show_flash("play");') else: display.frame.evaluateJavaScript(u'show_video("play");') - #TODO add playing check and get the correct media length + # TODO add playing check and get the correct media length controller.media_info.length = length self.state = MediaState.Playing + return True def pause(self, display): controller = display.controller - if controller.media_info.isFlash: + if controller.media_info.is_flash: display.frame.evaluateJavaScript(u'show_flash("pause");') else: display.frame.evaluateJavaScript(u'show_video("pause");') @@ -323,7 +324,7 @@ class WebkitAPI(MediaAPI): def stop(self, display): controller = display.controller - if controller.media_info.isFlash: + if controller.media_info.is_flash: display.frame.evaluateJavaScript(u'show_flash("stop");') else: display.frame.evaluateJavaScript(u'show_video("stop");') @@ -334,13 +335,13 @@ class WebkitAPI(MediaAPI): # 1.0 is the highest value if display.hasAudio: vol = float(vol) / float(100) - if not controller.media_info.isFlash: + if not controller.media_info.is_flash: display.frame.evaluateJavaScript( u'show_video(null, null, %s);' % str(vol)) def seek(self, display, seekVal): controller = display.controller - if controller.media_info.isFlash: + if controller.media_info.is_flash: seek = seekVal display.frame.evaluateJavaScript( \ u'show_flash("seek", null, null, "%s");' % (seek)) @@ -351,19 +352,28 @@ class WebkitAPI(MediaAPI): def reset(self, display): controller = display.controller - if controller.media_info.isFlash: + if controller.media_info.is_flash: display.frame.evaluateJavaScript(u'show_flash("close");') else: display.frame.evaluateJavaScript(u'show_video("close");') self.state = MediaState.Off def set_visible(self, display, status): - if self.hasOwnWidget: - display.webView.setVisible(status) + controller = display.controller + if status: + is_visible = "visible" + else: + is_visible = "hidden" + if controller.media_info.is_flash: + display.frame.evaluateJavaScript(u'show_flash( \ + "setVisible", null, null, "%s");' % (is_visible)) + else: + display.frame.evaluateJavaScript(u'show_video( \ + "setVisible", null, null, null, "%s");' % (is_visible)) def update_ui(self, display): controller = display.controller - if controller.media_info.isFlash: + if controller.media_info.is_flash: currentTime = display.frame.evaluateJavaScript( \ u'show_flash("currentTime");').toInt()[0] length = display.frame.evaluateJavaScript( \ @@ -372,12 +382,12 @@ class WebkitAPI(MediaAPI): (currentTime, ok) = display.frame.evaluateJavaScript( \ u'show_video("currentTime");').toFloat() # check if conversion was ok and value is not 'NaN' - if ok and currentTime == currentTime: + if ok and currentTime != float('inf'): currentTime = int(currentTime*1000) (length, ok) = display.frame.evaluateJavaScript( \ u'show_video("length");').toFloat() # check if conversion was ok and value is not 'NaN' - if ok and length == length: + if ok and length != float('inf'): length = int(length*1000) if currentTime > 0: controller.media_info.length = length diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index ab5045bb5..12d787966 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -253,7 +253,7 @@ class SlideController(Controller): self.onEditSong) self.controllerLayout.addWidget(self.toolbar) # Build the Media Toolbar - self.mediaManager.addControllerItems(self, self.controllerLayout) + self.mediaManager.add_controller_items(self, self.controllerLayout) if self.isLive: # Build the Song Toolbar self.songMenu = QtGui.QToolButton(self.toolbar) @@ -501,7 +501,7 @@ class SlideController(Controller): self.playSlidesOnce.setChecked(False) self.playSlidesOnce.setIcon(build_icon(u':/media/media_time.png')) self.playSlidesLoop.setChecked(False) - self.playSlidesLoop.setIcon(build_icon(u':/media/media_time.png')) + self.playSlidesLoop.setIcon(build_icon(u':/media/media_time.png')) if item.is_text(): if QtCore.QSettings().value( self.parent().songsSettingsSection + u'/display songbar', @@ -512,9 +512,13 @@ class SlideController(Controller): self.toolbar.makeWidgetsVisible(self.loopList) if item.is_media(): self.mediabar.setVisible(True) + self.previousItem.setVisible(False) + self.nextItem.setVisible(False) else: # Work-around for OS X, hide and then show the toolbar # See bug #791050 + self.previousItem.setVisible(True) + self.nextItem.setVisible(True) self.toolbar.show() self.toolbar.show() diff --git a/openlp/plugins/media/lib/mediaitem.py b/openlp/plugins/media/lib/mediaitem.py index 88f24e09f..d790eb8f6 100644 --- a/openlp/plugins/media/lib/mediaitem.py +++ b/openlp/plugins/media/lib/mediaitem.py @@ -56,11 +56,15 @@ class MediaMediaItem(MediaManagerItem): self.mediaObject = None self.mediaController = Controller(parent) self.mediaController.controllerLayout = QtGui.QVBoxLayout() - self.plugin.mediaManager.addControllerItems(self.mediaController, self.mediaController.controllerLayout) - self.plugin.mediaManager.set_controls_visible(self.mediaController, False) - self.mediaController.previewDisplay = Display(self.mediaController, False, self.mediaController, self.plugin.pluginManager.plugins) + self.plugin.mediaManager.add_controller_items(self.mediaController, \ + self.mediaController.controllerLayout) + self.plugin.mediaManager.set_controls_visible(self.mediaController, \ + False) + self.mediaController.previewDisplay = Display(self.mediaController, \ + False, self.mediaController, self.plugin.pluginManager.plugins) self.mediaController.previewDisplay.setup() - self.plugin.mediaManager.setup_display(self.mediaController.previewDisplay) + self.plugin.mediaManager.setup_display( \ + self.mediaController.previewDisplay) self.mediaController.previewDisplay.hide() QtCore.QObject.connect(Receiver.get_receiver(), @@ -100,7 +104,7 @@ class MediaMediaItem(MediaManagerItem): def onResetClick(self): """ - Called to reset the Live backgound with the media selected, + Called to reset the Live background with the media selected, """ self.plugin.liveController.mediaManager.video_reset( \ self.plugin.liveController) @@ -114,7 +118,7 @@ class MediaMediaItem(MediaManagerItem): def onReplaceClick(self): """ - Called to replace Live backgound with the media selected. + Called to replace Live background with the media selected. """ if check_item_selected(self.listView, translate('MediaPlugin.MediaItem', @@ -122,7 +126,7 @@ class MediaMediaItem(MediaManagerItem): item = self.listView.currentItem() filename = unicode(item.data(QtCore.Qt.UserRole).toString()) if os.path.exists(filename): - (path, name) = os.path.split(filename) + #(path, name) = os.path.split(filename) if self.plugin.liveController.mediaManager.video( \ self.plugin.liveController, filename, True, True): self.resetAction.setVisible(True) @@ -158,6 +162,8 @@ class MediaMediaItem(MediaManagerItem): if self.mediaLength > 0: service_item.add_capability( ItemCapabilities.AllowsVariableStartTime) + else: + return False service_item.media_length = self.mediaLength service_item.title = unicode(self.plugin.nameStrings[u'singular']) service_item.add_capability(ItemCapabilities.RequiresMedia) diff --git a/openlp/plugins/media/lib/mediatab.py b/openlp/plugins/media/lib/mediatab.py index 15474c248..dc2dcc00e 100644 --- a/openlp/plugins/media/lib/mediatab.py +++ b/openlp/plugins/media/lib/mediatab.py @@ -53,7 +53,6 @@ class MediaTab(SettingsTab): self.ApiCheckBoxes[api.name] = checkbox self.mediaApiLayout.addWidget(checkbox) self.leftLayout.addWidget(self.mediaAPIGroupBox) - self.apiOrderGroupBox = QtGui.QGroupBox(self.leftColumn) self.apiOrderGroupBox.setObjectName(u'apiOrderGroupBox') self.apiOrderLayout = QtGui.QVBoxLayout(self.apiOrderGroupBox) @@ -67,7 +66,6 @@ class MediaTab(SettingsTab): sizePolicy.setHeightForWidth(self.apiOrderlistWidget. \ sizePolicy().hasHeightForWidth()) self.apiOrderlistWidget.setSizePolicy(sizePolicy) - self.apiOrderlistWidget.setVerticalScrollBarPolicy( \ QtCore.Qt.ScrollBarAsNeeded) self.apiOrderlistWidget.setHorizontalScrollBarPolicy( \ diff --git a/openlp/plugins/media/mediaplugin.py b/openlp/plugins/media/mediaplugin.py index e977ce36d..e0cf8d65e 100644 --- a/openlp/plugins/media/mediaplugin.py +++ b/openlp/plugins/media/mediaplugin.py @@ -99,21 +99,22 @@ class MediaPlugin(Plugin): """ log.info(u'Media Finalising') self.mediaManager.finalise() + Plugin.finalise(self) def getDisplayCss(self): """ Add css style sheets to htmlbuilder """ - return self.mediaManager.getDisplayCss() + return self.mediaManager.get_media_display_css() def getDisplayJavascript(self): """ Add javascript functions to htmlbuilder """ - return self.mediaManager.getDisplayJavascript() + return self.mediaManager.get_media_display_javascript() def getDisplayHtml(self): """ Add html code to htmlbuilder """ - return self.mediaManager.getDisplayHtml() + return self.mediaManager.get_media_display_html()