← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~trb143/openlp/bugs into lp:openlp

 

Tim Bentley has proposed merging lp:~trb143/openlp/bugs into lp:openlp.

Requested reviews:
  Raoul Snyman (raoul-snyman)
Related bugs:
  Bug #657860 in OpenLP: "At the end of a video, the last frame stays on screen."
  https://bugs.launchpad.net/openlp/+bug/657860
  Bug #693150 in OpenLP: "Custom Slide Display footer option"
  https://bugs.launchpad.net/openlp/+bug/693150
  Bug #693202 in OpenLP: "delete theme"
  https://bugs.launchpad.net/openlp/+bug/693202
  Bug #712252 in OpenLP: "Service song already in database detection logic broken"
  https://bugs.launchpad.net/openlp/+bug/712252

For more details, see:
https://code.launchpad.net/~trb143/openlp/bugs/+merge/53213

Blank video at the end when it is finished.
Additional comments.
Hook for later development work.
-- 
https://code.launchpad.net/~trb143/openlp/bugs/+merge/53213
Your team OpenLP Core is subscribed to branch lp:openlp.
=== modified file 'openlp/core/ui/maindisplay.py'
--- openlp/core/ui/maindisplay.py	2011-03-09 18:14:50 +0000
+++ openlp/core/ui/maindisplay.py	2011-03-14 10:15:25 +0000
@@ -67,6 +67,7 @@
         self.isLive = live
         self.alertTab = None
         self.hideMode = None
+        self.videoHide = False
         self.override = {}
         mainIcon = build_icon(u':/icon/openlp-logo-16x16.png')
         self.setWindowIcon(mainIcon)
@@ -90,7 +91,7 @@
         """
         Set up and build the output screen
         """
-        log.debug(u'Start setup for monitor %s (live = %s)' % 
+        log.debug(u'Start setup for monitor %s (live = %s)' %
             (self.screens.monitor_number, self.isLive))
         self.usePhonon = QtCore.QSettings().value(
             u'media/use phonon', QtCore.QVariant(True)).toBool()
@@ -110,6 +111,12 @@
         QtCore.QObject.connect(self.mediaObject,
             QtCore.SIGNAL(u'stateChanged(Phonon::State, Phonon::State)'),
             self.videoStart)
+        QtCore.QObject.connect(self.mediaObject,
+            QtCore.SIGNAL(u'finished()'),
+            self.videoFinished)
+        QtCore.QObject.connect(self.mediaObject,
+            QtCore.SIGNAL(u'tick(qint64)'),
+            self.videoTick)
         log.debug(u'Setup webView for monitor %s' % self.screens.monitor_number)
         self.webView = QtWebKit.QWebView(self)
         self.webView.setGeometry(0, 0,
@@ -262,6 +269,7 @@
             self.displayImage(self.serviceItem.bg_image_bytes)
         else:
             self.displayImage(None)
+        # clear the cache
         self.override = {}
         # Update the preview frame.
         if self.isLive:
@@ -349,6 +357,10 @@
             self.mediaObject.stop()
             self.mediaObject.clearQueue()
             self.mediaObject.setCurrentSource(Phonon.MediaSource(videoPath))
+            # Need the timer to trigger set the trigger to 200ms
+            # Value taken from web documentation.
+            if self.serviceItem.start_time != 0:
+                self.mediaObject.setTickInterval(200)
             self.mediaObject.play()
             self.webView.setVisible(False)
             self.videoWidget.setVisible(True)
@@ -363,8 +375,26 @@
         Start the video at a predetermined point.
         """
         if newState == Phonon.PlayingState:
+            # set start time in milliseconds
             self.mediaObject.seek(self.serviceItem.start_time * 1000)
 
+    def videoFinished(self):
+        """
+        Blank the Video when it has finished so the final frame is not left
+        hanging
+        """
+        self.videoStop()
+        self.hideDisplay(HideMode.Blank)
+        self.phononActive = False
+        self.videoHide = True
+
+    def videoTick(self, tick):
+        """
+        Triggered on video tick every 200 milli seconds
+        Will be used to manage stop time later
+        """
+        pass
+
     def isWebLoaded(self):
         """
         Called by webView event to show display is fully loaded
@@ -422,10 +452,12 @@
             if u'video' in self.override:
                 Receiver.send_message(u'video_background_replaced')
                 self.override = {}
+            # We have a different theme.
             elif self.override[u'theme'] != serviceItem.themedata.theme_name:
                 Receiver.send_message(u'live_theme_changed')
                 self.override = {}
             else:
+                # replace the background
                 background = self.imageManager. \
                     get_image_bytes(self.override[u'image'])
         if self.serviceItem.themedata.background_filename:
@@ -441,6 +473,10 @@
         # if was hidden keep it hidden
         if self.hideMode and self.isLive:
             self.hideDisplay(self.hideMode)
+        # display hidden for video end we have a new item so must be shown
+        if self.videoHide and self.isLive:
+            self.videoHide = False
+            self.showDisplay()
         self.__hideMouse()
 
     def footer(self, text):


Follow ups