From d05c349f41319dd483394297e0f04563e05bd63a Mon Sep 17 00:00:00 2001 From: Gerald Britton Date: Tue, 24 May 2011 16:41:14 -0400 Subject: [PATCH] Catch common errors during import and report to user --- openlp/plugins/songs/lib/oooimport.py | 23 ++++++++++++++++++----- openlp/plugins/songs/lib/sofimport.py | 26 ++++++++++++++++---------- 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/openlp/plugins/songs/lib/oooimport.py b/openlp/plugins/songs/lib/oooimport.py index d43541bc7..1c5c7e1ef 100644 --- a/openlp/plugins/songs/lib/oooimport.py +++ b/openlp/plugins/songs/lib/oooimport.py @@ -40,6 +40,7 @@ if os.name == u'nt': PAGE_BOTH = 6 else: import uno + from com.sun.star.connection import NoConnectException from com.sun.star.style.BreakType import PAGE_BEFORE, PAGE_AFTER, PAGE_BOTH class OooImport(SongImport): @@ -56,7 +57,16 @@ class OooImport(SongImport): self.process_started = False def do_import(self): - self.start_ooo() + if not isinstance(self.import_source, list): + return + try: + self.start_ooo() + except NoConnectException as exc: + self.log_error( + self.import_source[0], + u'Unable to connect to OpenOffice.org or LibreOffice') + log.error(exc) + return self.import_wizard.progressBar.setMaximum(len(self.import_source)) for filename in self.import_source: if self.stop_import_flag: @@ -98,13 +108,16 @@ class OooImport(SongImport): while uno_instance is None and loop < 5: try: uno_instance = get_uno_instance(resolver) - except: + except NoConnectException: log.exception("Failed to resolve uno connection") self.start_ooo_process() loop += 1 - manager = uno_instance.ServiceManager - self.desktop = manager.createInstanceWithContext( - "com.sun.star.frame.Desktop", uno_instance) + else: + manager = uno_instance.ServiceManager + self.desktop = manager.createInstanceWithContext( + "com.sun.star.frame.Desktop", uno_instance) + return + raise def start_ooo_process(self): try: diff --git a/openlp/plugins/songs/lib/sofimport.py b/openlp/plugins/songs/lib/sofimport.py index 7f9fa16bc..f35094a96 100644 --- a/openlp/plugins/songs/lib/sofimport.py +++ b/openlp/plugins/songs/lib/sofimport.py @@ -30,10 +30,14 @@ # http://www.oooforum.org/forum/viewtopic.phtml?t=14409 # http://wiki.services.openoffice.org/wiki/Python +import logging import os import re from oooimport import OooImport +from com.sun.star.uno import RuntimeException + +log = logging.getLogger(__name__) if os.name == u'nt': BOLD = 150.0 @@ -85,16 +89,18 @@ class SofImport(OooImport): """ self.blanklines = 0 self.new_song() - paragraphs = self.document.getText().createEnumeration() - while paragraphs.hasMoreElements(): - if self.stop_import_flag: - return - paragraph = paragraphs.nextElement() - if paragraph.supportsService("com.sun.star.text.Paragraph"): - self.process_paragraph(paragraph) - if self.song: - self.finish() - self.song = False + try: + paragraphs = self.document.getText().createEnumeration() + while paragraphs.hasMoreElements(): + if self.stop_import_flag: + return + paragraph = paragraphs.nextElement() + if paragraph.supportsService("com.sun.star.text.Paragraph"): + self.process_paragraph(paragraph) + except RuntimeException as exc: + log.exception(u'Error processing file: %s', exc) + if not self.finish(): + self.log_error(self.filepath) def process_paragraph(self, paragraph): """