← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~sam92/openlp/bug-1358418 into lp:openlp

 

Samuel Mehrbrodt has proposed merging lp:~sam92/openlp/bug-1358418 into lp:openlp.

Requested reviews:
  Raoul Snyman (raoul-snyman)
Related bugs:
  Bug #1358418 in OpenLP: "Can't import ProPresenter file"
  https://bugs.launchpad.net/openlp/+bug/1358418

For more details, see:
https://code.launchpad.net/~sam92/openlp/bug-1358418/+merge/232003

Fix ProPresenter Import

* Use the filename as title since not all songs have the property "CCLISongTitle"
* Ignore slides without text (and don't crash)
* Make it clear that only v4 files are supported

lp:~sam92/openlp/bug-1358418 (revision 2415)
[SUCCESS] http://ci.openlp.org/job/Branch-01-Pull/581/
[SUCCESS] http://ci.openlp.org/job/Branch-02-Functional-Tests/532/
[SUCCESS] http://ci.openlp.org/job/Branch-03-Interface-Tests/476/
[SUCCESS] http://ci.openlp.org/job/Branch-04a-Windows_Functional_Tests/436/
[SUCCESS] http://ci.openlp.org/job/Branch-04b-Windows_Interface_Tests/48/
[SUCCESS] http://ci.openlp.org/job/Branch-05a-Code_Analysis/268/
[SUCCESS] http://ci.openlp.org/job/Branch-05b-Test_Coverage/142/
-- 
https://code.launchpad.net/~sam92/openlp/bug-1358418/+merge/232003
Your team OpenLP Core is subscribed to branch lp:openlp.
=== modified file 'openlp/plugins/songs/lib/importer.py'
--- openlp/plugins/songs/lib/importer.py	2014-07-14 16:50:50 +0000
+++ openlp/plugins/songs/lib/importer.py	2014-08-24 11:38:41 +0000
@@ -290,9 +290,9 @@
         },
         ProPresenter: {
             'class': ProPresenterImport,
-            'name': 'ProPresenter',
+            'name': 'ProPresenter 4',
             'prefix': 'proPresenter',
-            'filter': '%s (*.pro4)' % translate('SongsPlugin.ImportWizardForm', 'ProPresenter Song Files')
+            'filter': '%s (*.pro4)' % translate('SongsPlugin.ImportWizardForm', 'ProPresenter 4 Song Files')
         },
         SongBeamer: {
             'class': SongBeamerImport,

=== modified file 'openlp/plugins/songs/lib/importers/__init__.py'
--- openlp/plugins/songs/lib/importers/__init__.py	2014-07-03 17:57:13 +0000
+++ openlp/plugins/songs/lib/importers/__init__.py	2014-08-24 11:38:41 +0000
@@ -27,5 +27,5 @@
 # Temple Place, Suite 330, Boston, MA 02111-1307 USA                          #
 ###############################################################################
 """
-The :mod:`~openlp.plugins.songs.lib.import` module contains importers for the Songs plugin.
+The :mod:`~openlp.plugins.songs.lib.importers` module contains importers for the Songs plugin.
 """

=== modified file 'openlp/plugins/songs/lib/importers/propresenter.py'
--- openlp/plugins/songs/lib/importers/propresenter.py	2014-07-04 09:35:10 +0000
+++ openlp/plugins/songs/lib/importers/propresenter.py	2014-08-24 11:38:41 +0000
@@ -33,17 +33,20 @@
 
 import os
 import base64
+import logging
 from lxml import objectify
 
 from openlp.core.ui.wizard import WizardStrings
 from openlp.plugins.songs.lib import strip_rtf
 from .songimport import SongImport
 
+log = logging.getLogger(__name__)
+
 
 class ProPresenterImport(SongImport):
     """
     The :class:`ProPresenterImport` class provides OpenLP with the
-    ability to import ProPresenter song files.
+    ability to import ProPresenter 4 song files.
     """
     def do_import(self):
         self.import_wizard.progress_bar.setMaximum(len(self.import_source))
@@ -52,11 +55,11 @@
                 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)
+            self.process_song(root, file_path)
 
-    def process_song(self, root):
+    def process_song(self, root, filename):
         self.set_defaults()
-        self.title = root.get('CCLISongTitle')
+        self.title = os.path.basename(filename).rstrip('.pro4')
         self.copyright = root.get('CCLICopyrightInfo')
         self.comments = root.get('notes')
         self.ccli_number = root.get('CCLILicenseNumber')
@@ -67,6 +70,9 @@
         count = 0
         for slide in root.slides.RVDisplaySlide:
             count += 1
+            if not hasattr(slide.displayElements, 'RVTextElement'):
+                log.debug('No text found, may be an image slide')
+                continue
             RTFData = slide.displayElements.RVTextElement.get('RTFData')
             rtf = base64.standard_b64decode(RTFData)
             words, encoding = strip_rtf(rtf.decode())

=== modified file 'tests/functional/openlp_plugins/songs/test_propresenterimport.py'
--- tests/functional/openlp_plugins/songs/test_propresenterimport.py	2014-07-07 16:21:45 +0000
+++ tests/functional/openlp_plugins/songs/test_propresenterimport.py	2014-08-24 11:38:41 +0000
@@ -52,3 +52,5 @@
         """
         self.file_import([os.path.join(TEST_PATH, 'Amazing Grace.pro4')],
                          self.load_external_result_data(os.path.join(TEST_PATH, 'Amazing Grace.json')))
+        self.file_import([os.path.join(TEST_PATH, 'Vaste Grond.pro4')],
+                         self.load_external_result_data(os.path.join(TEST_PATH, 'Vaste Grond.json')))

=== added file 'tests/resources/propresentersongs/Vaste Grond.json'
--- tests/resources/propresentersongs/Vaste Grond.json	1970-01-01 00:00:00 +0000
+++ tests/resources/propresentersongs/Vaste Grond.json	2014-08-24 11:38:41 +0000
@@ -0,0 +1,34 @@
+{
+    "title": "Vaste Grond",
+    "verse_order_list": [],
+    "verses": [
+        [
+            "God voor U is niets onmogelijk\nHoe ongelofelijk\nU heeft alles in de hand",
+            "v1"
+        ],
+        [
+            "U bent God en trekt Uw eigen plan\nU bent voor niemand bang\nVoor niets en niemand bang",
+            "v2"
+        ],
+        [
+            "U houd me vast en geeft me moed\nOm door te gaan als ik niet durf\nIk wil van U zijn",
+            "v3"
+        ],
+        [
+            "U geeft me kracht, en bent de vaste grond\nwaarop ik stevig sta\nik wil van U zijn, voor altijd van U zijn\nO God.",
+            "v4"
+        ],
+        [
+            "Grote God, U bent uitzonderlijk\nen ondoorgrondelijk\nU biedt Uw liefde aan",
+            "v5"
+        ],
+        [
+            "Wie ben ik, dat U mij ziet staan\nen met mij om wilt gaan?\nIk kan U niet weerstaan",
+            "v6"
+        ],
+        [
+            "Onweerstaanbaar,\nonweerstaanbare God",
+            "v7"
+        ]
+    ]
+}

=== added file 'tests/resources/propresentersongs/Vaste Grond.pro4'
--- tests/resources/propresentersongs/Vaste Grond.pro4	1970-01-01 00:00:00 +0000
+++ tests/resources/propresentersongs/Vaste Grond.pro4	2014-08-24 11:38:41 +0000
@@ -0,0 +1,1 @@
+<RVPresentationDocument height="870" width="1152" versionNumber="400" docType="0" creatorCode="1349676880" lastDateUsed="2011-01-09T09:34:05" usedCount="0" category="Presentation" resourcesDirectory="" backgroundColor="0 0 0 1" drawingBackgroundColor="0" notes="" artist="" author="" album="" CCLIDisplay="0" CCLIArtistCredits="" CCLISongTitle="" CCLIPublisher="" CCLICopyrightInfo="" CCLILicenseNumber=""><slides containerClass="NSMutableArray"><RVDisplaySlide backgroundColor="0 0 0 1" enabled="1" highlightColor="0 0 0 0" hotKey="" label="" notes="" slideType="1" sort_index="0" UUID="01ED5EA2-1674-4B9D-A277-9E114BACA802" drawingBackgroundColor="0" serialization-array-index="0"><cues containerClass="NSMutableArray"></cues><displayElements containerClass="NSMutableArray"><RVTextElement displayDelay="0" displayName="" locked="0" persistent="0" typeID="0" fromTemplate="0" bezelRadius="0" drawingFill="0" drawingShadow="0" drawingStroke="0" fillColor="1 1 1 1" rotation="0" source="" adjustsHeightToFit="0" verticalAlignment="1" RTFData="e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGY5NDlcY29jb2FzdWJydGY1NDAKe1xmb250dGJsXGYwXGZzd2lzc1xmY2hhcnNldDAgSGVsdmV0aWNhO30Ke1xjb2xvcnRibDtccmVkMjU1XGdyZWVuMjU1XGJsdWUyNTU7fQpccGFyZFx0eDU2MFx0eDExMjBcdHgxNjgwXHR4MjI0MFx0eDI4MDBcdHgzMzYwXHR4MzkyMFx0eDQ0ODBcdHg1MDQwXHR4NTYwMFx0eDYxNjBcdHg2NzIwXHFjXHBhcmRpcm5hdHVyYWwKClxmMFxmczk2IFxjZjEgR29kIHZvb3IgVSBpcyBuaWV0cyBvbm1vZ2VsaWprXApIb2Ugb25nZWxvZmVsaWprXApVIGhlZWZ0IGFsbGVzIGluIGRlIGhhbmR9" serialization-array-index="0"><_-RVRect3D-_position x="32.37209" y="29" z="0" width="1074.349" height="818.7442"></_-RVRect3D-_position><_-D-_serializedShadow containerClass="NSMutableDictionary"><NSCalibratedRGBColor serialization-native-value="0 0 0 0.3333333432674408" serialization-dictionary-key="shadowColor"></NSCalibratedRGBColor><NSCFString serialization-native-value="{5, -5}" serialization-dictionary-key="shadowOffset"></NSCFString><NSCFNumber serialization-native-value="0" serialization-dictionary-key="shadowBlurRadius"></NSCFNumber></_-D-_serializedShadow><stroke containerClass="NSMutableDictionary"><NSCachedRGBColor serialization-native-value="0 0 0 1" serialization-dictionary-key="RVShapeElementStrokeColorKey"></NSCachedRGBColor><NSCFNumber serialization-native-value="1" serialization-dictionary-key="RVShapeElementStrokeWidthKey"></NSCFNumber></stroke></RVTextElement></displayElements></RVDisplaySlide><RVDisplaySlide backgroundColor="0 0 0 1" enabled="1" highlightColor="0 0 0 0" hotKey="" label="" notes="" slideType="1" sort_index="1" UUID="95517344-C447-4FDA-AEDB-48334E59CE47" drawingBackgroundColor="0" serialization-array-index="1"><cues containerClass="NSMutableArray"></cues><displayElements containerClass="NSMutableArray"><RVTextElement displayDelay="0" displayName="" locked="0" persistent="0" typeID="0" fromTemplate="0" bezelRadius="0" drawingFill="0" drawingShadow="0" drawingStroke="0" fillColor="1 1 1 1" rotation="0" source="" adjustsHeightToFit="0" verticalAlignment="1" RTFData="e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGY5NDlcY29jb2FzdWJydGY1NDAKe1xmb250dGJsXGYwXGZzd2lzc1xmY2hhcnNldDAgSGVsdmV0aWNhO30Ke1xjb2xvcnRibDtccmVkMjU1XGdyZWVuMjU1XGJsdWUyNTU7fQpccGFyZFx0eDU2MFx0eDExMjBcdHgxNjgwXHR4MjI0MFx0eDI4MDBcdHgzMzYwXHR4MzkyMFx0eDQ0ODBcdHg1MDQwXHR4NTYwMFx0eDYxNjBcdHg2NzIwXHFjXHBhcmRpcm5hdHVyYWwKClxmMFxmczk2IFxjZjEgVSBiZW50IEdvZCBlbiB0cmVrdCBVdyBlaWdlbiBwbGFuXApVIGJlbnQgdm9vciBuaWVtYW5kIGJhbmdcClZvb3IgbmlldHMgZW4gbmllbWFuZCBiYW5nfQ==" serialization-array-index="0"><_-RVRect3D-_position x="32.37209" y="29" z="0" width="1074.349" height="818.7442"></_-RVRect3D-_position><_-D-_serializedShadow containerClass="NSMutableDictionary"><NSCalibratedRGBColor serialization-native-value="0 0 0 0.3333333432674408" serialization-dictionary-key="shadowColor"></NSCalibratedRGBColor><NSCFString serialization-native-value="{5, -5}" serialization-dictionary-key="shadowOffset"></NSCFString><NSCFNumber serialization-native-value="0" serialization-dictionary-key="shadowBlurRadius"></NSCFNumber></_-D-_serializedShadow><stroke containerClass="NSMutableDictionary"><NSCachedRGBColor serialization-native-value="0 0 0 1" serialization-dictionary-key="RVShapeElementStrokeColorKey"></NSCachedRGBColor><NSCFNumber serialization-native-value="1" serialization-dictionary-key="RVShapeElementStrokeWidthKey"></NSCFNumber></stroke></RVTextElement></displayElements></RVDisplaySlide><RVDisplaySlide backgroundColor="0 0 0 1" enabled="1" highlightColor="0 0 0 0" hotKey="" label="" notes="" slideType="1" sort_index="2" UUID="931010EB-1B70-4F57-9D19-D2957D96D853" drawingBackgroundColor="0" serialization-array-index="2"><cues containerClass="NSMutableArray"></cues><displayElements containerClass="NSMutableArray"><RVTextElement displayDelay="0" displayName="" locked="0" persistent="0" typeID="0" fromTemplate="0" bezelRadius="0" drawingFill="0" drawingShadow="0" drawingStroke="0" fillColor="1 1 1 1" rotation="0" source="" adjustsHeightToFit="0" verticalAlignment="1" RTFData="e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGY5NDlcY29jb2FzdWJydGY1NDAKe1xmb250dGJsXGYwXGZzd2lzc1xmY2hhcnNldDAgSGVsdmV0aWNhO30Ke1xjb2xvcnRibDtccmVkMjU1XGdyZWVuMjU1XGJsdWUyNTU7fQpccGFyZFx0eDU2MFx0eDExMjBcdHgxNjgwXHR4MjI0MFx0eDI4MDBcdHgzMzYwXHR4MzkyMFx0eDQ0ODBcdHg1MDQwXHR4NTYwMFx0eDYxNjBcdHg2NzIwXHFjXHBhcmRpcm5hdHVyYWwKClxmMFxmczk2IFxjZjEgVSBob3VkIG1lIHZhc3QgZW4gZ2VlZnQgbWUgbW9lZFwKT20gZG9vciB0ZSBnYWFuIGFscyBpayBuaWV0IGR1cmZcCklrIHdpbCB2YW4gVSB6aWpufQ==" serialization-array-index="0"><_-RVRect3D-_position x="32.37209" y="29" z="0" width="1074.349" height="818.7442"></_-RVRect3D-_position><_-D-_serializedShadow containerClass="NSMutableDictionary"><NSCalibratedRGBColor serialization-native-value="0 0 0 0.3333333432674408" serialization-dictionary-key="shadowColor"></NSCalibratedRGBColor><NSCFString serialization-native-value="{5, -5}" serialization-dictionary-key="shadowOffset"></NSCFString><NSCFNumber serialization-native-value="0" serialization-dictionary-key="shadowBlurRadius"></NSCFNumber></_-D-_serializedShadow><stroke containerClass="NSMutableDictionary"><NSCachedRGBColor serialization-native-value="0 0 0 1" serialization-dictionary-key="RVShapeElementStrokeColorKey"></NSCachedRGBColor><NSCFNumber serialization-native-value="1" serialization-dictionary-key="RVShapeElementStrokeWidthKey"></NSCFNumber></stroke></RVTextElement></displayElements></RVDisplaySlide><RVDisplaySlide backgroundColor="0 0 0 1" enabled="1" highlightColor="0 0 0 0" hotKey="" label="" notes="" slideType="1" sort_index="3" UUID="3D241B4F-026E-4EC9-9A7F-A5DAC287BF11" drawingBackgroundColor="0" serialization-array-index="3"><cues containerClass="NSMutableArray"></cues><displayElements containerClass="NSMutableArray"><RVTextElement displayDelay="0" displayName="" locked="0" persistent="0" typeID="0" fromTemplate="0" bezelRadius="0" drawingFill="0" drawingShadow="0" drawingStroke="0" fillColor="1 1 1 1" rotation="0" source="" adjustsHeightToFit="0" verticalAlignment="1" RTFData="e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGY5NDlcY29jb2FzdWJydGY1NDAKe1xmb250dGJsXGYwXGZzd2lzc1xmY2hhcnNldDAgSGVsdmV0aWNhO30Ke1xjb2xvcnRibDtccmVkMjU1XGdyZWVuMjU1XGJsdWUyNTU7fQpccGFyZFx0eDU2MFx0eDExMjBcdHgxNjgwXHR4MjI0MFx0eDI4MDBcdHgzMzYwXHR4MzkyMFx0eDQ0ODBcdHg1MDQwXHR4NTYwMFx0eDYxNjBcdHg2NzIwXHFjXHBhcmRpcm5hdHVyYWwKClxmMFxmczk2IFxjZjEgVSBnZWVmdCBtZSBrcmFjaHQsIGVuIGJlbnQgZGUgdmFzdGUgZ3JvbmRcCndhYXJvcCBpayBzdGV2aWcgc3RhXAppayB3aWwgdmFuIFUgemlqbiwgdm9vciBhbHRpamQgdmFuIFUgemlqblwKTyBHb2QufQ==" serialization-array-index="0"><_-RVRect3D-_position x="32.37209" y="29" z="0" width="1074.349" height="818.7442"></_-RVRect3D-_position><_-D-_serializedShadow containerClass="NSMutableDictionary"><NSCalibratedRGBColor serialization-native-value="0 0 0 0.3333333432674408" serialization-dictionary-key="shadowColor"></NSCalibratedRGBColor><NSCFString serialization-native-value="{5, -5}" serialization-dictionary-key="shadowOffset"></NSCFString><NSCFNumber serialization-native-value="0" serialization-dictionary-key="shadowBlurRadius"></NSCFNumber></_-D-_serializedShadow><stroke containerClass="NSMutableDictionary"><NSCachedRGBColor serialization-native-value="0 0 0 1" serialization-dictionary-key="RVShapeElementStrokeColorKey"></NSCachedRGBColor><NSCFNumber serialization-native-value="1" serialization-dictionary-key="RVShapeElementStrokeWidthKey"></NSCFNumber></stroke></RVTextElement></displayElements></RVDisplaySlide><RVDisplaySlide backgroundColor="0 0 0 1" enabled="1" highlightColor="0 0 0 0" hotKey="" label="" notes="" slideType="1" sort_index="4" UUID="C257A8B6-1685-42BD-91B1-36EFF4D9572A" drawingBackgroundColor="0" serialization-array-index="4"><cues containerClass="NSMutableArray"></cues><displayElements containerClass="NSMutableArray"><RVTextElement displayDelay="0" displayName="" locked="0" persistent="0" typeID="0" fromTemplate="0" bezelRadius="0" drawingFill="0" drawingShadow="0" drawingStroke="0" fillColor="1 1 1 1" rotation="0" source="" adjustsHeightToFit="0" verticalAlignment="1" RTFData="e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGY5NDlcY29jb2FzdWJydGY1NDAKe1xmb250dGJsXGYwXGZzd2lzc1xmY2hhcnNldDAgSGVsdmV0aWNhO30Ke1xjb2xvcnRibDtccmVkMjU1XGdyZWVuMjU1XGJsdWUyNTU7fQpccGFyZFx0eDU2MFx0eDExMjBcdHgxNjgwXHR4MjI0MFx0eDI4MDBcdHgzMzYwXHR4MzkyMFx0eDQ0ODBcdHg1MDQwXHR4NTYwMFx0eDYxNjBcdHg2NzIwXHFjXHBhcmRpcm5hdHVyYWwKClxmMFxmczk2IFxjZjEgR3JvdGUgR29kLCBVIGJlbnQgdWl0em9uZGVybGlqa1wKZW4gb25kb29yZ3JvbmRlbGlqa1wKVSBiaWVkdCBVdyBsaWVmZGUgYWFufQ==" serialization-array-index="0"><_-RVRect3D-_position x="32.37209" y="29" z="0" width="1074.349" height="818.7442"></_-RVRect3D-_position><_-D-_serializedShadow containerClass="NSMutableDictionary"><NSCalibratedRGBColor serialization-native-value="0 0 0 0.3333333432674408" serialization-dictionary-key="shadowColor"></NSCalibratedRGBColor><NSCFString serialization-native-value="{5, -5}" serialization-dictionary-key="shadowOffset"></NSCFString><NSCFNumber serialization-native-value="0" serialization-dictionary-key="shadowBlurRadius"></NSCFNumber></_-D-_serializedShadow><stroke containerClass="NSMutableDictionary"><NSCachedRGBColor serialization-native-value="0 0 0 1" serialization-dictionary-key="RVShapeElementStrokeColorKey"></NSCachedRGBColor><NSCFNumber serialization-native-value="1" serialization-dictionary-key="RVShapeElementStrokeWidthKey"></NSCFNumber></stroke></RVTextElement></displayElements></RVDisplaySlide><RVDisplaySlide backgroundColor="0 0 0 1" enabled="1" highlightColor="0 0 0 0" hotKey="" label="" notes="" slideType="1" sort_index="5" UUID="F4B3AF43-BC5B-4A0E-A365-C4A745E97C33" drawingBackgroundColor="0" serialization-array-index="5"><cues containerClass="NSMutableArray"></cues><displayElements containerClass="NSMutableArray"><RVTextElement displayDelay="0" displayName="" locked="0" persistent="0" typeID="0" fromTemplate="0" bezelRadius="0" drawingFill="0" drawingShadow="0" drawingStroke="0" fillColor="1 1 1 1" rotation="0" source="" adjustsHeightToFit="0" verticalAlignment="1" RTFData="e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGY5NDlcY29jb2FzdWJydGY1NDAKe1xmb250dGJsXGYwXGZzd2lzc1xmY2hhcnNldDAgSGVsdmV0aWNhO30Ke1xjb2xvcnRibDtccmVkMjU1XGdyZWVuMjU1XGJsdWUyNTU7fQpccGFyZFx0eDU2MFx0eDExMjBcdHgxNjgwXHR4MjI0MFx0eDI4MDBcdHgzMzYwXHR4MzkyMFx0eDQ0ODBcdHg1MDQwXHR4NTYwMFx0eDYxNjBcdHg2NzIwXHFjXHBhcmRpcm5hdHVyYWwKClxmMFxmczk2IFxjZjEgV2llIGJlbiBpaywgZGF0IFUgbWlqIHppZXQgc3RhYW5cCmVuIG1ldCBtaWogb20gd2lsdCBnYWFuP1wKSWsga2FuIFUgbmlldCB3ZWVyc3RhYW59" serialization-array-index="0"><_-RVRect3D-_position x="32.37209" y="29" z="0" width="1074.349" height="818.7442"></_-RVRect3D-_position><_-D-_serializedShadow containerClass="NSMutableDictionary"><NSCalibratedRGBColor serialization-native-value="0 0 0 0.3333333432674408" serialization-dictionary-key="shadowColor"></NSCalibratedRGBColor><NSCFString serialization-native-value="{5, -5}" serialization-dictionary-key="shadowOffset"></NSCFString><NSCFNumber serialization-native-value="0" serialization-dictionary-key="shadowBlurRadius"></NSCFNumber></_-D-_serializedShadow><stroke containerClass="NSMutableDictionary"><NSCachedRGBColor serialization-native-value="0 0 0 1" serialization-dictionary-key="RVShapeElementStrokeColorKey"></NSCachedRGBColor><NSCFNumber serialization-native-value="1" serialization-dictionary-key="RVShapeElementStrokeWidthKey"></NSCFNumber></stroke></RVTextElement></displayElements></RVDisplaySlide><RVDisplaySlide backgroundColor="0 0 0 1" enabled="1" highlightColor="0 0 0 0" hotKey="" label="" notes="" slideType="1" sort_index="6" UUID="6BEEF0BC-E0C3-43CF-A33D-C5EAC5534244" drawingBackgroundColor="0" serialization-array-index="6"><cues containerClass="NSMutableArray"></cues><displayElements containerClass="NSMutableArray"><RVTextElement displayDelay="0" displayName="" locked="0" persistent="0" typeID="0" fromTemplate="0" bezelRadius="0" drawingFill="0" drawingShadow="0" drawingStroke="0" fillColor="1 1 1 1" rotation="0" source="" adjustsHeightToFit="0" verticalAlignment="1" RTFData="e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGY5NDlcY29jb2FzdWJydGY1NDAKe1xmb250dGJsXGYwXGZzd2lzc1xmY2hhcnNldDAgSGVsdmV0aWNhO30Ke1xjb2xvcnRibDtccmVkMjU1XGdyZWVuMjU1XGJsdWUyNTU7fQpccGFyZFx0eDU2MFx0eDExMjBcdHgxNjgwXHR4MjI0MFx0eDI4MDBcdHgzMzYwXHR4MzkyMFx0eDQ0ODBcdHg1MDQwXHR4NTYwMFx0eDYxNjBcdHg2NzIwXHFjXHBhcmRpcm5hdHVyYWwKClxmMFxmczk2IFxjZjEgT253ZWVyc3RhYW5iYWFyLFwKb253ZWVyc3RhYW5iYXJlIEdvZH0=" serialization-array-index="0"><_-RVRect3D-_position x="32.37209" y="29" z="0" width="1074.349" height="818.7442"></_-RVRect3D-_position><_-D-_serializedShadow containerClass="NSMutableDictionary"><NSCalibratedRGBColor serialization-native-value="0 0 0 0.3333333432674408" serialization-dictionary-key="shadowColor"></NSCalibratedRGBColor><NSCFString serialization-native-value="{5, -5}" serialization-dictionary-key="shadowOffset"></NSCFString><NSCFNumber serialization-native-value="0" serialization-dictionary-key="shadowBlurRadius"></NSCFNumber></_-D-_serializedShadow><stroke containerClass="NSMutableDictionary"><NSCachedRGBColor serialization-native-value="0 0 0 1" serialization-dictionary-key="RVShapeElementStrokeColorKey"></NSCachedRGBColor><NSCFNumber serialization-native-value="1" serialization-dictionary-key="RVShapeElementStrokeWidthKey"></NSCFNumber></stroke></RVTextElement></displayElements></RVDisplaySlide></slides><timeline timeOffSet="0" selectedMediaTrackIndex="0" unitOfMeasure="60" duration="0" loop="0"><timeCues containerClass="NSMutableArray"></timeCues><mediaTracks containerClass="NSMutableArray"></mediaTracks></timeline><bibleReference containerClass="NSMutableDictionary"></bibleReference></RVPresentationDocument>
\ No newline at end of file


Follow ups