From bfd3f28c6ed71bedeb3ec5987c1342fc0f3340d2 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Tue, 2 Mar 2010 22:40:01 +0200 Subject: [PATCH 1/3] Create the config directory if it doesn't exist yet, in order to save the log file. --- openlp.pyw | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/openlp.pyw b/openlp.pyw index 5c18486b6..3910156ce 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -158,7 +158,10 @@ def main(): parser.add_option("-s", "--style", dest="style", help="Set the Qt4 style (passed directly to Qt4).") # Set up logging - filename = os.path.join(get_config_directory(), u'openlp.log') + log_path = get_config_directory() + if not os.path.exists(log_path): + os.makedirs(log_path) + filename = os.path.join(log_path, u'openlp.log') logfile = FileHandler(filename, u'w') logfile.setFormatter(logging.Formatter( u'%(asctime)s %(name)-15s %(levelname)-8s %(message)s')) From 77838615b36cdc7563e64f17d0b2a76bd66723b4 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Fri, 5 Mar 2010 08:36:32 +0000 Subject: [PATCH 2/3] Presentations - close app down correctly, and mode to automatically detect file type --- .../presentations/lib/impresscontroller.py | 13 ++++++-- openlp/plugins/presentations/lib/mediaitem.py | 32 ++++++++++++++++--- .../presentations/lib/messagelistener.py | 11 +++++-- .../presentations/lib/powerpointcontroller.py | 4 ++- .../presentations/lib/pptviewcontroller.py | 2 +- .../lib/presentationcontroller.py | 1 + .../presentations/presentationplugin.py | 14 ++++++++ 7 files changed, 67 insertions(+), 10 deletions(-) diff --git a/openlp/plugins/presentations/lib/impresscontroller.py b/openlp/plugins/presentations/lib/impresscontroller.py index 75108d850..d365747e3 100644 --- a/openlp/plugins/presentations/lib/impresscontroller.py +++ b/openlp/plugins/presentations/lib/impresscontroller.py @@ -25,6 +25,7 @@ # OOo API documentation: # http://api.openoffice.org/docs/common/ref/com/sun/star/presentation/XSlideShowController.html +# http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/ProUNO/Basic/Getting_Information_about_UNO_Objects#Inspecting_interfaces_during_debugging # http://docs.go-oo.org/sd/html/classsd_1_1SlideShow.html # http://www.oooforum.org/forum/viewtopic.phtml?t=5252 # http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/Working_with_Presentations @@ -62,7 +63,8 @@ class ImpressController(PresentationController): """ log.debug(u'Initialising') PresentationController.__init__(self, plugin, u'Impress') - self.supports = [u'.odp', u'.ppt', u'.pps', u'.pptx', u'.ppsx'] + self.supports = [u'.odp'] + self.alsosupports = [u'.ppt', u'.pps', u'.pptx', u'.ppsx'] self.process = None self.desktop = None @@ -145,10 +147,17 @@ class ImpressController(PresentationController): doc.close_presentation() if os.name != u'nt': desktop = self.get_uno_desktop() + else: + desktop = self.get_com_desktop() + docs = desktop.getComponents() + if docs.hasElements(): + log.debug(u'OpenOffice not terminated') + else: try: desktop.terminate() + log.debug(u'OpenOffice killed') except: - pass + log.exception(u'Failed to terminate OpenOffice') def add_doc(self, name): log.debug(u'Add Doc OpenOffice') diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index 51f234f3d..963babbcd 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -56,7 +56,7 @@ class PresentationMediaItem(MediaManagerItem): # be instanced by the base MediaManagerItem self.ListViewWithDnD_class = PresentationListView MediaManagerItem.__init__(self, parent, icon, title) - self.message_listener = MessageListener(controllers) + self.message_listener = MessageListener(self) def initPluginNameVisible(self): self.PluginNameVisible = self.trUtf8('Presentation') @@ -66,7 +66,8 @@ class PresentationMediaItem(MediaManagerItem): fileType = u'' for controller in self.controllers: if self.controllers[controller].enabled: - for type in self.controllers[controller].supports: + types = self.controllers[controller].supports + self.controllers[controller].alsosupports + for type in types: if fileType.find(type) == -1: fileType += u'*%s ' % type self.OnNewFileMasks = self.trUtf8('Presentations (%s)' % fileType) @@ -106,6 +107,9 @@ class PresentationMediaItem(MediaManagerItem): #load the drop down selection if self.controllers[item].enabled: self.DisplayTypeComboBox.addItem(item) + if self.DisplayTypeComboBox.count > 1: + self.DisplayTypeComboBox.insertItem(0, u'Automatic') + self.DisplayTypeComboBox.setCurrentIndex(0) def loadList(self, list): currlist = self.getFileList() @@ -145,10 +149,16 @@ class PresentationMediaItem(MediaManagerItem): return False service_item.title = unicode(self.DisplayTypeComboBox.currentText()) service_item.shortname = unicode(self.DisplayTypeComboBox.currentText()) - controller = self.controllers[service_item.shortname] + shortname = service_item.shortname + for item in items: bitem = self.ListView.item(item.row()) filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString()) + if shortname==u'Automatic': + service_item.shortname = self.findControllerByType(filename) + if not service_item.shortname: + return False + controller = self.controllers[service_item.shortname] (path, name) = os.path.split(filename) doc = controller.add_doc(filename) if doc.get_slide_preview_file(1) is None: @@ -159,5 +169,19 @@ class PresentationMediaItem(MediaManagerItem): service_item.add_from_command(path, name, img) i = i + 1 img = doc.get_slide_preview_file(i) - controller.remove_doc(doc) + controller.remove_doc(doc) return True + + def findControllerByType(self, filename): + filetype = os.path.splitext(filename)[1] + if not filetype: + return None + for controller in self.controllers: + if self.controllers[controller].enabled: + if filetype in self.controllers[controller].supports: + return controller + for controller in self.controllers: + if self.controllers[controller].enabled: + if filetype in self.controllers[controller].alsosupports: + return controller + return None diff --git a/openlp/plugins/presentations/lib/messagelistener.py b/openlp/plugins/presentations/lib/messagelistener.py index 9065bf796..8f9d129dc 100644 --- a/openlp/plugins/presentations/lib/messagelistener.py +++ b/openlp/plugins/presentations/lib/messagelistener.py @@ -156,8 +156,9 @@ class MessageListener(object): log = logging.getLogger(u'MessageListener') log.info(u'Message Listener loaded') - def __init__(self, controllers): - self.controllers = controllers + def __init__(self, mediaitem): + self.controllers = mediaitem.controllers + self.mediaitem = mediaitem self.previewHandler = Controller(False) self.liveHandler = Controller(True) # messages are sent from core.ui.slidecontroller @@ -190,6 +191,12 @@ class MessageListener(object): """ log.debug(u'Startup called with message %s' % message) self.handler, file, isLive = self.decodeMessage(message) + filetype = os.path.splitext(file)[1][1:] + if self.handler==u'Automatic': + self.handler = self.mediaitem.findControllerByType(file) + if not self.handler: + return + if isLive: self.liveHandler.addHandler(self.controllers[self.handler], file) else: diff --git a/openlp/plugins/presentations/lib/powerpointcontroller.py b/openlp/plugins/presentations/lib/powerpointcontroller.py index 64c435ebf..b0c6a689c 100644 --- a/openlp/plugins/presentations/lib/powerpointcontroller.py +++ b/openlp/plugins/presentations/lib/powerpointcontroller.py @@ -52,7 +52,7 @@ class PowerpointController(PresentationController): """ log.debug(u'Initialising') PresentationController.__init__(self, plugin, u'Powerpoint') - self.supports = [u'.ppt', u'.pps'] + self.supports = [u'.ppt', u'.pps', u'.pptx', u'.ppsx'] self.process = None def check_available(self): @@ -100,6 +100,8 @@ class PowerpointController(PresentationController): doc.close_presentation() if self.process is None: return + if self.process.Presentations.Count > 0: + return try: self.process.Quit() except: diff --git a/openlp/plugins/presentations/lib/pptviewcontroller.py b/openlp/plugins/presentations/lib/pptviewcontroller.py index ddfbbd204..72c7cd5c1 100644 --- a/openlp/plugins/presentations/lib/pptviewcontroller.py +++ b/openlp/plugins/presentations/lib/pptviewcontroller.py @@ -49,7 +49,7 @@ class PptviewController(PresentationController): log.debug(u'Initialising') self.process = None PresentationController.__init__(self, plugin, u'Powerpoint Viewer') - self.supports = [u'.ppt', u'.pps'] + self.supports = [u'.ppt', u'.pps', u'.pptx', u'.ppsx'] def check_available(self): """ diff --git a/openlp/plugins/presentations/lib/presentationcontroller.py b/openlp/plugins/presentations/lib/presentationcontroller.py index 0818c6b4e..e069fce84 100644 --- a/openlp/plugins/presentations/lib/presentationcontroller.py +++ b/openlp/plugins/presentations/lib/presentationcontroller.py @@ -93,6 +93,7 @@ class PresentationController(object): Name of the application, to appear in the application """ self.supports = [] + self.alsosupports = [] self.docs = [] self.plugin = plugin self.name = name diff --git a/openlp/plugins/presentations/presentationplugin.py b/openlp/plugins/presentations/presentationplugin.py index 7103a3a2c..b7fe68153 100644 --- a/openlp/plugins/presentations/presentationplugin.py +++ b/openlp/plugins/presentations/presentationplugin.py @@ -114,3 +114,17 @@ class PresentationPlugin(Plugin): 'programs. The choice of available presentation programs is ' 'available to the user in a drop down box.') return about_text + + def find_controller_by_type(self, filename): + filetype = os.path.splitext(filename)[1][1:] + if not filetype: + return None + for controller in self.controllers: + if self.controllers[controller].enabled: + if filetype in self.controllers[controller].supports: + return controller + for controller in self.controllers: + if self.controllers[controller].enabled: + if filetype in self.controllers[self.handler].alsosupports: + return controller + return None From edad400a737974fd40fe79e19b6819ce1ffd4ce0 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Fri, 5 Mar 2010 19:50:51 +0000 Subject: [PATCH 3/3] Minor fixes --- openlp/plugins/presentations/lib/mediaitem.py | 2 +- openlp/plugins/presentations/presentationplugin.py | 14 -------------- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index addfbcc76..7fed27145 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -107,7 +107,7 @@ class PresentationMediaItem(MediaManagerItem): #load the drop down selection if self.controllers[item].enabled: self.DisplayTypeComboBox.addItem(item) - if self.DisplayTypeComboBox.count > 1: + if self.DisplayTypeComboBox.count() > 1: self.DisplayTypeComboBox.insertItem(0, u'Automatic') self.DisplayTypeComboBox.setCurrentIndex(0) diff --git a/openlp/plugins/presentations/presentationplugin.py b/openlp/plugins/presentations/presentationplugin.py index a7fa3bb6c..061eb737f 100644 --- a/openlp/plugins/presentations/presentationplugin.py +++ b/openlp/plugins/presentations/presentationplugin.py @@ -114,17 +114,3 @@ class PresentationPlugin(Plugin): 'programs. The choice of available presentation programs is ' 'available to the user in a drop down box.') return about_text - - def find_controller_by_type(self, filename): - filetype = os.path.splitext(filename)[1][1:] - if not filetype: - return None - for controller in self.controllers: - if self.controllers[controller].enabled: - if filetype in self.controllers[controller].supports: - return controller - for controller in self.controllers: - if self.controllers[controller].enabled: - if filetype in self.controllers[self.handler].alsosupports: - return controller - return None