From 69951133fe8d8973110092b8b0f7d174c90e5be5 Mon Sep 17 00:00:00 2001 From: Tomas Groth Date: Thu, 7 Jul 2016 22:47:57 +0200 Subject: [PATCH] Fix handeling of control chars and escaped chars in VideoPsalm import. Fixes bug 1594945. Fixes: https://launchpad.net/bugs/1594945 --- .../plugins/songs/lib/importers/videopsalm.py | 8 ++++ .../openlp_plugins/songs/test_videopsalm.py | 2 + .../videopsalm-as-safe-a-stronghold2.json | 47 +++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 tests/resources/videopsalmsongs/videopsalm-as-safe-a-stronghold2.json diff --git a/openlp/plugins/songs/lib/importers/videopsalm.py b/openlp/plugins/songs/lib/importers/videopsalm.py index 25fd4d8eb..b536dd678 100644 --- a/openlp/plugins/songs/lib/importers/videopsalm.py +++ b/openlp/plugins/songs/lib/importers/videopsalm.py @@ -73,6 +73,14 @@ class VideoPsalmImport(SongImport): processed_content += c c = next(file_content_it) processed_content += '"' + c + # Remove control characters + elif (c < chr(32)): + processed_content += ' ' + # Handle escaped characters + elif c == '\\': + processed_content += c + c = next(file_content_it) + processed_content += c else: processed_content += c songbook = json.loads(processed_content.strip()) diff --git a/tests/functional/openlp_plugins/songs/test_videopsalm.py b/tests/functional/openlp_plugins/songs/test_videopsalm.py index 1bf13241d..ff1a81db5 100644 --- a/tests/functional/openlp_plugins/songs/test_videopsalm.py +++ b/tests/functional/openlp_plugins/songs/test_videopsalm.py @@ -43,3 +43,5 @@ class TestVideoPsalmFileImport(SongImportTestHelper): """ self.file_import(os.path.join(TEST_PATH, 'videopsalm-as-safe-a-stronghold.json'), self.load_external_result_data(os.path.join(TEST_PATH, 'as-safe-a-stronghold.json'))) + self.file_import(os.path.join(TEST_PATH, 'videopsalm-as-safe-a-stronghold2.json'), + self.load_external_result_data(os.path.join(TEST_PATH, 'as-safe-a-stronghold2.json'))) diff --git a/tests/resources/videopsalmsongs/videopsalm-as-safe-a-stronghold2.json b/tests/resources/videopsalmsongs/videopsalm-as-safe-a-stronghold2.json new file mode 100644 index 000000000..11bc082e6 --- /dev/null +++ b/tests/resources/videopsalmsongs/videopsalm-as-safe-a-stronghold2.json @@ -0,0 +1,47 @@ +{Abbreviation:"SB1",Copyright:"Public domain",Songs:[{ID:3,Composer:"Unknown",Author:"Martin Luther",Copyright:"Public +Domain",Theme:"tema1 +tema2",CCLI:"12345",Alias:"A safe stronghold",Memo1:"This is +the first comment +",Memo2:"This is +the second comment +",Memo3:"This is +the third comment +",Reference:"reference",Guid:"jtCkrJdPIUOmECjaQylg/g",Verses:[{ +Text:"As safe a stronghold our God is still, +A trusty shield and weapon; +He’ll help us clear from all the ill +That hath us now o’ertaken. +The ancient prince of hell +Hath risen with purpose fell; +Strong mail of craft and power +He weareth in this hour; +On earth is not His fellow."},{ID:2, +Text:"With \"force\" of arms we nothing can, +Full soon were we down-ridden; +But for us fights \\ the proper Man, +Whom God Himself hath bidden. +Ask ye: Who is this same? +Christ Jesus is His name, +The Lord Sabaoth’s Son; +He, and no other one, +Shall conquer in the battle."},{ID:3, +Text:"And were this world all devils o’er, +And watching to devour us, +We lay it not to heart so sore; +Not they can overpower us. +And let the prince of ill +Look grim as e’er he will, +He harms us not a whit; +For why? his doom is writ; +A word shall quickly slay him."},{ID:4, +Text:"God’s word, for all their craft and force, +One moment will not linger, +But, spite of hell, shall have its course; +’Tis written by His finger. +And though they take our life, +Goods, honour, children, wife, +Yet is their profit small: +These things shall vanish all; +The city of God remaineth."}],AudioFile:"282.mp3",IsAudioFileEnabled:1, +Text:"A Safe Stronghold Our God is Still"}],Guid:"khiHU2blX0Kb41dGdbDLhA",VersionDate:"20121012000000", +Text:"SongBook1"}