diff --git a/openlp.pyw b/openlp.pyw index 7fd7fcbe1..80e0db6af 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)-20s %(levelname)-8s %(message)s')) diff --git a/openlp/.version b/openlp/.version index 5f831df2d..4489023a7 100644 --- a/openlp/.version +++ b/openlp/.version @@ -1 +1 @@ -1.9.0-bzr721 +1.9.0-bzr722 diff --git a/openlp/plugins/presentations/lib/impresscontroller.py b/openlp/plugins/presentations/lib/impresscontroller.py index f7dafbf27..196763cce 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 9aebb4ab5..7fed27145 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 4854cbb73..2b2375912 100644 --- a/openlp/plugins/presentations/lib/messagelistener.py +++ b/openlp/plugins/presentations/lib/messagelistener.py @@ -154,8 +154,9 @@ class MessageListener(object): """ 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 @@ -188,6 +189,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 0408e2dc1..bbd2c528a 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 671fefe70..d3332f68c 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 b862de514..0783d40f4 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/version.txt b/version.txt index fccf41cd0..8fdd0d461 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.9.0-721 +1.9.0-723