← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~tomasgroth/openlp/bugfixes12 into lp:openlp

 

Tomas Groth has proposed merging lp:~tomasgroth/openlp/bugfixes12 into lp:openlp.

Requested reviews:
  OpenLP Core (openlp-core)
Related bugs:
  Bug #1410738 in OpenLP: "No cancel button on FTW "No inetrnet page""
  https://bugs.launchpad.net/openlp/+bug/1410738
  Bug #1412517 in OpenLP: "Bible quick search to end does not work"
  https://bugs.launchpad.net/openlp/+bug/1412517
  Bug #1414978 in OpenLP: "When deleting a presentation from the mediamanager the cursor remains busy"
  https://bugs.launchpad.net/openlp/+bug/1414978
  Bug #1414980 in OpenLP: "Importing certain presentation manager pro files fails"
  https://bugs.launchpad.net/openlp/+bug/1414980

For more details, see:
https://code.launchpad.net/~tomasgroth/openlp/bugfixes12/+merge/248175

Make xml parsing of presentation manager files recover if errors are encountered. Fixes bug 1414980.
Set the cursor back to normal after deleting a presentation. Fixes bug 1414978.
Added a cancel-button to FTW when no internet is available. Fixes bug 1410738
Fix support for 'end' mark in bible-search. Fixes bug 1412517.
-- 
Your team OpenLP Core is requested to review the proposed merge of lp:~tomasgroth/openlp/bugfixes12 into lp:openlp.
=== modified file 'openlp/core/ui/firsttimeform.py'
--- openlp/core/ui/firsttimeform.py	2015-01-20 21:38:34 +0000
+++ openlp/core/ui/firsttimeform.py	2015-01-30 21:59:49 +0000
@@ -268,9 +268,11 @@
         self.web = 'http://openlp.org/files/frw/'
         self.cancel_button.clicked.connect(self.on_cancel_button_clicked)
         self.no_internet_finish_button.clicked.connect(self.on_no_internet_finish_button_clicked)
+        self.no_internet_cancel_button.clicked.connect(self.on_no_internet_cancel_button_clicked)
         self.currentIdChanged.connect(self.on_current_id_changed)
         Registry().register_function('config_screen_changed', self.update_screen_list_combo)
         self.no_internet_finish_button.setVisible(False)
+        self.no_internet_cancel_button.setVisible(False)
         # Check if this is a re-run of the wizard.
         self.has_run_wizard = Settings().value('core/has run wizard')
         check_directory_exists(os.path.join(gettempdir(), 'openlp'))
@@ -327,6 +329,10 @@
             self.next_button.setVisible(False)
             self.cancel_button.setVisible(False)
             self.no_internet_finish_button.setVisible(True)
+            if self.has_run_wizard:
+                self.no_internet_cancel_button.setVisible(False)
+            else:
+                self.no_internet_cancel_button.setVisible(True)
         elif page_id == FirstTimePage.Plugins:
             self.back_button.setVisible(False)
         elif page_id == FirstTimePage.Progress:
@@ -372,6 +378,13 @@
         Settings().setValue('core/has run wizard', True)
         self.close()
 
+    def on_no_internet_cancel_button_clicked(self):
+        """
+        Process the triggering of the "Cancel" button on the No Internet page.
+        """
+        self.was_cancelled = True
+        self.close()
+
     def url_get_file(self, url, f_path):
         """"
         Download a file given a URL.  The file is retrieved in chunks, giving the ability to cancel the download at any

=== modified file 'openlp/core/ui/firsttimewizard.py'
--- openlp/core/ui/firsttimewizard.py	2015-01-18 13:39:21 +0000
+++ openlp/core/ui/firsttimewizard.py	2015-01-30 21:59:49 +0000
@@ -59,7 +59,8 @@
         first_time_wizard.resize(550, 386)
         first_time_wizard.setModal(True)
         first_time_wizard.setOptions(QtGui.QWizard.IndependentPages | QtGui.QWizard.NoBackButtonOnStartPage |
-                                     QtGui.QWizard.NoBackButtonOnLastPage | QtGui.QWizard.HaveCustomButton1)
+                                     QtGui.QWizard.NoBackButtonOnLastPage | QtGui.QWizard.HaveCustomButton1 |
+                                     QtGui.QWizard.HaveCustomButton2)
         if is_macosx():
             first_time_wizard.setPixmap(QtGui.QWizard.BackgroundPixmap,
                                         QtGui.QPixmap(':/wizards/openlp-osx-wizard.png'))
@@ -69,6 +70,7 @@
         self.finish_button = self.button(QtGui.QWizard.FinishButton)
         self.no_internet_finish_button = self.button(QtGui.QWizard.CustomButton1)
         self.cancel_button = self.button(QtGui.QWizard.CancelButton)
+        self.no_internet_cancel_button = self.button(QtGui.QWizard.CustomButton2)
         self.next_button = self.button(QtGui.QWizard.NextButton)
         self.back_button = self.button(QtGui.QWizard.BackButton)
         add_welcome_page(first_time_wizard, ':/wizards/wizard_firsttime.bmp')
@@ -271,3 +273,4 @@
                                                                            'and OpenLP is configured.'))
         self.progress_label.setText(translate('OpenLP.FirstTimeWizard', 'Starting configuration process...'))
         first_time_wizard.setButtonText(QtGui.QWizard.CustomButton1, translate('OpenLP.FirstTimeWizard', 'Finish'))
+        first_time_wizard.setButtonText(QtGui.QWizard.CustomButton2, translate('OpenLP.FirstTimeWizard', 'Cancel'))

=== modified file 'openlp/plugins/bibles/lib/__init__.py'
--- openlp/plugins/bibles/lib/__init__.py	2015-01-22 13:19:10 +0000
+++ openlp/plugins/bibles/lib/__init__.py	2015-01-30 21:59:49 +0000
@@ -178,7 +178,7 @@
     default_separators = [
         '|'.join([
             translate('BiblesPlugin', ':', 'Verse identifier e.g. Genesis 1 : 1 = Genesis Chapter 1 Verse 1'),
-            translate('BiblesPlugin', 'v','Verse identifier e.g. Genesis 1 v 1 = Genesis Chapter 1 Verse 1'),
+            translate('BiblesPlugin', 'v', 'Verse identifier e.g. Genesis 1 v 1 = Genesis Chapter 1 Verse 1'),
             translate('BiblesPlugin', 'V', 'Verse identifier e.g. Genesis 1 V 1 = Genesis Chapter 1 Verse 1'),
             translate('BiblesPlugin', 'verse', 'Verse identifier e.g. Genesis 1 verse 1 = Genesis Chapter 1 Verse 1'),
             translate('BiblesPlugin', 'verses',
@@ -371,7 +371,7 @@
                 from_chapter = from_verse
                 from_verse = None
             if to_chapter:
-                if to_chapter < from_chapter:
+                if from_chapter and to_chapter < from_chapter:
                     continue
                 else:
                     chapter = to_chapter
@@ -387,7 +387,7 @@
                     from_verse = 1
                 if not to_verse:
                     to_verse = -1
-                if to_chapter > from_chapter:
+                if to_chapter and to_chapter > from_chapter:
                     ref_list.append((book_ref_id, from_chapter, from_verse, -1))
                     for i in range(from_chapter + 1, to_chapter):
                         ref_list.append((book_ref_id, i, 1, -1))

=== modified file 'openlp/plugins/presentations/lib/mediaitem.py'
--- openlp/plugins/presentations/lib/mediaitem.py	2015-01-22 18:01:54 +0000
+++ openlp/plugins/presentations/lib/mediaitem.py	2015-01-30 21:59:49 +0000
@@ -225,10 +225,10 @@
                 self.clean_up_thumbnails(filepath)
                 self.main_window.increment_progress_bar()
             self.main_window.finished_progress_bar()
-            self.application.set_busy_cursor()
             for row in row_list:
                 self.list_view.takeItem(row)
             Settings().setValue(self.settings_section + '/presentations files', self.get_file_list())
+            self.application.set_normal_cursor()
 
     def clean_up_thumbnails(self, filepath):
         """

=== modified file 'openlp/plugins/songs/lib/importers/presentationmanager.py'
--- openlp/plugins/songs/lib/importers/presentationmanager.py	2015-01-22 17:42:29 +0000
+++ openlp/plugins/songs/lib/importers/presentationmanager.py	2015-01-30 21:59:49 +0000
@@ -25,7 +25,9 @@
 """
 
 import os
-from lxml import objectify
+import re
+import chardet
+from lxml import objectify, etree
 
 from openlp.core.ui.wizard import WizardStrings
 from .songimport import SongImport
@@ -42,7 +44,18 @@
             if self.stop_import_flag:
                 return
             self.import_wizard.increment_progress_bar(WizardStrings.ImportingType % os.path.basename(file_path))
-            root = objectify.parse(open(file_path, 'rb')).getroot()
+            try:
+                tree = etree.parse(file_path, parser=etree.XMLParser(recover=True))
+            except etree.XMLSyntaxError:
+                # Try to detect encoding and use it
+                file = open(file_path, mode='rb')
+                encoding = chardet.detect(file.read())['encoding']
+                file.close()
+                # Open file with detected encoding and remove encoding declaration
+                text = open(file_path, mode='r', encoding=encoding).read()
+                text = re.sub('.+\?>\n', '', text)
+                tree = etree.fromstring(text, parser=etree.XMLParser(recover=True))
+            root = objectify.fromstring(etree.tostring(tree))
             self.process_song(root)
 
     def process_song(self, root):

=== modified file 'tests/functional/openlp_plugins/songs/test_presentationmanagerimport.py'
--- tests/functional/openlp_plugins/songs/test_presentationmanagerimport.py	2015-01-18 13:39:21 +0000
+++ tests/functional/openlp_plugins/songs/test_presentationmanagerimport.py	2015-01-30 21:59:49 +0000
@@ -46,3 +46,5 @@
                          self.load_external_result_data(os.path.join(TEST_PATH, 'Great Is Thy Faithfulness.json')))
         self.file_import([os.path.join(TEST_PATH, 'Agnus Dei.sng')],
                          self.load_external_result_data(os.path.join(TEST_PATH, 'Agnus Dei.json')))
+        self.file_import([os.path.join(TEST_PATH, 'Amazing Grace.sng')],
+                         self.load_external_result_data(os.path.join(TEST_PATH, 'Amazing Grace.json')))

=== modified file 'tests/interfaces/openlp_plugins/bibles/test_lib_parse_reference.py'
--- tests/interfaces/openlp_plugins/bibles/test_lib_parse_reference.py	2015-01-18 13:39:21 +0000
+++ tests/interfaces/openlp_plugins/bibles/test_lib_parse_reference.py	2015-01-30 21:59:49 +0000
@@ -109,3 +109,13 @@
         results = parse_reference('Raoul 1', self.manager.db_cache['tests'], MagicMock())
         # THEN a verse array should be returned
         self.assertEqual(False, results, "The bible Search should return False")
+
+    def parse_reference_five_test(self):
+        """
+        Test the parse_reference method with 1 Timothy 1:3-end
+        """
+        # GIVEN given a bible in the bible manager
+        # WHEN asking to parse the bible reference
+        results = parse_reference('1 Timothy 1:3-end', self.manager.db_cache['tests'], MagicMock(), 54)
+        # THEN a verse array should be returned
+        self.assertEqual([(54, 1, 3, -1)], results, "The bible verses should matches the expected results")

=== added file 'tests/resources/presentationmanagersongs/Amazing Grace.json'
--- tests/resources/presentationmanagersongs/Amazing Grace.json	1970-01-01 00:00:00 +0000
+++ tests/resources/presentationmanagersongs/Amazing Grace.json	2015-01-30 21:59:49 +0000
@@ -0,0 +1,29 @@
+{
+    "title": "Amazing Grace",
+    "authors": [
+        "John Newton"
+    ],
+    "verse_order_list": ["v1", "v2", "v3", "v4", "v5"],
+    "verses": [
+        [
+            "Amazing grace! How sweet the sound!\nThat saved a wretch like me!\nI once was lost, but now am found;\nWas blind, but now I see.",
+            "v1"
+        ],
+        [
+            "'Twas grace that taught my heart to fear,\nAnd grace my fears relieved.\nHow precious did that grace appear,\nThe hour I first believed.",
+            "v2"
+        ],
+        [
+            "The Lord has promised good to me,\nHis Word my hope secures.\nHe will my shield and portion be\nAs long as life endures.",
+            "v3"
+        ],
+        [
+            "Thro' many dangers, toils and snares\nI have already come.\n'Tis grace that brought me safe thus far,\nAnd grace will lead me home.",
+            "v4"
+        ],
+        [
+            "When we've been there ten thousand years,\nBright shining as the sun,\nWe've no less days to sing God's praise,\nThan when we first begun.",
+            "v5"
+        ]
+    ]
+}

=== added file 'tests/resources/presentationmanagersongs/Amazing Grace.sng'
Binary files tests/resources/presentationmanagersongs/Amazing Grace.sng	1970-01-01 00:00:00 +0000 and tests/resources/presentationmanagersongs/Amazing Grace.sng	2015-01-30 21:59:49 +0000 differ

References