From ab17e6aaf0902b2783d631a38b5bf0d7bab36ef7 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Fri, 21 Jan 2011 22:28:34 +0000 Subject: [PATCH] Small OOo refactor, fix last commit --- openlp/core/utils/__init__.py | 32 ++++++++++++++++++- .../presentations/lib/impresscontroller.py | 30 ++++------------- .../songs/forms/songmaintenanceform.py | 1 - openlp/plugins/songs/lib/easislidesimport.py | 2 +- openlp/plugins/songs/lib/oooimport.py | 32 ++++++------------- 5 files changed, 48 insertions(+), 49 deletions(-) diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index 9117a8e19..be5b2813b 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -47,6 +47,8 @@ from openlp.core.lib import Receiver, translate 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 @@ def string_is_unicode(test_string): 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'] diff --git a/openlp/plugins/presentations/lib/impresscontroller.py b/openlp/plugins/presentations/lib/impresscontroller.py index 516c595c7..6ca67c2ae 100644 --- a/openlp/plugins/presentations/lib/impresscontroller.py +++ b/openlp/plugins/presentations/lib/impresscontroller.py @@ -51,7 +51,7 @@ else: 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 @@ class ImpressController(PresentationController): 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 @@ class ImpressController(PresentationController): 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 @@ class ImpressController(PresentationController): 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 @@ class ImpressController(PresentationController): 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') diff --git a/openlp/plugins/songs/forms/songmaintenanceform.py b/openlp/plugins/songs/forms/songmaintenanceform.py index 7da8ddd81..93a01623e 100644 --- a/openlp/plugins/songs/forms/songmaintenanceform.py +++ b/openlp/plugins/songs/forms/songmaintenanceform.py @@ -535,4 +535,3 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): else: self.booksDeleteButton.setEnabled(True) self.booksEditButton.setEnabled(True) - diff --git a/openlp/plugins/songs/lib/easislidesimport.py b/openlp/plugins/songs/lib/easislidesimport.py index 56349fc5a..64523fd3a 100644 --- a/openlp/plugins/songs/lib/easislidesimport.py +++ b/openlp/plugins/songs/lib/easislidesimport.py @@ -84,7 +84,7 @@ class EasiSlidesImport(SongImport): 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': + if self.song_number == u'0': self.song_number = u'' self._add_authors(song) self._add_copyright(song) diff --git a/openlp/plugins/songs/lib/oooimport.py b/openlp/plugins/songs/lib/oooimport.py index be33cb8fb..45d1ce5b9 100644 --- a/openlp/plugins/songs/lib/oooimport.py +++ b/openlp/plugins/songs/lib/oooimport.py @@ -29,6 +29,7 @@ import os 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 @@ class OooImport(SongImport): 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 @@ class OooImport(SongImport): 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 @@ class OooImport(SongImport): 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()