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

Proposed by Tim Bentley
Status: Merged
Merged at revision: 1387
Proposed branch: lp:~trb143/openlp/bugs
Merge into: lp:openlp
Diff against target: 103 lines (+37/-1)
1 file modified
openlp/core/ui/maindisplay.py (+37/-1)
To merge this branch: bzr merge lp:~trb143/openlp/bugs
Reviewer Review Type Date Requested Status
Andreas Preikschat (community) Approve
Jon Tibble (community) Approve
Raoul Snyman Approve
Review via email: mp+53213@code.launchpad.net

This proposal supersedes a proposal from 2011-03-14.

Description of the change

Blank video at the end when it is finished.
Additional comments.
Hook for later development work.

To post a comment you must log in.
Revision history for this message
Raoul Snyman (raoul-snyman) wrote : Posted in a previous version of this proposal

What is "200" in terms of "setTickInterval"? Can you maybe just put a comment in that explains what the unit is for that number? i.e.

    # Need the timer to trigger
    if self.serviceItem.start_time != 0:
        # Set the tick interval to 200ms
        self.mediaObject.setTickInterval(200)

Note: I see afterwards that you explain it in the docstring for the slot method, but that doesn't really have a bearing on the actual interval.

review: Needs Information
Revision history for this message
Raoul Snyman (raoul-snyman) :
review: Approve
Revision history for this message
Jon Tibble (meths) :
review: Approve
Revision history for this message
Andreas Preikschat (googol-deactivatedaccount) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'openlp/core/ui/maindisplay.py'
2--- openlp/core/ui/maindisplay.py 2011-03-09 18:14:50 +0000
3+++ openlp/core/ui/maindisplay.py 2011-03-14 10:15:25 +0000
4@@ -67,6 +67,7 @@
5 self.isLive = live
6 self.alertTab = None
7 self.hideMode = None
8+ self.videoHide = False
9 self.override = {}
10 mainIcon = build_icon(u':/icon/openlp-logo-16x16.png')
11 self.setWindowIcon(mainIcon)
12@@ -90,7 +91,7 @@
13 """
14 Set up and build the output screen
15 """
16- log.debug(u'Start setup for monitor %s (live = %s)' %
17+ log.debug(u'Start setup for monitor %s (live = %s)' %
18 (self.screens.monitor_number, self.isLive))
19 self.usePhonon = QtCore.QSettings().value(
20 u'media/use phonon', QtCore.QVariant(True)).toBool()
21@@ -110,6 +111,12 @@
22 QtCore.QObject.connect(self.mediaObject,
23 QtCore.SIGNAL(u'stateChanged(Phonon::State, Phonon::State)'),
24 self.videoStart)
25+ QtCore.QObject.connect(self.mediaObject,
26+ QtCore.SIGNAL(u'finished()'),
27+ self.videoFinished)
28+ QtCore.QObject.connect(self.mediaObject,
29+ QtCore.SIGNAL(u'tick(qint64)'),
30+ self.videoTick)
31 log.debug(u'Setup webView for monitor %s' % self.screens.monitor_number)
32 self.webView = QtWebKit.QWebView(self)
33 self.webView.setGeometry(0, 0,
34@@ -262,6 +269,7 @@
35 self.displayImage(self.serviceItem.bg_image_bytes)
36 else:
37 self.displayImage(None)
38+ # clear the cache
39 self.override = {}
40 # Update the preview frame.
41 if self.isLive:
42@@ -349,6 +357,10 @@
43 self.mediaObject.stop()
44 self.mediaObject.clearQueue()
45 self.mediaObject.setCurrentSource(Phonon.MediaSource(videoPath))
46+ # Need the timer to trigger set the trigger to 200ms
47+ # Value taken from web documentation.
48+ if self.serviceItem.start_time != 0:
49+ self.mediaObject.setTickInterval(200)
50 self.mediaObject.play()
51 self.webView.setVisible(False)
52 self.videoWidget.setVisible(True)
53@@ -363,8 +375,26 @@
54 Start the video at a predetermined point.
55 """
56 if newState == Phonon.PlayingState:
57+ # set start time in milliseconds
58 self.mediaObject.seek(self.serviceItem.start_time * 1000)
59
60+ def videoFinished(self):
61+ """
62+ Blank the Video when it has finished so the final frame is not left
63+ hanging
64+ """
65+ self.videoStop()
66+ self.hideDisplay(HideMode.Blank)
67+ self.phononActive = False
68+ self.videoHide = True
69+
70+ def videoTick(self, tick):
71+ """
72+ Triggered on video tick every 200 milli seconds
73+ Will be used to manage stop time later
74+ """
75+ pass
76+
77 def isWebLoaded(self):
78 """
79 Called by webView event to show display is fully loaded
80@@ -422,10 +452,12 @@
81 if u'video' in self.override:
82 Receiver.send_message(u'video_background_replaced')
83 self.override = {}
84+ # We have a different theme.
85 elif self.override[u'theme'] != serviceItem.themedata.theme_name:
86 Receiver.send_message(u'live_theme_changed')
87 self.override = {}
88 else:
89+ # replace the background
90 background = self.imageManager. \
91 get_image_bytes(self.override[u'image'])
92 if self.serviceItem.themedata.background_filename:
93@@ -441,6 +473,10 @@
94 # if was hidden keep it hidden
95 if self.hideMode and self.isLive:
96 self.hideDisplay(self.hideMode)
97+ # display hidden for video end we have a new item so must be shown
98+ if self.videoHide and self.isLive:
99+ self.videoHide = False
100+ self.showDisplay()
101 self.__hideMouse()
102
103 def footer(self, text):