Merge lp:~googol-deactivatedaccount/openlp/bug-966086 into lp:openlp

Proposed by Andreas Preikschat
Status: Merged
Approved by: Raoul Snyman
Approved revision: 1962
Merged at revision: 1956
Proposed branch: lp:~googol-deactivatedaccount/openlp/bug-966086
Merge into: lp:openlp
Diff against target: 304 lines (+87/-80)
3 files modified
openlp/core/ui/media/__init__.py (+8/-5)
openlp/core/ui/media/mediacontroller.py (+53/-61)
openlp/core/ui/media/vlcplayer.py (+26/-14)
To merge this branch: bzr merge lp:~googol-deactivatedaccount/openlp/bug-966086
Reviewer Review Type Date Requested Status
Tim Bentley Approve
Raoul Snyman Pending
Review via email: mp+103987@code.launchpad.net

This proposal supersedes a proposal from 2012-04-28.

Description of the change

Hello,

- various clean ups
- fixed bug #966086

NOTE: I wrote the the vlc.py authors to double check if 1.1.0 is the lowest version it works with.

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

Confused with the do not merge comment.

review: Approve
Revision history for this message
Andreas Preikschat (googol-deactivatedaccount) wrote :

Here the answers:
    I have generated vlc.py with the vlc-1.1.7 and vlc-1.1.13 header (on MacOS X) tested that with the 1.1.7 and 1.1.13 VLC library (on Windows).

    Also, I did use vlc-0.9.10 (on MacOS X) but did not keep any results for that version.

And:
   on the http://advene.org/download/python-ctypes/ you will find versions
   of the module for 1.0, 1.1 and 2.0. They are not compatible because of
   some API changes between these versions.

I leave the version to 1.1.0 (because according to http://support.openlp.org/issues/499#note-10 vlc.py works with 1.1.0 and newer). There is a new vlc.py version (I am going to upaded it soon). However, comparing the files it looks like that we are using the 2.0.x version (but it still seems to work with VLC 1.1.0).

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'openlp/core/ui/media/__init__.py'
2--- openlp/core/ui/media/__init__.py 2012-03-21 19:30:18 +0000
3+++ openlp/core/ui/media/__init__.py 2012-04-28 16:25:27 +0000
4@@ -69,12 +69,13 @@
5 def get_media_players():
6 """
7 This method extract the configured media players and overridden player from
8- the settings
9+ the settings.
10
11 ``players_list``
12- this is a python list with all active media players
13+ A list with all active media players.
14+
15 ``overridden_player``
16- here an special media player is choosen for all media actions
17+ Here an special media player is chosen for all media actions.
18 """
19 log.debug(u'get_media_players')
20 players = unicode(QtCore.QSettings().value(u'media/players').toString())
21@@ -92,15 +93,17 @@
22 players_list = players.replace(u'[', u'').replace(u']', u'').split(u',')
23 return players_list, overridden_player
24
25+
26 def set_media_players(players_list, overridden_player=u'auto'):
27 """
28 This method saves the configured media players and overridden player to the
29 settings
30
31 ``players_list``
32- this is a python list with all active media players
33+ A list with all active media players.
34+
35 ``overridden_player``
36- here an special media player is choosen for all media actions
37+ Here an special media player is chosen for all media actions.
38 """
39 log.debug(u'set_media_players')
40 players = u','.join(players_list)
41
42=== modified file 'openlp/core/ui/media/mediacontroller.py'
43--- openlp/core/ui/media/mediacontroller.py 2012-03-21 19:30:18 +0000
44+++ openlp/core/ui/media/mediacontroller.py 2012-04-28 16:25:27 +0000
45@@ -84,10 +84,7 @@
46 def set_active_players(self):
47 savedPlayers = get_media_players()[0]
48 for player in self.mediaPlayers.keys():
49- if player in savedPlayers:
50- self.mediaPlayers[player].isActive = True
51- else:
52- self.mediaPlayers[player].isActive = False
53+ self.mediaPlayers[player].isActive = player in savedPlayers
54
55 def register_controllers(self, controller):
56 """
57@@ -106,8 +103,8 @@
58 AppLocation.get_directory(AppLocation.AppDir),
59 u'core', u'ui', u'media')
60 for filename in os.listdir(controller_dir):
61- if filename.endswith(u'player.py') and \
62- not filename == 'media_player.py':
63+ if filename.endswith(u'player.py') and not \
64+ filename == 'media_player.py':
65 path = os.path.join(controller_dir, filename)
66 if os.path.isfile(path):
67 modulename = u'openlp.core.ui.media.' + \
68@@ -122,38 +119,36 @@
69 for controller_class in controller_classes:
70 controller = controller_class(self)
71 self.register_controllers(controller)
72- if self.mediaPlayers:
73- savedPlayers, overriddenPlayer = get_media_players()
74- invalidMediaPlayers = [mediaPlayer for mediaPlayer in savedPlayers \
75- if not mediaPlayer in self.mediaPlayers or \
76- not self.mediaPlayers[mediaPlayer].check_available()]
77- if len(invalidMediaPlayers) > 0:
78- for invalidPlayer in invalidMediaPlayers:
79- savedPlayers.remove(invalidPlayer)
80- set_media_players(savedPlayers, overriddenPlayer)
81- self.set_active_players()
82- return True
83- else:
84+ if not self.mediaPlayers:
85 return False
86+ savedPlayers, overriddenPlayer = get_media_players()
87+ invalidMediaPlayers = [mediaPlayer for mediaPlayer in savedPlayers
88+ if not mediaPlayer in self.mediaPlayers or not
89+ self.mediaPlayers[mediaPlayer].check_available()]
90+ if invalidMediaPlayers:
91+ for invalidPlayer in invalidMediaPlayers:
92+ savedPlayers.remove(invalidPlayer)
93+ set_media_players(savedPlayers, overriddenPlayer)
94+ self.set_active_players()
95+ return True
96
97 def video_state(self):
98 """
99 Check if there is a running media Player and do updating stuff (e.g.
100 update the UI)
101 """
102- if len(self.curDisplayMediaPlayer.keys()) == 0:
103+ if not self.curDisplayMediaPlayer.keys():
104 self.timer.stop()
105 else:
106 for display in self.curDisplayMediaPlayer.keys():
107 self.curDisplayMediaPlayer[display].resize(display)
108 self.curDisplayMediaPlayer[display].update_ui(display)
109- if self.curDisplayMediaPlayer[display] \
110- .state == MediaState.Playing:
111+ if self.curDisplayMediaPlayer[display].state == \
112+ MediaState.Playing:
113 return
114 # no players are active anymore
115 for display in self.curDisplayMediaPlayer.keys():
116- if self.curDisplayMediaPlayer[display] \
117- .state != MediaState.Paused:
118+ if self.curDisplayMediaPlayer[display].state != MediaState.Paused:
119 display.controller.seekSlider.setSliderPosition(0)
120 self.timer.stop()
121
122@@ -333,8 +328,7 @@
123 'Unsupported File')))
124 return False
125 # dont care about actual theme, set a black background
126- if controller.isLive and ( \
127- controller.media_info.is_background == False):
128+ if controller.isLive and not controller.media_info.is_background:
129 display.frame.evaluateJavaScript(u'show_video( \
130 "setBackBoard", null, null, null,"visible");')
131 # now start playing
132@@ -395,7 +389,7 @@
133 """
134 Responds to the request to play a loaded video
135
136- ``msg``
137+ ``msg``
138 First element is the controller which should be used
139 """
140 log.debug(u'video_play')
141@@ -497,15 +491,15 @@
142 First element is the boolean for Live indication
143 """
144 isLive = msg[1]
145- if isLive:
146- controller = self.parent.liveController
147- for display in self.curDisplayMediaPlayer.keys():
148- if display.controller == controller:
149- if self.curDisplayMediaPlayer[display] \
150- .state == MediaState.Playing:
151- self.curDisplayMediaPlayer[display].pause(display)
152- self.curDisplayMediaPlayer[display] \
153- .set_visible(display, False)
154+ if not isLive:
155+ return
156+ controller = self.parent.liveController
157+ for display in self.curDisplayMediaPlayer.keys():
158+ if display.controller != controller or \
159+ self.curDisplayMediaPlayer[display].state != MediaState.Playing:
160+ continue
161+ self.curDisplayMediaPlayer[display].pause(display)
162+ self.curDisplayMediaPlayer[display].set_visible(display, False)
163
164 def video_blank(self, msg):
165 """
166@@ -517,16 +511,16 @@
167 """
168 isLive = msg[1]
169 hide_mode = msg[2]
170- if isLive:
171- Receiver.send_message(u'live_display_hide', hide_mode)
172- controller = self.parent.liveController
173- for display in self.curDisplayMediaPlayer.keys():
174- if display.controller == controller:
175- if self.curDisplayMediaPlayer[display] \
176- .state == MediaState.Playing:
177- self.curDisplayMediaPlayer[display].pause(display)
178- self.curDisplayMediaPlayer[display] \
179- .set_visible(display, False)
180+ if not isLive:
181+ return
182+ Receiver.send_message(u'live_display_hide', hide_mode)
183+ controller = self.parent.liveController
184+ for display in self.curDisplayMediaPlayer.keys():
185+ if display.controller != controller or \
186+ self.curDisplayMediaPlayer[display].state != MediaState.Playing:
187+ continue
188+ self.curDisplayMediaPlayer[display].pause(display)
189+ self.curDisplayMediaPlayer[display].set_visible(display, False)
190
191 def video_unblank(self, msg):
192 """
193@@ -538,19 +532,18 @@
194 """
195 Receiver.send_message(u'live_display_show')
196 isLive = msg[1]
197- if isLive:
198- controller = self.parent.liveController
199- for display in self.curDisplayMediaPlayer.keys():
200- if display.controller == controller:
201- if self.curDisplayMediaPlayer[display] \
202- .state == MediaState.Paused:
203- if self.curDisplayMediaPlayer[display].play(display):
204- self.curDisplayMediaPlayer[display] \
205- .set_visible(display, True)
206- # Start Timer for ui updates
207- if not self.timer.isActive():
208- self.timer.start()
209-
210+ if not isLive:
211+ return
212+ controller = self.parent.liveController
213+ for display in self.curDisplayMediaPlayer.keys():
214+ if display.controller != controller or \
215+ self.curDisplayMediaPlayer[display].state != MediaState.Paused:
216+ continue
217+ if self.curDisplayMediaPlayer[display].play(display):
218+ self.curDisplayMediaPlayer[display].set_visible(display, True)
219+ # Start Timer for ui updates
220+ if not self.timer.isActive():
221+ self.timer.start()
222
223 def get_audio_extensions_list(self):
224 audio_list = []
225@@ -565,9 +558,8 @@
226 video_list = []
227 for player in self.mediaPlayers.values():
228 if player.isActive:
229- for item in player.video_extensions_list:
230- if not item in video_list:
231- video_list.append(item)
232+ video_list.extend([item for item in player.video_extensions_list
233+ if item not in video_list])
234 return video_list
235
236 def finalise(self):
237
238=== modified file 'openlp/core/ui/media/vlcplayer.py'
239--- openlp/core/ui/media/vlcplayer.py 2012-03-13 19:54:16 +0000
240+++ openlp/core/ui/media/vlcplayer.py 2012-04-28 16:25:27 +0000
241@@ -25,29 +25,41 @@
242 # Temple Place, Suite 330, Boston, MA 02111-1307 USA #
243 ###############################################################################
244
245+from datetime import datetime
246+from distutils.version import LooseVersion
247 import logging
248-import sys, os
249-from datetime import datetime
250+import os
251+import sys
252+
253+from PyQt4 import QtCore, QtGui
254+
255+from openlp.core.lib import Receiver
256+from openlp.core.lib.mediaplayer import MediaPlayer
257+from openlp.core.ui.media import MediaState
258+
259+log = logging.getLogger(__name__)
260+
261+VLC_AVAILABLE = False
262 try:
263 import vlc
264- vlc_available = bool(vlc.get_default_instance())
265+ VLC_AVAILABLE = bool(vlc.get_default_instance())
266 except (ImportError, NameError):
267- vlc_available = False
268+ pass
269 except OSError, e:
270 if sys.platform.startswith('win'):
271- if isinstance(e, WindowsError) and e.winerror == 126:
272- vlc_available = False
273- else:
274+ if not isinstance(e, WindowsError) and e.winerror != 126:
275 raise
276 else:
277 raise
278
279-from PyQt4 import QtCore, QtGui
280-from openlp.core.lib import Receiver
281-from openlp.core.lib.mediaplayer import MediaPlayer
282-from openlp.core.ui.media import MediaState
283-
284-log = logging.getLogger(__name__)
285+if VLC_AVAILABLE:
286+ try:
287+ version = vlc.libvlc_get_version()
288+ except:
289+ version = u'0.0.0'
290+ if LooseVersion(version) < LooseVersion('1.1.0'):
291+ VLC_AVAILABLE = False
292+ log.debug(u'VLC could not be loaded: %s' % version)
293
294 AUDIO_EXT = [
295 u'*.mp3'
296@@ -128,7 +140,7 @@
297 self.hasOwnWidget = True
298
299 def check_available(self):
300- return vlc_available
301+ return VLC_AVAILABLE
302
303 def load(self, display):
304 log.debug(u'load vid in Vlc Controller')