← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~meths/openlp/trivialfixes into lp:openlp

 

Jon Tibble has proposed merging lp:~meths/openlp/trivialfixes into lp:openlp.

Requested reviews:
  OpenLP Core (openlp-core)

For more details, see:
https://code.launchpad.net/~meths/openlp/trivialfixes/+merge/47127

Couple of refactors in the EasiSlides importer and the UNO setup code.

Fix an indentation issue in the UNO code while we're there.
-- 
https://code.launchpad.net/~meths/openlp/trivialfixes/+merge/47127
Your team OpenLP Core is requested to review the proposed merge of lp:~meths/openlp/trivialfixes into lp:openlp.
=== modified file 'openlp/core/utils/__init__.py'
--- openlp/core/utils/__init__.py	2011-01-19 21:36:43 +0000
+++ openlp/core/utils/__init__.py	2011-01-21 22:58:53 +0000
@@ -47,6 +47,8 @@
 
 log = logging.getLogger(__name__)
 IMAGES_FILTER = None
+UNO_CONNECTION_TYPE = u'pipe'
+#UNO_CONNECTION_TYPE = u'socket'
 
 class VersionThread(QtCore.QThread):
     """
@@ -375,9 +377,37 @@
             log.exception("Error encoding string to unicode")
     return return_string
 
+def get_uno_command():
+    """
+    Returns the UNO command to launch an openoffice.org instance.
+    """
+    if UNO_CONNECTION_TYPE == u'pipe':
+        return u'openoffice.org -nologo -norestore -minimized -invisible ' \
+            + u'-nofirststartwizard -accept=pipe,name=openlp_pipe;urp;'
+    else:
+        return u'openoffice.org -nologo -norestore -minimized ' \
+            + u'-invisible -nofirststartwizard ' \
+            + u'-accept=socket,host=localhost,port=2002;urp;'
+
+def get_uno_instance(resolver):
+    """
+    Returns a running openoffice.org instance.
+
+    ``resolver``
+        The UNO resolver to use to find a running instance.
+    """
+    log.debug(u'get UNO Desktop Openoffice - resolve')
+    if UNO_CONNECTION_TYPE == u'pipe':
+        return resolver.resolve(u'uno:pipe,name=openlp_pipe;' \
+            + u'urp;StarOffice.ComponentContext')
+    else:
+        return resolver.resolve(u'uno:socket,host=localhost,port=2002;' \
+            + u'urp;StarOffice.ComponentContext')
+
 from languagemanager import LanguageManager
 from actions import ActionList
 
 __all__ = [u'AppLocation', u'check_latest_version', u'add_actions',
     u'get_filesystem_encoding', u'LanguageManager', u'ActionList',
-    u'get_web_page', u'file_is_unicode', u'string_is_unicode']
+    u'get_web_page', u'file_is_unicode', u'string_is_unicode',
+    u'get_uno_command', u'get_uno_instance', u'delete_file']

=== modified file 'openlp/plugins/presentations/lib/impresscontroller.py'
--- openlp/plugins/presentations/lib/impresscontroller.py	2011-01-14 18:58:47 +0000
+++ openlp/plugins/presentations/lib/impresscontroller.py	2011-01-21 22:58:53 +0000
@@ -51,7 +51,7 @@
 
 from PyQt4 import QtCore
 
-from openlp.core.utils import delete_file
+from openlp.core.utils import delete_file, get_uno_command, get_uno_instance
 from presentationcontroller import PresentationController, PresentationDocument
 
 log = logging.getLogger(__name__)
@@ -75,7 +75,6 @@
         self.process = None
         self.desktop = None
         self.manager = None
-        self.uno_connection_type = u'pipe' #u'socket'
 
     def check_available(self):
         """
@@ -100,14 +99,7 @@
             self.manager._FlagAsMethod(u'Bridge_GetValueObject')
         else:
             # -headless
-            if self.uno_connection_type == u'pipe':
-                cmd = u'openoffice.org -nologo -norestore -minimized ' \
-                    + u'-invisible -nofirststartwizard ' \
-                    + u'-accept=pipe,name=openlp_pipe;urp;'
-            else:
-                cmd = u'openoffice.org -nologo -norestore -minimized ' \
-                    + u'-invisible -nofirststartwizard ' \
-                    + u'-accept=socket,host=localhost,port=2002;urp;'
+            cmd = get_uno_command()
             self.process = QtCore.QProcess()
             self.process.startDetached(cmd)
             self.process.waitForStarted()
@@ -118,7 +110,7 @@
         which will be used to manage impress
         """
         log.debug(u'get UNO Desktop Openoffice')
-        ctx = None
+        uno_instance = None
         loop = 0
         log.debug(u'get UNO Desktop Openoffice - getComponentContext')
         context = uno.getComponentContext()
@@ -126,27 +118,19 @@
             u'UnoUrlResolver')
         resolver = context.ServiceManager.createInstanceWithContext(
             u'com.sun.star.bridge.UnoUrlResolver', context)
-        while ctx is None and loop < 3:
+        while uno_instance is None and loop < 3:
             try:
-                log.debug(u'get UNO Desktop Openoffice - resolve')
-                if self.uno_connection_type == u'pipe':
-                    ctx = resolver.resolve(u'uno:' \
-                        + u'pipe,name=openlp_pipe;' \
-                        + u'urp;StarOffice.ComponentContext')
-                else:
-                    ctx = resolver.resolve(u'uno:' \
-                        + u'socket,host=localhost,port=2002;' \
-                        + u'urp;StarOffice.ComponentContext')
+                uno_instance = get_uno_instance(resolver)
             except:
                 log.exception(u'Unable to find running instance ')
                 self.start_process()
                 loop += 1
         try:
-            self.manager = ctx.ServiceManager
+            self.manager = uno_instance.ServiceManager
             log.debug(u'get UNO Desktop Openoffice - createInstanceWithContext'
                 u' - Desktop')
             desktop = self.manager.createInstanceWithContext(
-                "com.sun.star.frame.Desktop", ctx )
+                "com.sun.star.frame.Desktop", uno_instance)
             return desktop
         except:
             log.exception(u'Failed to get UNO desktop')

=== modified file 'openlp/plugins/songs/forms/songmaintenanceform.py'
--- openlp/plugins/songs/forms/songmaintenanceform.py	2011-01-20 05:42:44 +0000
+++ openlp/plugins/songs/forms/songmaintenanceform.py	2011-01-21 22:58:53 +0000
@@ -535,4 +535,3 @@
         else:
             self.booksDeleteButton.setEnabled(True)
             self.booksEditButton.setEnabled(True)
-

=== modified file 'openlp/plugins/songs/lib/easislidesimport.py'
--- openlp/plugins/songs/lib/easislidesimport.py	2011-01-21 19:09:56 +0000
+++ openlp/plugins/songs/lib/easislidesimport.py	2011-01-21 22:58:53 +0000
@@ -81,44 +81,43 @@
 
     def _parse_song(self, song):
         self._success = True
-        self._add_title(song)
-        self._add_alttitle(song)
-        self._add_number(song)
+        self._add_title(self.title, song.Title1, True)
+        self._add_alttitle(self.alternate_title, song.Title2)
+        self._add_number(self.song_number, song.SongNumber)
+        if self.song_number == u'0':
+            self.song_number = u''
         self._add_authors(song)
         self._add_copyright(song)
-        self._add_book(song)
+        self._add_book(self.song_book_name, song.BookReference)
         self._parse_and_add_lyrics(song)
         return self._success
 
-    def _add_title(self, song):
-        try:
-            self.title = unicode(song.Title1).strip()
-        except UnicodeDecodeError:
-            log.exception(u'Unicode decode error while decoding Title1')
-            self._success = False
-        except AttributeError:
-            log.exception(u'no Title1')
-            self._success = False
-
-    def _add_alttitle(self, song):
-        try:
-            self.alternate_title = unicode(song.Title2).strip()
-        except UnicodeDecodeError:
-            log.exception(u'Unicode decode error while decoding Title2')
-            self._success = False
-        except AttributeError:
-            pass
-
-    def _add_number(self, song):
-        try:
-            number = unicode(song.SongNumber)
-            if number != u'0':
-                self.song_number = number
-        except UnicodeDecodeError:
-            log.exception(u'Unicode decode error while decoding SongNumber')
-            self._success = False
-        except AttributeError:
-            pass
+    def _add_unicode_attribute(self, self_attribute, import_attribute,
+        mandatory=False):
+        """
+        Add imported values to the song model converting them to unicode at the
+        same time.  If the unicode decode fails or a mandatory attribute is not
+        present _success is set to False so the importer can react
+        appropriately.
+
+        ``self_attribute``
+            The attribute in the song model to populate.
+
+        ``import_attribute``
+            The imported value to convert to unicode and save to the song.
+
+        ``mandatory``
+            Signals that this attribute must exist in a valid song.
+        """
+        try:
+            self_attribute = unicode(import_attribute).strip()
+        except UnicodeDecodeError:
+            log.exception(u'UnicodeDecodeError decoding %s' % import_attribute)
+            self._success = False
+        except AttributeError:
+            log.exception(u'No attribute %s' % import_attribute)
+            if mandatory:
+                self._success = False
 
     def _add_authors(self, song):
         try:
@@ -158,15 +157,6 @@
             pass
         self.add_copyright(u' '.join(copyright))
 
-    def _add_book(self, song):
-        try:
-            self.song_book_name = unicode(song.BookReference).strip()
-        except UnicodeDecodeError:
-            log.exception(u'Unicode decode error while decoding BookReference')
-            self._success = False
-        except AttributeError:
-            pass
-
     def _parse_and_add_lyrics(self, song):
         try:
             lyrics = unicode(song.Contents).strip()

=== modified file 'openlp/plugins/songs/lib/oooimport.py'
--- openlp/plugins/songs/lib/oooimport.py	2011-01-13 17:55:29 +0000
+++ openlp/plugins/songs/lib/oooimport.py	2011-01-21 22:58:53 +0000
@@ -29,6 +29,7 @@
 from PyQt4 import QtCore
 
 from openlp.core.lib import Receiver
+from openlp.core.utils import get_uno_command, get_uno_instance
 from songimport import SongImport
 
 log = logging.getLogger(__name__)
@@ -61,7 +62,6 @@
         self.document = None
         self.process_started = False
         self.filenames = kwargs[u'filenames']
-        self.uno_connection_type = u'pipe' #u'socket'
         QtCore.QObject.connect(Receiver.get_receiver(),
             QtCore.SIGNAL(u'openlp_stop_wizard'), self.stop_import)
 
@@ -105,25 +105,18 @@
             context = uno.getComponentContext()
             resolver = context.ServiceManager.createInstanceWithContext(
                 u'com.sun.star.bridge.UnoUrlResolver', context)
-            ctx = None
+            uno_instance = None
             loop = 0
-            while ctx is None and loop < 5:
+            while uno_instance is None and loop < 5:
                 try:
-                    if self.uno_connection_type == u'pipe':
-                        ctx = resolver.resolve(u'uno:' \
-                            + u'pipe,name=openlp_pipe;' \
-                            + u'urp;StarOffice.ComponentContext')
-                    else:
-                        ctx = resolver.resolve(u'uno:' \
-                            + u'socket,host=localhost,port=2002;' \
-                            + u'urp;StarOffice.ComponentContext')
+                    uno_instance = get_uno_instance(resolver)
                 except:
                     log.exception("Failed to resolve uno connection")
-                self.start_ooo_process()
-                loop += 1
-            manager = ctx.ServiceManager
+                    self.start_ooo_process()
+                    loop += 1
+            manager = uno_instance.ServiceManager
             self.desktop = manager.createInstanceWithContext(
-                "com.sun.star.frame.Desktop", ctx)
+                "com.sun.star.frame.Desktop", uno_instance)
 
     def start_ooo_process(self):
         try:
@@ -132,14 +125,7 @@
                 self.manager._FlagAsMethod(u'Bridge_GetStruct')
                 self.manager._FlagAsMethod(u'Bridge_GetValueObject')
             else:
-                if self.uno_connection_type == u'pipe':
-                    cmd = u'openoffice.org -nologo -norestore -minimized ' \
-                        + u'-invisible -nofirststartwizard ' \
-                        + u'-accept=pipe,name=openlp_pipe;urp;'
-                else:
-                    cmd = u'openoffice.org -nologo -norestore -minimized ' \
-                        + u'-invisible -nofirststartwizard ' \
-                        + u'-accept=socket,host=localhost,port=2002;urp;'
+                cmd = get_uno_command()
                 process = QtCore.QProcess()
                 process.startDetached(cmd)
                 process.waitForStarted()


Follow ups