← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~j-corwin/openlp/present into lp:openlp

 

Jonathan Corwin has proposed merging lp:~j-corwin/openlp/present into lp:openlp.

Requested reviews:
  OpenLP Core (openlp-core)


Close down ppt/impress if no other presentations open
Automatic ppt type detection.
-- 
https://code.launchpad.net/~j-corwin/openlp/present/+merge/20778
Your team OpenLP Core is subscribed to branch lp:openlp.
=== modified file 'openlp/plugins/presentations/lib/impresscontroller.py'
--- openlp/plugins/presentations/lib/impresscontroller.py	2010-03-03 17:51:19 +0000
+++ openlp/plugins/presentations/lib/impresscontroller.py	2010-03-05 19:53:14 +0000
@@ -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 @@
         """
         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 @@
             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')

=== modified file 'openlp/plugins/presentations/lib/mediaitem.py'
--- openlp/plugins/presentations/lib/mediaitem.py	2010-03-03 17:51:19 +0000
+++ openlp/plugins/presentations/lib/mediaitem.py	2010-03-05 19:53:14 +0000
@@ -56,7 +56,7 @@
         # 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 @@
         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 @@
             #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 @@
             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 @@
                 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

=== modified file 'openlp/plugins/presentations/lib/messagelistener.py'
--- openlp/plugins/presentations/lib/messagelistener.py	2010-03-03 17:51:19 +0000
+++ openlp/plugins/presentations/lib/messagelistener.py	2010-03-05 19:53:14 +0000
@@ -154,8 +154,9 @@
     """
     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 @@
         """
         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:

=== modified file 'openlp/plugins/presentations/lib/powerpointcontroller.py'
--- openlp/plugins/presentations/lib/powerpointcontroller.py	2010-03-03 17:51:19 +0000
+++ openlp/plugins/presentations/lib/powerpointcontroller.py	2010-03-05 19:53:14 +0000
@@ -52,7 +52,7 @@
         """
         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 @@
                 doc.close_presentation()
             if self.process is None:
                 return
+            if self.process.Presentations.Count > 0:
+                return
             try:
                 self.process.Quit()
             except:

=== modified file 'openlp/plugins/presentations/lib/pptviewcontroller.py'
--- openlp/plugins/presentations/lib/pptviewcontroller.py	2010-03-03 17:51:19 +0000
+++ openlp/plugins/presentations/lib/pptviewcontroller.py	2010-03-05 19:53:14 +0000
@@ -49,7 +49,7 @@
         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):
         """

=== modified file 'openlp/plugins/presentations/lib/presentationcontroller.py'
--- openlp/plugins/presentations/lib/presentationcontroller.py	2010-03-03 17:51:19 +0000
+++ openlp/plugins/presentations/lib/presentationcontroller.py	2010-03-05 19:53:14 +0000
@@ -93,6 +93,7 @@
             Name of the application, to appear in the application
         """
         self.supports = []
+        self.alsosupports = []
         self.docs = []
         self.plugin = plugin
         self.name = name


Follow ups