From 9f345523649b224c549f039fd899b7f96c87c5f0 Mon Sep 17 00:00:00 2001 From: Samuel Mehrbrodt Date: Thu, 3 Jul 2014 23:30:41 +0200 Subject: [PATCH 1/6] PowerPraise importer Fixes: https://launchpad.net/bugs/1336929 --- openlp/plugins/songs/lib/powerpraiseimport.py | 70 +++++++++++++++++++ .../songs/test_powerpraiseimport.py | 54 ++++++++++++++ .../songs/test_propresenterimport.py | 2 +- tests/helpers/songfileimport.py | 20 +++++- .../Näher, mein Gott zu Dir.json | 18 +++++ .../Näher, mein Gott zu Dir.ppl | 2 + 6 files changed, 163 insertions(+), 3 deletions(-) create mode 100644 openlp/plugins/songs/lib/powerpraiseimport.py create mode 100644 tests/functional/openlp_plugins/songs/test_powerpraiseimport.py create mode 100644 tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.json create mode 100644 tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.ppl diff --git a/openlp/plugins/songs/lib/powerpraiseimport.py b/openlp/plugins/songs/lib/powerpraiseimport.py new file mode 100644 index 000000000..56ebff542 --- /dev/null +++ b/openlp/plugins/songs/lib/powerpraiseimport.py @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2013 Raoul Snyman # +# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, # +# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. # +# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, # +# Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # +# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Dave Warnock, # +# Frode Woldsund, Martin Zibricky, Patrick Zimmermann # +# --------------------------------------------------------------------------- # +# This program is free software; you can redistribute it and/or modify it # +# under the terms of the GNU General Public License as published by the Free # +# Software Foundation; version 2 of the License. # +# # +# This program is distributed in the hope that it will be useful, but WITHOUT # +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # +# more details. # +# # +# You should have received a copy of the GNU General Public License along # +# with this program; if not, write to the Free Software Foundation, Inc., 59 # +# Temple Place, Suite 330, Boston, MA 02111-1307 USA # +############################################################################### +""" +The :mod:`powerpraiseimport` module provides the functionality for importing +Powerpraise song files into the current database. +""" + +import os +import base64 +from lxml import objectify + +from openlp.core.ui.wizard import WizardStrings +from openlp.plugins.songs.lib import strip_rtf +from .songimport import SongImport + + +class PowerpraiseImport(SongImport): + """ + The :class:`PowerpraiseImport` class provides OpenLP with the + ability to import Powerpraise song files. + """ + def do_import(self): + self.import_wizard.progress_bar.setMaximum(len(self.import_source)) + for file_path in self.import_source: + 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() + self.process_song(root) + + def process_song(self, root): + self.set_defaults() + self.title = root.general.title + count = 0; + for part in root.songtext.part: + verse_text = "" + count += 1 + for slide in part.slide: + for line in slide.line: + verse_text += line + print(verse_text) + self.add_verse(verse_text, "v%d" % count) + if not self.finish(): + self.log_error(self.import_source) diff --git a/tests/functional/openlp_plugins/songs/test_powerpraiseimport.py b/tests/functional/openlp_plugins/songs/test_powerpraiseimport.py new file mode 100644 index 000000000..924cf127c --- /dev/null +++ b/tests/functional/openlp_plugins/songs/test_powerpraiseimport.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2013 Raoul Snyman # +# Portions copyright (c) 2008-2013 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, # +# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. # +# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, # +# Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # +# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Dave Warnock, # +# Frode Woldsund, Martin Zibricky, Patrick Zimmermann # +# --------------------------------------------------------------------------- # +# This program is free software; you can redistribute it and/or modify it # +# under the terms of the GNU General Public License as published by the Free # +# Software Foundation; version 2 of the License. # +# # +# This program is distributed in the hope that it will be useful, but WITHOUT # +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # +# more details. # +# # +# You should have received a copy of the GNU General Public License along # +# with this program; if not, write to the Free Software Foundation, Inc., 59 # +# Temple Place, Suite 330, Boston, MA 02111-1307 USA # +############################################################################### +""" +The :mod:`powerpraiseimport` module provides the functionality for importing +ProPresenter song files into the current installation database. +""" + +import os + +from tests.helpers.songfileimport import SongImportTestHelper + +TEST_PATH = os.path.abspath( + os.path.join(os.path.dirname(__file__), '..', '..', '..', 'resources', 'powerpraisesongs')) + + +class TestPowerpraiseFileImport(SongImportTestHelper): + + def __init__(self, *args, **kwargs): + self.importer_class_name = 'PowerpraiseImport' + self.importer_module_name = 'powerpraiseimport' + super(TestPowerpraiseFileImport, self).__init__(*args, **kwargs) + + def test_song_import(self): + """ + Test that loading a PowerPraise file works correctly + """ + self.file_import([os.path.join(TEST_PATH, 'Näher, mein Gott zu Dir.ppl')], + self.load_external_result_data(os.path.join(TEST_PATH, 'Näher, mein Gott zu Dir.json'))) diff --git a/tests/functional/openlp_plugins/songs/test_propresenterimport.py b/tests/functional/openlp_plugins/songs/test_propresenterimport.py index 10e2defc6..9f5760849 100644 --- a/tests/functional/openlp_plugins/songs/test_propresenterimport.py +++ b/tests/functional/openlp_plugins/songs/test_propresenterimport.py @@ -48,7 +48,7 @@ class TestProPresenterFileImport(SongImportTestHelper): def test_song_import(self): """ - Test that loading an ProPresenter file works correctly + Test that loading a ProPresenter file works correctly """ self.file_import([os.path.join(TEST_PATH, 'Amazing Grace.pro4')], self.load_external_result_data(os.path.join(TEST_PATH, 'Amazing Grace.json'))) diff --git a/tests/helpers/songfileimport.py b/tests/helpers/songfileimport.py index 80b2ee268..afa3e48bd 100644 --- a/tests/helpers/songfileimport.py +++ b/tests/helpers/songfileimport.py @@ -31,10 +31,13 @@ The :mod:`songfileimporthelper` modules provides a helper class and methods to e song files from third party applications. """ import json +import logging from unittest import TestCase from tests.functional import patch, MagicMock, call +log = logging.getLogger(__name__) + class SongImportTestHelper(TestCase): """ @@ -107,9 +110,21 @@ class SongImportTestHelper(TestCase): topics = self._get_data(result_data, 'topics') verse_order_list = self._get_data(result_data, 'verse_order_list') - # THEN: do_import should return none, the song data should be as expected, and finish should have been - # called. + # THEN: do_import should return none, the song data should be as expected, and finish should have been called. self.assertIsNone(importer.do_import(), 'do_import should return None when it has completed') + + # Debug information - will be displayed when the test fails + log.debug("Title imported: %s" % importer.title) + log.debug("Verses imported: %s" % self.mocked_add_verse.mock_calls) + log.debug("Verse order imported: %s" % importer.verse_order_list) + log.debug("Authors imported: %s" % self.mocked_add_author.mock_calls) + log.debug("CCLI No. imported: %s" % importer.ccli_number) + log.debug("Comments imported: %s" % importer.comments) + log.debug("Songbook imported: %s" % importer.song_book_name) + log.debug("Song number imported: %s" % importer.song_number) + log.debug("Song copyright imported: %s" % importer.song_number) + log.debug("Topics imported: %s" % importer.topics) + self.assertEqual(importer.title, title, 'title for %s should be "%s"' % (source_file_name, title)) for author in author_calls: self.mocked_add_author.assert_any_call(author) @@ -119,6 +134,7 @@ class SongImportTestHelper(TestCase): self.assertEqual(importer.ccli_number, ccli_number, 'ccli_number for %s should be %s' % (source_file_name, ccli_number)) expected_calls = [] + print(self.mocked_add_verse.mock_calls) for verse_text, verse_tag in add_verse_calls: self.mocked_add_verse.assert_any_call(verse_text, verse_tag) expected_calls.append(call(verse_text, verse_tag)) diff --git a/tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.json b/tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.json new file mode 100644 index 000000000..54094f748 --- /dev/null +++ b/tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.json @@ -0,0 +1,18 @@ +{ + "title": "Näher, mein Gott, zu Dir", + "verse_order_list": [], + "verses": [ + [ + "Näher, mein Gott, zu Dir,sei meine Bitt'!Näher, o Herr, zu Dirmit jedem Schritt.Nur an dem Herzen Deinkann ich geborgen sein;deshalb die Bitte mein:Näher zu Dir!", + "v1" + ], + [ + "Näher, mein Gott, zu Dir!Ein jeder Tagsoll es neu zeigen mir,was er vermag:Wie seiner Gnade Macht,Erlösung hat gebracht,in uns're Sündennacht.Näher zu Dir!", + "v2" + ], + [ + "Näher, mein Gott, zu Dir!Dich bet' ich an.Wie vieles hast an mir,Du doch getan!Von Banden frei und los,ruh' ich in Deinem Schoss.Ja, Deine Gnad' ist gross!Näher zu Dir!", + "v3" + ] + ] +} \ No newline at end of file diff --git a/tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.ppl b/tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.ppl new file mode 100644 index 000000000..c0c7f8c19 --- /dev/null +++ b/tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.ppl @@ -0,0 +1,2 @@ + +Näher, mein Gott, zu DirAnbetungDeutschNäher, mein Gott, zu Dir,sei meine Bitt'!Näher, o Herr, zu Dirmit jedem Schritt.Nur an dem Herzen Deinkann ich geborgen sein;deshalb die Bitte mein:Näher zu Dir!Näher, mein Gott, zu Dir!Ein jeder Tagsoll es neu zeigen mir,was er vermag:Wie seiner Gnade Macht,Erlösung hat gebracht,in uns're Sündennacht.Näher zu Dir!Näher, mein Gott, zu Dir!Dich bet' ich an.Wie vieles hast an mir,Du doch getan!Von Banden frei und los,ruh' ich in Deinem Schoss.Ja, Deine Gnad' ist gross!Näher zu Dir!Teil 1Teil 2Teil 3lastslideText und Musik: Lowell Mason, 1792-1872firstslidegrünes Buch 339Times New Roman44truetrue167772153015Times New Roman20falsefalse167772153020Times New Roman14falsefalse167772153020Times New Roman30falsefalse167772153020false0true0125Blumen\Blume 3.jpg
30
20
leftcenterinline50406070302040
From 7112356c21d65e48bbbbf5b539bd2a4eb573179d Mon Sep 17 00:00:00 2001 From: Samuel Mehrbrodt Date: Thu, 3 Jul 2014 23:48:52 +0200 Subject: [PATCH 2/6] Parse verse order --- openlp/plugins/songs/lib/powerpraiseimport.py | 19 +++++++++++++++---- tests/helpers/songfileimport.py | 1 - .../Näher, mein Gott zu Dir.json | 2 +- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/openlp/plugins/songs/lib/powerpraiseimport.py b/openlp/plugins/songs/lib/powerpraiseimport.py index 56ebff542..27b9c5c17 100644 --- a/openlp/plugins/songs/lib/powerpraiseimport.py +++ b/openlp/plugins/songs/lib/powerpraiseimport.py @@ -57,14 +57,25 @@ class PowerpraiseImport(SongImport): def process_song(self, root): self.set_defaults() self.title = root.general.title - count = 0; + verse_order_list = [] + for item in root.order.item: + verse_order_list.append(str(item)) + + count = 0 for part in root.songtext.part: - verse_text = "" count += 1 + verse_def = "v%d" % count + original_verse_def = part.get('caption') + verse_text = "" for slide in part.slide: for line in slide.line: verse_text += line - print(verse_text) - self.add_verse(verse_text, "v%d" % count) + self.add_verse(verse_text, verse_def) + # Update verse name in verse order list + for i in range(len(verse_order_list)): + if verse_order_list[i].lower() == original_verse_def.lower(): + verse_order_list[i] = verse_def + + self.verse_order_list = verse_order_list if not self.finish(): self.log_error(self.import_source) diff --git a/tests/helpers/songfileimport.py b/tests/helpers/songfileimport.py index afa3e48bd..613bb5c96 100644 --- a/tests/helpers/songfileimport.py +++ b/tests/helpers/songfileimport.py @@ -134,7 +134,6 @@ class SongImportTestHelper(TestCase): self.assertEqual(importer.ccli_number, ccli_number, 'ccli_number for %s should be %s' % (source_file_name, ccli_number)) expected_calls = [] - print(self.mocked_add_verse.mock_calls) for verse_text, verse_tag in add_verse_calls: self.mocked_add_verse.assert_any_call(verse_text, verse_tag) expected_calls.append(call(verse_text, verse_tag)) diff --git a/tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.json b/tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.json index 54094f748..b3200ba00 100644 --- a/tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.json +++ b/tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.json @@ -1,6 +1,6 @@ { "title": "Näher, mein Gott, zu Dir", - "verse_order_list": [], + "verse_order_list": ["v1", "v2", "v3"], "verses": [ [ "Näher, mein Gott, zu Dir,sei meine Bitt'!Näher, o Herr, zu Dirmit jedem Schritt.Nur an dem Herzen Deinkann ich geborgen sein;deshalb die Bitte mein:Näher zu Dir!", From 87eb8804de277b90e1e8dde0f33d8da9877ee6aa Mon Sep 17 00:00:00 2001 From: Samuel Mehrbrodt Date: Fri, 4 Jul 2014 00:06:18 +0200 Subject: [PATCH 3/6] Fixes --- openlp/plugins/songs/lib/importer.py | 31 ++++++++++++------- openlp/plugins/songs/lib/powerpraiseimport.py | 12 ++++--- .../songs/test_powerpraiseimport.py | 6 ++-- .../Näher, mein Gott zu Dir.json | 6 ++-- 4 files changed, 33 insertions(+), 22 deletions(-) diff --git a/openlp/plugins/songs/lib/importer.py b/openlp/plugins/songs/lib/importer.py index 6d01da309..659d64d3e 100644 --- a/openlp/plugins/songs/lib/importer.py +++ b/openlp/plugins/songs/lib/importer.py @@ -51,6 +51,7 @@ from .foilpresenterimport import FoilPresenterImport from .zionworximport import ZionWorxImport from .propresenterimport import ProPresenterImport from .worshipassistantimport import WorshipAssistantImport +from .powerpraiseimport import PowerPraiseImport # Imports that might fail @@ -160,17 +161,18 @@ class SongFormat(object): FoilPresenter = 8 MediaShout = 9 OpenSong = 10 - PowerSong = 11 - ProPresenter = 12 - SongBeamer = 13 - SongPro = 14 - SongShowPlus = 15 - SongsOfFellowship = 16 - SundayPlus = 17 - WordsOfWorship = 18 - WorshipAssistant = 19 - WorshipCenterPro = 20 - ZionWorx = 21 + PowerPraise = 11 + PowerSong = 12 + ProPresenter = 13 + SongBeamer = 14 + SongPro = 15 + SongShowPlus = 16 + SongsOfFellowship = 17 + SundayPlus = 18 + WordsOfWorship = 19 + WorshipAssistant = 20 + WorshipCenterPro = 21 + ZionWorx = 22 # Set optional attribute defaults __defaults__ = { @@ -266,6 +268,12 @@ class SongFormat(object): 'name': WizardStrings.OS, 'prefix': 'openSong' }, + PowerPraise: { + 'class': PowerPraiseImport, + 'name': 'PowerPraise', + 'prefix': 'powerPraise', + 'filter': '%s (*.ppl)' % translate('SongsPlugin.ImportWizardForm', 'PowerPraise Song Files') + }, PowerSong: { 'class': PowerSongImport, 'name': 'PowerSong 1.0', @@ -374,6 +382,7 @@ class SongFormat(object): SongFormat.FoilPresenter, SongFormat.MediaShout, SongFormat.OpenSong, + SongFormat.PowerPraise, SongFormat.PowerSong, SongFormat.ProPresenter, SongFormat.SongBeamer, diff --git a/openlp/plugins/songs/lib/powerpraiseimport.py b/openlp/plugins/songs/lib/powerpraiseimport.py index 27b9c5c17..0e7bcd9af 100644 --- a/openlp/plugins/songs/lib/powerpraiseimport.py +++ b/openlp/plugins/songs/lib/powerpraiseimport.py @@ -40,7 +40,7 @@ from openlp.plugins.songs.lib import strip_rtf from .songimport import SongImport -class PowerpraiseImport(SongImport): +class PowerPraiseImport(SongImport): """ The :class:`PowerpraiseImport` class provides OpenLP with the ability to import Powerpraise song files. @@ -56,7 +56,7 @@ class PowerpraiseImport(SongImport): def process_song(self, root): self.set_defaults() - self.title = root.general.title + self.title = str(root.general.title) verse_order_list = [] for item in root.order.item: verse_order_list.append(str(item)) @@ -66,11 +66,13 @@ class PowerpraiseImport(SongImport): count += 1 verse_def = "v%d" % count original_verse_def = part.get('caption') - verse_text = "" + verse_text = [] for slide in part.slide: + if not hasattr(slide, 'line'): + continue # No content for line in slide.line: - verse_text += line - self.add_verse(verse_text, verse_def) + verse_text.append(str(line)) + self.add_verse('\n'.join(verse_text), verse_def) # Update verse name in verse order list for i in range(len(verse_order_list)): if verse_order_list[i].lower() == original_verse_def.lower(): diff --git a/tests/functional/openlp_plugins/songs/test_powerpraiseimport.py b/tests/functional/openlp_plugins/songs/test_powerpraiseimport.py index 924cf127c..2d5a42e6f 100644 --- a/tests/functional/openlp_plugins/songs/test_powerpraiseimport.py +++ b/tests/functional/openlp_plugins/songs/test_powerpraiseimport.py @@ -39,12 +39,12 @@ TEST_PATH = os.path.abspath( os.path.join(os.path.dirname(__file__), '..', '..', '..', 'resources', 'powerpraisesongs')) -class TestPowerpraiseFileImport(SongImportTestHelper): +class TestPowerPraiseFileImport(SongImportTestHelper): def __init__(self, *args, **kwargs): - self.importer_class_name = 'PowerpraiseImport' + self.importer_class_name = 'PowerPraiseImport' self.importer_module_name = 'powerpraiseimport' - super(TestPowerpraiseFileImport, self).__init__(*args, **kwargs) + super(TestPowerPraiseFileImport, self).__init__(*args, **kwargs) def test_song_import(self): """ diff --git a/tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.json b/tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.json index b3200ba00..7f258f9e9 100644 --- a/tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.json +++ b/tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.json @@ -3,15 +3,15 @@ "verse_order_list": ["v1", "v2", "v3"], "verses": [ [ - "Näher, mein Gott, zu Dir,sei meine Bitt'!Näher, o Herr, zu Dirmit jedem Schritt.Nur an dem Herzen Deinkann ich geborgen sein;deshalb die Bitte mein:Näher zu Dir!", + "Näher, mein Gott, zu Dir,\nsei meine Bitt'!\nNäher, o Herr, zu Dir\nmit jedem Schritt.\nNur an dem Herzen Dein\nkann ich geborgen sein;\ndeshalb die Bitte mein:\nNäher zu Dir!", "v1" ], [ - "Näher, mein Gott, zu Dir!Ein jeder Tagsoll es neu zeigen mir,was er vermag:Wie seiner Gnade Macht,Erlösung hat gebracht,in uns're Sündennacht.Näher zu Dir!", + "Näher, mein Gott, zu Dir!\nEin jeder Tag\nsoll es neu zeigen mir,\nwas er vermag:\nWie seiner Gnade Macht,\nErlösung hat gebracht,\nin uns're Sündennacht.\nNäher zu Dir!", "v2" ], [ - "Näher, mein Gott, zu Dir!Dich bet' ich an.Wie vieles hast an mir,Du doch getan!Von Banden frei und los,ruh' ich in Deinem Schoss.Ja, Deine Gnad' ist gross!Näher zu Dir!", + "Näher, mein Gott, zu Dir!\nDich bet' ich an.\nWie vieles hast an mir,\nDu doch getan!\nVon Banden frei und los,\nruh' ich in Deinem Schoss.\nJa, Deine Gnad' ist gross!\nNäher zu Dir!", "v3" ] ] From 953adf714595923601be7b288b39bec3d5a39dce Mon Sep 17 00:00:00 2001 From: Samuel Mehrbrodt Date: Fri, 4 Jul 2014 10:35:24 +0200 Subject: [PATCH 4/6] A blank line! --- openlp/plugins/songs/lib/powerpraiseimport.py | 1 - tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.json | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/openlp/plugins/songs/lib/powerpraiseimport.py b/openlp/plugins/songs/lib/powerpraiseimport.py index 0e7bcd9af..ecf1c55fb 100644 --- a/openlp/plugins/songs/lib/powerpraiseimport.py +++ b/openlp/plugins/songs/lib/powerpraiseimport.py @@ -60,7 +60,6 @@ class PowerPraiseImport(SongImport): verse_order_list = [] for item in root.order.item: verse_order_list.append(str(item)) - count = 0 for part in root.songtext.part: count += 1 diff --git a/tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.json b/tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.json index 7f258f9e9..630b71949 100644 --- a/tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.json +++ b/tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.json @@ -15,4 +15,4 @@ "v3" ] ] -} \ No newline at end of file +} From cfd9631d042bbf3f29935137f1c8512ba71af823 Mon Sep 17 00:00:00 2001 From: Samuel Mehrbrodt Date: Sat, 5 Jul 2014 18:21:43 +0200 Subject: [PATCH 5/6] Parse verse names --- openlp/plugins/songs/lib/powerpraiseimport.py | 17 +++++++++--- .../songs/test_powerpraiseimport.py | 2 ++ .../powerpraisesongs/You are so faithful.json | 26 +++++++++++++++++++ .../powerpraisesongs/You are so faithful.ppl | 2 ++ 4 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 tests/resources/powerpraisesongs/You are so faithful.json create mode 100644 tests/resources/powerpraisesongs/You are so faithful.ppl diff --git a/openlp/plugins/songs/lib/powerpraiseimport.py b/openlp/plugins/songs/lib/powerpraiseimport.py index ecf1c55fb..6a67619b3 100644 --- a/openlp/plugins/songs/lib/powerpraiseimport.py +++ b/openlp/plugins/songs/lib/powerpraiseimport.py @@ -58,13 +58,24 @@ class PowerPraiseImport(SongImport): self.set_defaults() self.title = str(root.general.title) verse_order_list = [] + verse_count = {} for item in root.order.item: verse_order_list.append(str(item)) - count = 0 for part in root.songtext.part: - count += 1 - verse_def = "v%d" % count original_verse_def = part.get('caption') + # There are some predefined verse defitions in PowerPraise, try to parse these + if original_verse_def.startswith("Strophe") or original_verse_def.startswith("Teil"): + verse_def = 'v' + elif original_verse_def.startswith("Refrain"): + verse_def = 'c' + elif original_verse_def.startswith("Bridge"): + verse_def = 'b' + elif original_verse_def.startswith("Schluss"): + verse_def = 'e' + else: + verse_def = 'o' + verse_count[verse_def] = verse_count.get(verse_def, 0) + 1 + verse_def = '%s%d' % (verse_def, verse_count[verse_def]) verse_text = [] for slide in part.slide: if not hasattr(slide, 'line'): diff --git a/tests/functional/openlp_plugins/songs/test_powerpraiseimport.py b/tests/functional/openlp_plugins/songs/test_powerpraiseimport.py index 2d5a42e6f..fa2c5f5b5 100644 --- a/tests/functional/openlp_plugins/songs/test_powerpraiseimport.py +++ b/tests/functional/openlp_plugins/songs/test_powerpraiseimport.py @@ -52,3 +52,5 @@ class TestPowerPraiseFileImport(SongImportTestHelper): """ self.file_import([os.path.join(TEST_PATH, 'Näher, mein Gott zu Dir.ppl')], self.load_external_result_data(os.path.join(TEST_PATH, 'Näher, mein Gott zu Dir.json'))) + self.file_import([os.path.join(TEST_PATH, 'You are so faithful.ppl')], + self.load_external_result_data(os.path.join(TEST_PATH, 'You are so faithful.json'))) diff --git a/tests/resources/powerpraisesongs/You are so faithful.json b/tests/resources/powerpraisesongs/You are so faithful.json new file mode 100644 index 000000000..855b52f67 --- /dev/null +++ b/tests/resources/powerpraisesongs/You are so faithful.json @@ -0,0 +1,26 @@ +{ + "title": "You are so faithful", + "verse_order_list": ["v1", "c1", "v2", "c1", "v3", "c1", "v4"], + "verses": [ + [ + "You are so faithful\nso faithful, so faithful.\nYou are so faithful\nso faithful, so faithful.", + "v1" + ], + [ + "That's why I praise you\nin the morning\nThat's why I praise you\nin the noontime.\nThat's why I praise you\nin the evening\nThat's why I praise you\nall the time.", + "c1" + ], + [ + "You are so loving\nso loving, so loving.\nYou are so loving\nso loving, so loving.", + "v2" + ], + [ + "You are so caring\nso caring, so caring.\nYou are so caring\nso caring, so caring.", + "v3" + ], + [ + "You are so mighty\nso mighty, so mighty.\nYou are so mighty\nso mighty, so mighty.", + "v4" + ] + ] +} diff --git a/tests/resources/powerpraisesongs/You are so faithful.ppl b/tests/resources/powerpraisesongs/You are so faithful.ppl new file mode 100644 index 000000000..420ae8fb6 --- /dev/null +++ b/tests/resources/powerpraisesongs/You are so faithful.ppl @@ -0,0 +1,2 @@ + +You are so faithfulLobpreisEnglischYou are so faithfulso faithful, so faithful.Du bist so treuso treu, so treu.You are so faithfulso faithful, so faithful.Du bist so treuso treu, so treu.That's why I praise youin the morningThat's why I praise youin the noontime.Deshalb preise ich Dicham MorgenDeshalb preise ich Dicham Mittag.That's why I praise youin the eveningThat's why I praise youall the time.Deshalb preise ich Dicham AbendDeshalb preise ich Dichallezeit.You are so lovingso loving, so loving.Du bist so liebevollso liebevoll, so liebevoll.You are so lovingso loving, so loving.Du bist so liebevollso liebevoll, so liebevoll.You are so caringso caring, so caring.Du sorgst so gutDu kümmerst dich um uns.You are so caringso caring, so caring.Du sorgst so gutDu kümmerst dich um uns.You are so mightyso mighty, so mighty.Du bist so mächtigso mächtig, so mächtig.You are so mightyso mighty, so mighty.Du bist so mächtigso mächtig, so mächtig.Strophe 1RefrainStrophe 2RefrainStrophe 3RefrainStrophe 4lastslideMusik & Copyright unbekanntfirstslideTahoma30truefalse167772153020Tahoma20falsefalse167772153020Tahoma14falsefalse167772153020Tahoma30falsefalse167772153020true0true0125Blumen\Blume 6.jpg
30
20
centercenterinline50406070302040
From 201cfad9c48cdb66a63b45f27f73d4cf03f24aa0 Mon Sep 17 00:00:00 2001 From: Samuel Mehrbrodt Date: Mon, 7 Jul 2014 14:25:00 +0200 Subject: [PATCH 6/6] Remove unused imports --- openlp/plugins/songs/lib/powerpraiseimport.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/openlp/plugins/songs/lib/powerpraiseimport.py b/openlp/plugins/songs/lib/powerpraiseimport.py index 6a67619b3..ff30f9763 100644 --- a/openlp/plugins/songs/lib/powerpraiseimport.py +++ b/openlp/plugins/songs/lib/powerpraiseimport.py @@ -32,11 +32,9 @@ Powerpraise song files into the current database. """ import os -import base64 from lxml import objectify from openlp.core.ui.wizard import WizardStrings -from openlp.plugins.songs.lib import strip_rtf from .songimport import SongImport