openlp-core team mailing list archive
-
openlp-core team
-
Mailing list archive
-
Message #25936
[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