From ebf5777a02b29c79aa863f13703710fdcbffcc42 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Fri, 29 Apr 2011 09:58:10 +0100 Subject: [PATCH 1/9] Fix bug 773036 --- openlp/plugins/presentations/lib/mediaitem.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index 74ff3fea8..6428ae535 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -285,7 +285,7 @@ class PresentationMediaItem(MediaManagerItem): "supports" the extension. If none found, then look for a controller which "also supports" it instead. """ - filetype = filename.split(u'.')[1] + filetype = filename.split(u'.')[-1] if not filetype: return None for controller in self.controllers: @@ -296,4 +296,4 @@ class PresentationMediaItem(MediaManagerItem): if self.controllers[controller].enabled(): if filetype in self.controllers[controller].alsosupports: return controller - return None \ No newline at end of file + return None From ddf9c3b61b1d3d30549a97ff51879e0e517859b0 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Fri, 29 Apr 2011 20:24:21 +0100 Subject: [PATCH 2/9] Remove Var from last merge --- openlp/core/lib/renderer.py | 2 +- openlp/core/ui/maindisplay.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 6e122af81..bba85d176 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -71,7 +71,7 @@ class Renderer(object): log.debug(u'Initilisation started') self.screens = screens self.image_manager = ImageManager() - self.display = MainDisplay(self, screens, False, False) + self.display = MainDisplay(self, screens, False) self.display.imageManager = self.image_manager self.theme_manager = theme_manager self.service_theme = u'' diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 5eec90682..5fd066a12 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -60,12 +60,11 @@ class MainDisplay(DisplayWidget): """ This is the display screen. """ - def __init__(self, parent, screens, live, needsPhonon=True): + def __init__(self, parent, screens, live): DisplayWidget.__init__(self, live, parent=None) self.parent = parent self.screens = screens self.isLive = live - self.needsPhonon = needsPhonon self.alertTab = None self.hideMode = None self.videoHide = False From 69395170e15b79ee8573fcf1e2655b501f1de38c Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Fri, 29 Apr 2011 21:08:22 +0100 Subject: [PATCH 3/9] minor cleanups --- openlp/plugins/media/lib/mediaitem.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openlp/plugins/media/lib/mediaitem.py b/openlp/plugins/media/lib/mediaitem.py index 52f689f41..6e616a9ef 100644 --- a/openlp/plugins/media/lib/mediaitem.py +++ b/openlp/plugins/media/lib/mediaitem.py @@ -132,6 +132,8 @@ class MediaMediaItem(MediaManagerItem): unicode(translate('MediaPlugin.MediaItem', 'The file %s no longer exists.')) % filename) return False + if not self.mediaObject: + self.mediaObject = Phonon.MediaObject(self) self.mediaObject.stop() self.mediaObject.clearQueue() self.mediaObject.setCurrentSource(Phonon.MediaSource(filename)) @@ -217,4 +219,3 @@ class MediaMediaItem(MediaManagerItem): def createPhonon(self): if not self.mediaObject: self.mediaObject = Phonon.MediaObject(self) - From a9df8468aa6f6b6c2a0d0cb1416204703f30f6d4 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Fri, 29 Apr 2011 23:29:29 +0100 Subject: [PATCH 4/9] Minimized impress troubles --- .../presentations/lib/impresscontroller.py | 20 +++++++++++-------- openlp/plugins/presentations/lib/mediaitem.py | 2 +- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/openlp/plugins/presentations/lib/impresscontroller.py b/openlp/plugins/presentations/lib/impresscontroller.py index c84f0ff1e..74ebb5672 100644 --- a/openlp/plugins/presentations/lib/impresscontroller.py +++ b/openlp/plugins/presentations/lib/impresscontroller.py @@ -38,6 +38,8 @@ import logging import os import time +from openlp.core.lib import Receiver + if os.name == u'nt': from win32com.client import Dispatch import pywintypes @@ -219,7 +221,6 @@ class ImpressDocument(PresentationDocument): The file name of the presentatios to the run. """ log.debug(u'Load Presentation OpenOffice') - #print "s.dsk1 ", self.desktop if os.name == u'nt': desktop = self.controller.get_com_desktop() if desktop is None: @@ -234,7 +235,6 @@ class ImpressDocument(PresentationDocument): return False self.desktop = desktop properties = [] - properties.append(self.create_property(u'Minimized', True)) properties = tuple(properties) try: self.document = desktop.loadComponentFromURL(url, u'_blank', @@ -242,6 +242,9 @@ class ImpressDocument(PresentationDocument): except: log.exception(u'Failed to load presentation %s' % url) return False + window = self.document.getCurrentController().getFrame() \ + .getContainerWindow() + window.setPosSize(0, 0, 200, 400, 12) self.presentation = self.document.getPresentation() self.presentation.Display = \ self.controller.plugin.renderer.screens.current_display + 1 @@ -387,14 +390,15 @@ class ImpressDocument(PresentationDocument): log.debug(u'start presentation OpenOffice') if self.control is None or not self.control.isRunning(): self.presentation.start() - # start() returns before the getCurrentComponent is ready. - # Try for 5 seconds + self.control = self.presentation.getController() + # start() returns before the Component is ready. + # Try for 30 seconds i = 1 - while self.desktop.getCurrentComponent() is None and i < 50: + while not self.control and i < 300: + Receiver.send_message(u'openlp_process_events') time.sleep(0.1) i = i + 1 - self.control = \ - self.desktop.getCurrentComponent().Presentation.getController() + self.control = self.presentation.getController() else: self.control.activate() self.goto_slide(1) @@ -463,4 +467,4 @@ class ImpressDocument(PresentationDocument): shape = page.getByIndex(idx) if shape.supportsService("com.sun.star.drawing.Text"): text += shape.getString() + '\n' - return text \ No newline at end of file + return text diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index 6428ae535..a00fe1879 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -285,7 +285,7 @@ class PresentationMediaItem(MediaManagerItem): "supports" the extension. If none found, then look for a controller which "also supports" it instead. """ - filetype = filename.split(u'.')[-1] + filetype = os.path.splitext(filename)[1] if not filetype: return None for controller in self.controllers: From 6584e6a1eda537f461be40e08e8fb4661fcca8be Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Fri, 29 Apr 2011 23:31:39 +0100 Subject: [PATCH 5/9] process events not required --- openlp/plugins/presentations/lib/impresscontroller.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/openlp/plugins/presentations/lib/impresscontroller.py b/openlp/plugins/presentations/lib/impresscontroller.py index 74ebb5672..6d8643611 100644 --- a/openlp/plugins/presentations/lib/impresscontroller.py +++ b/openlp/plugins/presentations/lib/impresscontroller.py @@ -38,8 +38,6 @@ import logging import os import time -from openlp.core.lib import Receiver - if os.name == u'nt': from win32com.client import Dispatch import pywintypes @@ -392,10 +390,9 @@ class ImpressDocument(PresentationDocument): self.presentation.start() self.control = self.presentation.getController() # start() returns before the Component is ready. - # Try for 30 seconds + # Try for 15 seconds i = 1 - while not self.control and i < 300: - Receiver.send_message(u'openlp_process_events') + while not self.control and i < 150: time.sleep(0.1) i = i + 1 self.control = self.presentation.getController() From 9a88a7fcf71600c4fff3355dd249772f8ed05849 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 30 Apr 2011 06:43:41 +0100 Subject: [PATCH 6/9] Logging and comments --- openlp/plugins/media/lib/mediaitem.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openlp/plugins/media/lib/mediaitem.py b/openlp/plugins/media/lib/mediaitem.py index 6e616a9ef..70c2bf304 100644 --- a/openlp/plugins/media/lib/mediaitem.py +++ b/openlp/plugins/media/lib/mediaitem.py @@ -132,6 +132,7 @@ class MediaMediaItem(MediaManagerItem): unicode(translate('MediaPlugin.MediaItem', 'The file %s no longer exists.')) % filename) return False + # Guard incase the event fails to get object created. if not self.mediaObject: self.mediaObject = Phonon.MediaObject(self) self.mediaObject.stop() @@ -217,5 +218,6 @@ class MediaMediaItem(MediaManagerItem): self.listView.addItem(item_name) def createPhonon(self): + log.debug(u'CreatePhonon') if not self.mediaObject: self.mediaObject = Phonon.MediaObject(self) From 8bec30cf9c79bdf185ccd0655d6a9dc32b82a255 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Sat, 30 Apr 2011 08:31:03 +0100 Subject: [PATCH 7/9] Make Impress changes windows specific --- .../plugins/presentations/lib/impresscontroller.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/openlp/plugins/presentations/lib/impresscontroller.py b/openlp/plugins/presentations/lib/impresscontroller.py index 6d8643611..a67d8f818 100644 --- a/openlp/plugins/presentations/lib/impresscontroller.py +++ b/openlp/plugins/presentations/lib/impresscontroller.py @@ -233,6 +233,10 @@ class ImpressDocument(PresentationDocument): return False self.desktop = desktop properties = [] + if os.name != u'nt': + # Recent versions of Impress on Windows won't start the presentation + # if it starts as minimized. It seems OK on Linux though. + properties.append(self.create_property(u'Minimized', True)) properties = tuple(properties) try: self.document = desktop.loadComponentFromURL(url, u'_blank', @@ -240,9 +244,12 @@ class ImpressDocument(PresentationDocument): except: log.exception(u'Failed to load presentation %s' % url) return False - window = self.document.getCurrentController().getFrame() \ - .getContainerWindow() - window.setPosSize(0, 0, 200, 400, 12) + if os.name == u'nt': + # As we can't start minimized the Impress window gets in the way. + # Either window.setPosSize(0, 0, 200, 400, 12) or .setVisible(False) + window = self.document.getCurrentController().getFrame() \ + .getContainerWindow() + window.setVisible(False) self.presentation = self.document.getPresentation() self.presentation.Display = \ self.controller.plugin.renderer.screens.current_display + 1 From 3b805f63748f6e3014e89a67fa1be05c7a872481 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 30 Apr 2011 08:42:20 +0100 Subject: [PATCH 8/9] Add new thread at startup time --- openlp.pyw | 5 +++-- openlp/core/utils/__init__.py | 13 +++++++++++++ openlp/plugins/media/lib/mediaitem.py | 3 --- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 425d3c874..0d4e8c200 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -46,7 +46,7 @@ from openlp.core.ui.firsttimeform import FirstTimeForm from openlp.core.ui.exceptionform import ExceptionForm from openlp.core.ui import SplashScreen, ScreenList from openlp.core.utils import AppLocation, LanguageManager, VersionThread, \ - get_application_version + get_application_version, DelayStartThread log = logging.getLogger() @@ -130,6 +130,7 @@ class OpenLP(QtGui.QApplication): u'general/update check', QtCore.QVariant(True)).toBool() if update_check: VersionThread(self.mainWindow).start() + DelayStartThread(self.mainWindow).start() return self.exec_() def isAlreadyRunning(self): @@ -250,4 +251,4 @@ if __name__ == u'__main__': """ Instantiate and run the application. """ - main() \ No newline at end of file + main() diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index d08a63c4b..3051301d6 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -99,6 +99,19 @@ class VersionThread(QtCore.QThread): local_version.get(u'revision') and \ remote_version[u'revision'] > local_version[u'revision']: Receiver.send_message(u'openlp_version_check', u'%s' % version) + + +class DelayStartThread(QtCore.QThread): + """ + A special Qt thread class to build things after OpenLP has started + """ + def __init__(self, parent): + QtCore.QThread.__init__(self, parent) + + def run(self): + """ + Run the thread. + """ Receiver.send_message(u'openlp_phonon_creation') diff --git a/openlp/plugins/media/lib/mediaitem.py b/openlp/plugins/media/lib/mediaitem.py index 70c2bf304..e494b9e5e 100644 --- a/openlp/plugins/media/lib/mediaitem.py +++ b/openlp/plugins/media/lib/mediaitem.py @@ -132,9 +132,6 @@ class MediaMediaItem(MediaManagerItem): unicode(translate('MediaPlugin.MediaItem', 'The file %s no longer exists.')) % filename) return False - # Guard incase the event fails to get object created. - if not self.mediaObject: - self.mediaObject = Phonon.MediaObject(self) self.mediaObject.stop() self.mediaObject.clearQueue() self.mediaObject.setCurrentSource(Phonon.MediaSource(filename)) From f472807251e6926bcefd3fd3dabe8984085dba67 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Sat, 30 Apr 2011 17:11:28 +0100 Subject: [PATCH 9/9] os.path.splitext includes the . in the extension! --- openlp/plugins/presentations/lib/mediaitem.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index 22db8f39f..c3a62e32a 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -293,7 +293,7 @@ class PresentationMediaItem(MediaManagerItem): "supports" the extension. If none found, then look for a controller which "also supports" it instead. """ - filetype = os.path.splitext(filename)[1] + filetype = os.path.splitext(filename)[1][1:] if not filetype: return None for controller in self.controllers: