From 635b207fb05bcdb7ec9046e692779ea400f417fe Mon Sep 17 00:00:00 2001 From: phill-ridout Date: Sun, 3 Feb 2013 17:13:01 +0000 Subject: [PATCH 1/4] Fixes bug1095699 by rasing an error when the user cancels the codepage selection dialog. --- openlp/plugins/songs/lib/__init__.py | 5 ++++- openlp/plugins/songs/lib/ewimport.py | 8 +++++++- openlp/plugins/songs/lib/songproimport.py | 10 ++++++++-- openlp/plugins/songs/lib/sundayplusimport.py | 10 ++++++++-- 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/openlp/plugins/songs/lib/__init__.py b/openlp/plugins/songs/lib/__init__.py index fb9a8928b..adb2f585d 100644 --- a/openlp/plugins/songs/lib/__init__.py +++ b/openlp/plugins/songs/lib/__init__.py @@ -581,7 +581,10 @@ def strip_rtf(text, default_encoding=None): try: encoding, default_encoding = get_encoding(font, font_table, default_encoding, failed=failed) - out.append(chr(charcode).decode(encoding)) + if encoding: + out.append(chr(charcode).decode(encoding)) + else: + raise Exception(u'user_canceled') except UnicodeDecodeError: failed = True else: diff --git a/openlp/plugins/songs/lib/ewimport.py b/openlp/plugins/songs/lib/ewimport.py index ebfdff2bb..e839a6354 100644 --- a/openlp/plugins/songs/lib/ewimport.py +++ b/openlp/plugins/songs/lib/ewimport.py @@ -180,7 +180,13 @@ class EasyWorshipSongImport(SongImport): self.addAuthor(author_name.strip()) if words: # Format the lyrics - words, self.encoding = strip_rtf(words, self.encoding) + try: + words, self.encoding = strip_rtf(words, self.encoding) + except Exception as info: + if unicode(info) == u'user_canceled': + return + else: + raise verse_type = VerseType.Tags[VerseType.Verse] for verse in SLIDE_BREAK_REGEX.split(words): verse = verse.strip() diff --git a/openlp/plugins/songs/lib/songproimport.py b/openlp/plugins/songs/lib/songproimport.py index 0da097ad8..ca34a4bd0 100644 --- a/openlp/plugins/songs/lib/songproimport.py +++ b/openlp/plugins/songs/lib/songproimport.py @@ -109,8 +109,14 @@ class SongProImport(SongImport): self.finish() return if u'rtf1' in text: - text, self.encoding = strip_rtf(text, self.encoding) - text = text.rstrip() + try: + text, self.encoding = strip_rtf(text, self.encoding) + text = text.rstrip() + except Exception as info: + if unicode(info) == u'user_canceled': + return + else: + raise if not text: return if tag == u'A': diff --git a/openlp/plugins/songs/lib/sundayplusimport.py b/openlp/plugins/songs/lib/sundayplusimport.py index 6b61af231..8d7330411 100644 --- a/openlp/plugins/songs/lib/sundayplusimport.py +++ b/openlp/plugins/songs/lib/sundayplusimport.py @@ -150,8 +150,14 @@ class SundayPlusImport(SongImport): verse_type = HOTKEY_TO_VERSE_TYPE[value] if name == 'rtf': value = self.unescape(value) - verse, self.encoding = strip_rtf(value, self.encoding) - lines = verse.strip().split('\n') + try: + verse, self.encoding = strip_rtf(value, self.encoding) + lines = verse.strip().split('\n') + except Exception as info: + if unicode(info) == u'user_canceled': + return + else: + raise # If any line inside any verse contains CCLI or # only Public Domain, we treat this as special data: # we remove that line and add data to specific field. From 59c6e00bf1879e8dddc19d4aa058c55b8d3b879a Mon Sep 17 00:00:00 2001 From: phill-ridout Date: Sun, 3 Feb 2013 20:02:58 +0000 Subject: [PATCH 2/4] Reworked to return None rather than using exceptions as per Raoul's request --- openlp/plugins/songs/lib/__init__.py | 2 +- openlp/plugins/songs/lib/ewimport.py | 11 ++++------- openlp/plugins/songs/lib/songproimport.py | 13 +++++-------- openlp/plugins/songs/lib/sundayplusimport.py | 13 +++++-------- 4 files changed, 15 insertions(+), 24 deletions(-) diff --git a/openlp/plugins/songs/lib/__init__.py b/openlp/plugins/songs/lib/__init__.py index adb2f585d..73882917b 100644 --- a/openlp/plugins/songs/lib/__init__.py +++ b/openlp/plugins/songs/lib/__init__.py @@ -584,7 +584,7 @@ def strip_rtf(text, default_encoding=None): if encoding: out.append(chr(charcode).decode(encoding)) else: - raise Exception(u'user_canceled') + return None except UnicodeDecodeError: failed = True else: diff --git a/openlp/plugins/songs/lib/ewimport.py b/openlp/plugins/songs/lib/ewimport.py index e839a6354..f462b102b 100644 --- a/openlp/plugins/songs/lib/ewimport.py +++ b/openlp/plugins/songs/lib/ewimport.py @@ -180,13 +180,10 @@ class EasyWorshipSongImport(SongImport): self.addAuthor(author_name.strip()) if words: # Format the lyrics - try: - words, self.encoding = strip_rtf(words, self.encoding) - except Exception as info: - if unicode(info) == u'user_canceled': - return - else: - raise + words = strip_rtf(words, self.encoding) + if words is None: + return + words, self.encoding = words verse_type = VerseType.Tags[VerseType.Verse] for verse in SLIDE_BREAK_REGEX.split(words): verse = verse.strip() diff --git a/openlp/plugins/songs/lib/songproimport.py b/openlp/plugins/songs/lib/songproimport.py index ca34a4bd0..928ce85ec 100644 --- a/openlp/plugins/songs/lib/songproimport.py +++ b/openlp/plugins/songs/lib/songproimport.py @@ -109,14 +109,11 @@ class SongProImport(SongImport): self.finish() return if u'rtf1' in text: - try: - text, self.encoding = strip_rtf(text, self.encoding) - text = text.rstrip() - except Exception as info: - if unicode(info) == u'user_canceled': - return - else: - raise + text = strip_rtf(text, self.encoding) + if text is None: + return + text, self.encoding = text + text = text.rstrip() if not text: return if tag == u'A': diff --git a/openlp/plugins/songs/lib/sundayplusimport.py b/openlp/plugins/songs/lib/sundayplusimport.py index 8d7330411..c514d4014 100644 --- a/openlp/plugins/songs/lib/sundayplusimport.py +++ b/openlp/plugins/songs/lib/sundayplusimport.py @@ -150,14 +150,11 @@ class SundayPlusImport(SongImport): verse_type = HOTKEY_TO_VERSE_TYPE[value] if name == 'rtf': value = self.unescape(value) - try: - verse, self.encoding = strip_rtf(value, self.encoding) - lines = verse.strip().split('\n') - except Exception as info: - if unicode(info) == u'user_canceled': - return - else: - raise + verse = strip_rtf(value, self.encoding) + if verse is None: + return + verse, self.encoding = verse + lines = verse.strip().split('\n') # If any line inside any verse contains CCLI or # only Public Domain, we treat this as special data: # we remove that line and add data to specific field. From 98d2247f102ea7fd281521dce3c88ec6691ac613 Mon Sep 17 00:00:00 2001 From: phill-ridout Date: Sun, 3 Feb 2013 21:00:22 +0000 Subject: [PATCH 3/4] changed variables to result --- openlp/plugins/songs/lib/ewimport.py | 6 +++--- openlp/plugins/songs/lib/songproimport.py | 6 +++--- openlp/plugins/songs/lib/sundayplusimport.py | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/openlp/plugins/songs/lib/ewimport.py b/openlp/plugins/songs/lib/ewimport.py index f462b102b..de31083f0 100644 --- a/openlp/plugins/songs/lib/ewimport.py +++ b/openlp/plugins/songs/lib/ewimport.py @@ -180,10 +180,10 @@ class EasyWorshipSongImport(SongImport): self.addAuthor(author_name.strip()) if words: # Format the lyrics - words = strip_rtf(words, self.encoding) - if words is None: + result = strip_rtf(words, self.encoding) + if result is None: return - words, self.encoding = words + words, self.encoding = result verse_type = VerseType.Tags[VerseType.Verse] for verse in SLIDE_BREAK_REGEX.split(words): verse = verse.strip() diff --git a/openlp/plugins/songs/lib/songproimport.py b/openlp/plugins/songs/lib/songproimport.py index 928ce85ec..3a007ef33 100644 --- a/openlp/plugins/songs/lib/songproimport.py +++ b/openlp/plugins/songs/lib/songproimport.py @@ -109,10 +109,10 @@ class SongProImport(SongImport): self.finish() return if u'rtf1' in text: - text = strip_rtf(text, self.encoding) - if text is None: + result = strip_rtf(text, self.encoding) + if result is None: return - text, self.encoding = text + text, self.encoding = result text = text.rstrip() if not text: return diff --git a/openlp/plugins/songs/lib/sundayplusimport.py b/openlp/plugins/songs/lib/sundayplusimport.py index c514d4014..9af6099e0 100644 --- a/openlp/plugins/songs/lib/sundayplusimport.py +++ b/openlp/plugins/songs/lib/sundayplusimport.py @@ -150,10 +150,10 @@ class SundayPlusImport(SongImport): verse_type = HOTKEY_TO_VERSE_TYPE[value] if name == 'rtf': value = self.unescape(value) - verse = strip_rtf(value, self.encoding) - if verse is None: + result = strip_rtf(value, self.encoding) + if result is None: return - verse, self.encoding = verse + verse, self.encoding = result lines = verse.strip().split('\n') # If any line inside any verse contains CCLI or # only Public Domain, we treat this as special data: From bde8df5f86b545a1d7fa32524f4c66c26cb3615b Mon Sep 17 00:00:00 2001 From: phill-ridout Date: Mon, 4 Feb 2013 18:27:43 +0000 Subject: [PATCH 4/4] Reduced some code --- openlp/plugins/songs/lib/__init__.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/openlp/plugins/songs/lib/__init__.py b/openlp/plugins/songs/lib/__init__.py index 73882917b..193341645 100644 --- a/openlp/plugins/songs/lib/__init__.py +++ b/openlp/plugins/songs/lib/__init__.py @@ -581,10 +581,9 @@ def strip_rtf(text, default_encoding=None): try: encoding, default_encoding = get_encoding(font, font_table, default_encoding, failed=failed) - if encoding: - out.append(chr(charcode).decode(encoding)) - else: + if not encoding: return None + out.append(chr(charcode).decode(encoding)) except UnicodeDecodeError: failed = True else: