openlp-core team mailing list archive
-
openlp-core team
-
Mailing list archive
-
Message #21699
[Merge] lp:~stewart-e/openlp/verse_order_override into lp:openlp
Stewart Becker has proposed merging lp:~stewart-e/openlp/verse_order_override into lp:openlp.
Requested reviews:
OpenLP Core (openlp-core)
For more details, see:
https://code.launchpad.net/~stewart-e/openlp/verse_order_override/+merge/184651
Verse order can be overriden in services and previews
Tests added for functions I edited, although only to cover my changes
--
https://code.launchpad.net/~stewart-e/openlp/verse_order_override/+merge/184651
Your team OpenLP Core is requested to review the proposed merge of lp:~stewart-e/openlp/verse_order_override into lp:openlp.
=== modified file 'openlp/core/lib/serviceitem.py'
--- openlp/core/lib/serviceitem.py 2013-08-31 18:17:38 +0000
+++ openlp/core/lib/serviceitem.py 2013-09-09 18:41:28 +0000
@@ -5,11 +5,11 @@
# 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, #
+# Portions copyright (c) 2008-2013 Stewart Becker, 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 #
# --------------------------------------------------------------------------- #
@@ -415,8 +415,13 @@
self.background_audio.append(os.path.join(path, filename))
self.theme_overwritten = header.get('theme_overwritten', False)
if self.service_item_type == ServiceItemType.Text:
+ verses = []
for slide in serviceitem['serviceitem']['data']:
self._raw_frames.append(slide)
+ if 'verseTag' in slide and slide['verseTag']:
+ verses.append(slide['verseTag'])
+ if verses:
+ self.data_string['verse_order'] = ' '.join(verses)
elif self.service_item_type == ServiceItemType.Image:
settings_section = serviceitem['serviceitem']['header']['name']
background = QtGui.QColor(Settings().value(settings_section + '/background color'))
=== modified file 'openlp/core/ui/aboutdialog.py'
--- openlp/core/ui/aboutdialog.py 2013-08-31 18:17:38 +0000
+++ openlp/core/ui/aboutdialog.py 2013-09-09 18:41:28 +0000
@@ -5,11 +5,11 @@
# 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, #
+# Portions copyright (c) 2008-2013 Stewart Becker, 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 #
# --------------------------------------------------------------------------- #
@@ -113,7 +113,7 @@
'Michael "cocooncrash" Gorven',
'Andreas "googol" Preikschat', 'Raoul "superfly" Snyman',
'Martin "mijiti" Thompson', 'Jon "Meths" Tibble']
- contributors = ['Gerald "jerryb" Britton',
+ contributors = ['Stewart "sibecker" Becker','Gerald "jerryb" Britton',
'Samuel "MrGamgee" Findlay', 'Scott "sguerrieri" Guerrieri',
'Matthias "matthub" Hub', 'Meinert "m2j" Jordan',
'Armin "orangeshirt" K\xf6hler', 'Erik "luen" Lundin',
@@ -273,10 +273,10 @@
copyright_note = translate('OpenLP.AboutForm',
'Copyright \xa9 2004-2013 %s\n'
'Portions copyright \xa9 2004-2013 %s') % ('Raoul Snyman',
- 'Tim Bentley, Gerald Britton, Jonathan Corwin, Samuel Findlay, '
- 'Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, '
- 'Armin K\xf6hler, Erik Lundin, Edwin Lunando, Joshua Miller, '
- 'Brian T. Meyer, Stevan Pettit, Andreas Preikschat, '
+ 'Stewart Becker, Tim Bentley, Gerald Britton, Jonathan Corwin, '
+ 'Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, '
+ 'Meinert Jordan, Armin K\xf6hler, Erik Lundin, Edwin Lunando, '
+ 'Joshua Miller, Brian T. Meyer, Stevan Pettit, Andreas Preikschat, '
'Mattias P\xf5ldaru, Christian Richter, '
'Philip Ridout, Simon Scudder, Jeffrey Smith, Maikel Stuivenberg, '
'Martin Thompson, Jon Tibble, Dave Warnock, Frode Woldsund, '
=== modified file 'openlp/core/ui/servicemanager.py'
--- openlp/core/ui/servicemanager.py 2013-09-07 07:52:52 +0000
+++ openlp/core/ui/servicemanager.py 2013-09-09 18:41:28 +0000
@@ -5,11 +5,11 @@
# 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, #
+# Portions copyright (c) 2008-2013 Stewart Becker, 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 #
# --------------------------------------------------------------------------- #
@@ -1388,7 +1388,7 @@
item = self.find_service_item()[0]
if self.service_items[item]['service_item'].is_capable(ItemCapabilities.CanEdit):
new_item = Registry().get(self.service_items[item]['service_item'].name). \
- on_remote_edit(self.service_items[item]['service_item'].edit_id)
+ on_remote_edit(self.service_items[item]['service_item'].edit_id, self.service_items[item]['service_item'].data_string)
if new_item:
self.add_service_item(new_item, replace=True)
=== modified file 'openlp/core/ui/slidecontroller.py'
--- openlp/core/ui/slidecontroller.py 2013-08-31 18:17:38 +0000
+++ openlp/core/ui/slidecontroller.py 2013-09-09 18:41:28 +0000
@@ -5,11 +5,11 @@
# 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, #
+# Portions copyright (c) 2008-2013 Stewart Becker, 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 #
# --------------------------------------------------------------------------- #
@@ -1163,10 +1163,10 @@
def on_edit_song(self):
"""
- From the preview display requires the service Item to be editied
+ From the preview display requires the service Item to be edited
"""
self.song_edit = True
- new_item = Registry().get(self.service_item.name).on_remote_edit(self.service_item.edit_id, True)
+ new_item = Registry().get(self.service_item.name).on_remote_edit(self.service_item.edit_id, self.service_item.data_string, True)
if new_item:
self.add_service_item(new_item)
=== modified file 'openlp/plugins/custom/lib/mediaitem.py'
--- openlp/plugins/custom/lib/mediaitem.py 2013-08-31 18:17:38 +0000
+++ openlp/plugins/custom/lib/mediaitem.py 2013-09-09 18:41:28 +0000
@@ -5,11 +5,11 @@
# 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, #
+# Portions copyright (c) 2008-2013 Stewart Becker, 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 #
# --------------------------------------------------------------------------- #
@@ -123,7 +123,7 @@
self.on_clear_text_button_click()
self.on_selection_change()
- def on_remote_edit(self, custom_id, preview=False):
+ def on_remote_edit(self, custom_id, data_string, preview=False):
"""
Called by ServiceManager or SlideController by event passing the custom Id in the payload along with an
indicator to say which type of display is required.
=== modified file 'openlp/plugins/songs/forms/editsongdialog.py'
--- openlp/plugins/songs/forms/editsongdialog.py 2013-08-31 18:17:38 +0000
+++ openlp/plugins/songs/forms/editsongdialog.py 2013-09-09 18:41:28 +0000
@@ -5,11 +5,11 @@
# 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, #
+# Portions copyright (c) 2008-2013 Stewart Becker, 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 #
# --------------------------------------------------------------------------- #
@@ -81,6 +81,7 @@
self.verse_list_widget.setObjectName('verse_list_widget')
self.lyrics_label.setBuddy(self.verse_list_widget)
self.lyrics_tab_layout.addWidget(self.verse_list_widget, 2, 1)
+
self.verse_order_label = QtGui.QLabel(self.lyrics_tab)
self.verse_order_label.setObjectName('verse_order_label')
self.lyrics_tab_layout.addWidget(self.verse_order_label, 3, 0)
@@ -88,6 +89,15 @@
self.verse_order_edit.setObjectName('verse_order_edit')
self.verse_order_label.setBuddy(self.verse_order_edit)
self.lyrics_tab_layout.addWidget(self.verse_order_edit, 3, 1, 1, 2)
+
+ self.verse_order_override_label = QtGui.QLabel(self.lyrics_tab)
+ self.verse_order_override_label.setObjectName('verse_order_override_label')
+ self.lyrics_tab_layout.addWidget(self.verse_order_override_label, 4, 0)
+ self.verse_order_override_edit = QtGui.QLineEdit(self.lyrics_tab)
+ self.verse_order_override_edit.setObjectName('verse_order_override_edit')
+ self.verse_order_override_label.setBuddy(self.verse_order_override_edit)
+ self.lyrics_tab_layout.addWidget(self.verse_order_override_edit, 4, 1, 1, 2)
+
self.verse_buttons_layout = QtGui.QVBoxLayout()
self.verse_buttons_layout.setObjectName('verse_buttons_layout')
self.verse_add_button = QtGui.QPushButton(self.lyrics_tab)
@@ -290,6 +300,7 @@
self.alternative_title_label.setText(translate('SongsPlugin.EditSongForm', 'Alt&ernate title:'))
self.lyrics_label.setText(translate('SongsPlugin.EditSongForm', '&Lyrics:'))
self.verse_order_label.setText(translate('SongsPlugin.EditSongForm', '&Verse order:'))
+ self.verse_order_override_label.setText(translate('SongsPlugin.EditSongForm', '&Override verse order:'))
self.verse_add_button.setText(UiStrings().Add)
self.verse_edit_button.setText(UiStrings().Edit)
self.verse_edit_all_button.setText(translate('SongsPlugin.EditSongForm', 'Ed&it All'))
=== modified file 'openlp/plugins/songs/forms/editsongform.py'
--- openlp/plugins/songs/forms/editsongform.py 2013-08-31 18:17:38 +0000
+++ openlp/plugins/songs/forms/editsongform.py 2013-09-09 18:41:28 +0000
@@ -5,11 +5,11 @@
# 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, #
+# Portions copyright (c) 2008-2013 Stewart Becker, 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 #
# --------------------------------------------------------------------------- #
@@ -84,6 +84,7 @@
self.verse_delete_button.clicked.connect(self.on_verse_delete_button_clicked)
self.verse_list_widget.itemClicked.connect(self.on_verse_list_view_clicked)
self.verse_order_edit.textChanged.connect(self.on_verse_order_text_changed)
+ self.verse_order_override_edit.textChanged.connect(self.on_verse_order_override_text_changed)
self.theme_add_button.clicked.connect(self.theme_manager.on_add_theme)
self.maintenance_button.clicked.connect(self.on_maintenance_button_clicked)
self.from_file_button.clicked.connect(self.on_audio_add_from_file_button_clicked)
@@ -100,7 +101,7 @@
self.manager = manager
self.verse_form = EditVerseForm(self)
self.media_form = MediaFilesForm(self)
- self.initialise()
+ self.initialise(False)
self.authors_list_view.setSortingEnabled(False)
self.authors_list_view.setAlternatingRowColors(True)
self.topics_list_view.setSortingEnabled(False)
@@ -212,6 +213,10 @@
result = self._validate_verse_list(self.verse_order_edit.text(), self.verse_list_widget.rowCount())
if not result:
return False
+ if self.verse_order_override_edit.text():
+ result = self._validate_verse_list(self.verse_order_override_edit.text(), self.verse_list_widget.rowCount())
+ if not result:
+ return False
text = self.song_book_combo_box.currentText()
if self.song_book_combo_box.findText(text, QtCore.Qt.MatchExactly) < 0:
if QtGui.QMessageBox.question(self, translate('SongsPlugin.EditSongForm', 'Add Book'),
@@ -266,14 +271,20 @@
return
QtGui.QDialog.keyPressEvent(self, event)
- def initialise(self):
+ def initialise(self, verse_order_override):
"""
Set up the form for when it is displayed.
+
+ ``verse_order_override``
+ Whether to show the verse_order_override widgets (bool)
"""
self.verse_edit_button.setEnabled(False)
self.verse_delete_button.setEnabled(False)
self.author_remove_button.setEnabled(False)
self.topic_remove_button.setEnabled(False)
+ self.verse_order_override = verse_order_override
+ self.verse_order_override_label.setVisible(self.verse_order_override)
+ self.verse_order_override_edit.setVisible(self.verse_order_override)
def load_authors(self):
"""
@@ -331,12 +342,13 @@
"""
log.debug('New Song')
self.song = None
- self.initialise()
+ self.initialise(False)
self.song_tab_widget.setCurrentIndex(0)
self.title_edit.clear()
self.alternative_edit.clear()
self.copyright_edit.clear()
self.verse_order_edit.clear()
+ self.verse_order_override_edit.clear()
self.comments_edit.clear()
self.ccli_number_edit.clear()
self.verse_list_widget.clear()
@@ -355,18 +367,23 @@
# it's a new song to preview is not possible
self.preview_button.setVisible(False)
- def load_song(self, song_id, preview=False):
+ def load_song(self, song_id, verse_order_override, preview=False):
"""
Loads a song.
``song_id``
The song id (int).
+
+ ``verse_order_override`
+ A verse order override to apply (string),
+ or None if going to use the verse order in the song,
``preview``
Should be ``True`` if the song is also previewed (boolean).
"""
log.debug('Load Song')
- self.initialise()
+ self.initialise(not verse_order_override is None)
+ # If verse_order_override is '', we initialise with True (meaning override with default)
self.song_tab_widget.setCurrentIndex(0)
self.load_authors()
self.load_topics()
@@ -428,20 +445,8 @@
verse_def = '%s%s' % (VerseType.tags[VerseType.Verse], str(count + 1))
item.setData(QtCore.Qt.UserRole, verse_def)
self.verse_list_widget.setItem(count, 0, item)
- if self.song.verse_order:
- # we translate verse order
- translated = []
- for verse_def in self.song.verse_order.split():
- verse_index = None
- if verse_tags_translated:
- verse_index = VerseType.from_translated_tag(verse_def[0], None)
- if verse_index is None:
- verse_index = VerseType.from_tag(verse_def[0])
- verse_tag = VerseType.translated_tags[verse_index].upper()
- translated.append('%s%s' % (verse_tag, verse_def[1:]))
- self.verse_order_edit.setText(' '.join(translated))
- else:
- self.verse_order_edit.setText('')
+ self.verse_order_edit.setText(self._translate_verse_order(self.song.verse_order, verse_tags_translated))
+ self.verse_order_override_edit.setText(self._translate_verse_order(verse_order_override, verse_tags_translated))
self.tag_rows()
# clear the results
self.authors_list_view.clear()
@@ -465,6 +470,33 @@
self.preview_button.setVisible(preview)
# Check if all verse tags are used.
self.on_verse_order_text_changed(self.verse_order_edit.text())
+ self.on_verse_order_override_text_changed(self.verse_order_override_edit.text())
+
+ def _translate_verse_order(self, verse_order, verse_tags_translated):
+ """
+ Loads Translates a verse order into displa format.
+
+ ``verse_order``
+ The input verse order (int).
+
+ ``verse_tags_translated`
+ True if VerseType.from_translated_tag should be tried first (boolean).
+ """
+ if not verse_order:
+ return ''
+
+ # we translate verse order
+ translated = []
+ for verse_def in verse_order.split():
+ verse_index = None
+ if verse_tags_translated:
+ verse_index = VerseType.from_translated_tag(verse_def[0], None)
+ if verse_index is None:
+ verse_index = VerseType.from_tag(verse_def[0])
+ verse_tag = VerseType.translated_tags[verse_index].upper()
+ translated.append('%s%s' % (verse_tag, verse_def[1:]))
+
+ return' '.join(translated)
def tag_rows(self):
"""
@@ -481,6 +513,12 @@
self.verse_list_widget.resizeRowsToContents()
self.verse_list_widget.repaint()
+ def check_verse_tags(self):
+ # Check if all verse tags are used.
+ self.tag_rows()
+ self.on_verse_order_text_changed(self.verse_order_edit.text())
+ self.on_verse_order_override_text_changed(self.verse_order_override_edit.text())
+
def on_author_add_button_clicked(self):
"""
Add the author to the list of authors associated with this song when the button is clicked.
@@ -596,9 +634,7 @@
item.setText(after_text)
self.verse_list_widget.setRowCount(self.verse_list_widget.rowCount() + 1)
self.verse_list_widget.setItem(self.verse_list_widget.rowCount() - 1, 0, item)
- self.tag_rows()
- # Check if all verse tags are used.
- self.on_verse_order_text_changed(self.verse_order_edit.text())
+ self.check_verse_tags()
def on_verse_edit_button_clicked(self):
item = self.verse_list_widget.currentItem()
@@ -624,9 +660,7 @@
item = QtGui.QTableWidgetItem(entry, 0)
item.setData(QtCore.Qt.UserRole, temp_ids[row])
self.verse_list_widget.setItem(row, 0, item)
- self.tag_rows()
- # Check if all verse tags are used.
- self.on_verse_order_text_changed(self.verse_order_edit.text())
+ self.check_verse_tags()
def on_verse_edit_all_button_clicked(self):
verse_list = ''
@@ -680,11 +714,9 @@
item.setData(QtCore.Qt.UserRole, verse_def)
self.verse_list_widget.setRowCount(self.verse_list_widget.rowCount() + 1)
self.verse_list_widget.setItem(self.verse_list_widget.rowCount() - 1, 0, item)
- self.tag_rows()
+ self.check_verse_tags()
self.verse_edit_button.setEnabled(False)
self.verse_delete_button.setEnabled(False)
- # Check if all verse tags are used.
- self.on_verse_order_text_changed(self.verse_order_edit.text())
def on_verse_delete_button_clicked(self):
self.verse_list_widget.removeRow(self.verse_list_widget.currentRow())
@@ -720,6 +752,37 @@
label_text = self.not_all_verses_used_warning
self.warning_label.setText(label_text)
+ def on_verse_order_override_text_changed(self, text):
+ """
+ Checks if the verse order is complete or missing. Shows a error message according to the state of the verse
+ order.
+
+ ``text``
+ The text of the verse order edit (ignored).
+ """
+
+ if not self.verse_order_override:
+ return
+
+ # Extract all verses which were used in the order.
+ verses_in_order = self._extract_verse_order(self.verse_order_override_edit.text())
+ # Find the verses which were not used in the order.
+ verses_not_used = []
+ for index in range(self.verse_list_widget.rowCount()):
+ verse = self.verse_list_widget.item(index, 0)
+ verse = verse.data(QtCore.Qt.UserRole)
+ if verse not in verses_in_order:
+ verses_not_used.append(verse)
+ # Set the label text.
+ label_text = ''
+ # No verse order was entered.
+ if not verses_in_order:
+ label_text = self.no_verse_order_entered_warning
+ # The verse order does not contain all verses.
+ elif verses_not_used:
+ label_text = self.not_all_verses_used_warning
+ self.warning_label.setText(label_text)
+
def on_copyright_insert_button_triggered(self):
text = self.copyright_edit.text()
pos = self.copyright_edit.cursorPosition()
=== modified file 'openlp/plugins/songs/lib/mediaitem.py'
--- openlp/plugins/songs/lib/mediaitem.py 2013-08-31 18:17:38 +0000
+++ openlp/plugins/songs/lib/mediaitem.py 2013-09-09 18:41:28 +0000
@@ -5,11 +5,11 @@
# 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, #
+# Portions copyright (c) 2008-2013 Stewart Becker, 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 #
# --------------------------------------------------------------------------- #
@@ -75,6 +75,8 @@
self.single_service_item = False
# Holds information about whether the edit is remotely triggered and which Song is required.
self.remote_song = -1
+ self.remote_triggered = False
+ self.remote_order = None
self.edit_item = None
self.quick_preview_allowed = True
self.has_search = True
@@ -315,7 +317,7 @@
def on_song_maintenance_click(self):
self.song_maintenance_form.exec_()
- def on_remote_edit(self, song_id, preview=False):
+ def on_remote_edit(self, song_id, data_string, preview=False):
"""
Called by ServiceManager or SlideController by event passing the Song Id in the payload along with an indicator
to say which type of display is required.
@@ -324,15 +326,17 @@
song_id = int(song_id)
valid = self.plugin.manager.get_object(Song, song_id)
if valid:
- self.edit_song_form.load_song(song_id, preview)
+ self.edit_song_form.load_song(song_id, data_string['verse_order'], preview)
if self.edit_song_form.exec_() == QtGui.QDialog.Accepted:
self.auto_select_id = -1
self.on_song_list_load()
self.remote_song = song_id
self.remote_triggered = True
+ self.remote_order = self.edit_song_form.verse_order_override_edit.text()
item = self.build_service_item(remote=True)
self.remote_song = -1
self.remote_triggered = None
+ self.remote_order = None
if item:
return item
return None
@@ -345,7 +349,7 @@
if check_item_selected(self.list_view, UiStrings().SelectEdit):
self.edit_item = self.list_view.currentItem()
item_id = self.edit_item.data(QtCore.Qt.UserRole)
- self.edit_song_form.load_song(item_id, False)
+ self.edit_song_form.load_song(item_id, None, False)
self.edit_song_form.exec_()
self.auto_select_id = -1
self.on_song_list_load()
@@ -406,13 +410,15 @@
song = self.plugin.manager.get_object(Song, item_id)
service_item.theme = song.theme_name
service_item.edit_id = item_id
+ verse_order = ''
+ song_order = self.remote_order if remote else song.verse_order
if song.lyrics.startswith('<?xml version='):
verse_list = SongXML().get_verses(song.lyrics)
# no verse list or only 1 space (in error)
verse_tags_translated = False
if VerseType.from_translated_string(str(verse_list[0][0]['type'])) is not None:
verse_tags_translated = True
- if not song.verse_order.strip():
+ if not song_order.strip():
for verse in verse_list:
# We cannot use from_loose_input() here, because database is supposed to contain English lowercase
# singlechar tags.
@@ -427,9 +433,10 @@
verse_tag = VerseType.translated_tags[verse_index].upper()
verse_def = '%s%s' % (verse_tag, verse[0]['label'])
service_item.add_from_text(str(verse[1]), verse_def)
+ verse_order = '%s %s' % (verse_order, verse_def)
else:
# Loop through the verse list and expand the song accordingly.
- for order in song.verse_order.lower().split():
+ for order in song_order.lower().split():
if not order:
break
for verse in verse_list:
@@ -442,13 +449,15 @@
verse_tag = VerseType.translated_tags[verse_index]
verse_def = '%s%s' % (verse_tag, verse[0]['label'])
service_item.add_from_text(verse[1], verse_def)
+ verse_order = '%s %s' % (verse_order, verse_def)
else:
verses = song.lyrics.split('\n\n')
for slide in verses:
service_item.add_from_text(str(slide))
service_item.title = song.title
author_list = self.generate_footer(service_item, song)
- service_item.data_string = {'title': song.search_title, 'authors': ', '.join(author_list)}
+ service_item.data_string = {'title': song.search_title, 'authors': ', '.join(author_list), 'verse_order':verse_order.strip()}
+
service_item.xml_version = self.openLyrics.song_to_xml(song)
# Add the audio file to the service item.
if song.media_files:
=== modified file 'tests/functional/openlp_core_lib/test_serviceitem.py'
--- tests/functional/openlp_core_lib/test_serviceitem.py 2013-08-31 18:17:38 +0000
+++ tests/functional/openlp_core_lib/test_serviceitem.py 2013-09-09 18:41:28 +0000
@@ -163,15 +163,76 @@
assert service_item.is_capable(ItemCapabilities.CanAppend) is True, \
'This service item should be able to have new items added to it'
- def convert_file_service_item(self, name, row=0):
+ def convert_file_service_items(self, name):
service_file = os.path.join(TEST_PATH, name)
try:
open_file = open(service_file, 'r')
items = json.load(open_file)
- first_line = items[row]
except IOError:
- first_line = ''
+ items = []
finally:
open_file.close()
+ return items
+
+ def convert_file_service_item(self, name, row=0):
+ items = self.convert_file_service_items(name)
+ try:
+ first_line = items[row]
+ except IndexError:
+ first_line = ''
return first_line
+ def serviceitem_songs_from_service(self, filename):
+ """
+ Test the Service Item - adding songs from a saved service
+ """
+ # GIVEN: A new service item and a mocked add icon function
+ service_item = ServiceItem(None)
+ service_item.add_icon = MagicMock()
+
+ # WHEN: adding songs from a saved Service
+ items = self.convert_file_service_items(filename)
+
+ # Abide with me: No verse order, should pick up the default
+ # Angels from the realms of glory: Verse order was explicitly set
+ # Give me oil in my lamp: Verse order was changed, then reset
+ # Guide me O thou great Jehovah: Verse order was changed, then reset to ''
+ # To God be the glory: Verse order was changed to '', then reset
+ # Amazing Grace: Verse order was changed, then reset to '' after file was closed
+ # All Things Bright ... : Verse order was changed, then reset to after file was closed
+ # The First Nowell: Verse order was deleted (''), then reset to after file was closed
+ # Joy to the World: Verse 3 was deleted (merged with verse 2) after file was closed
+
+ expected_data = [{'title':'Abide with me', 'verse_order':'V1 V2 V3 V4 V5'}, \
+ {'title':'Angels from the realsm of glory', 'verse_order':'V1 C1 V2 C1 V3 C1 V4 C1'}, \
+ {'title':'Give me oil in my lamp', 'verse_order':'V1 C1'}, \
+ {'title':'Give me oil in my lamp', 'verse_order':'V1 C1 V2 C1 V3 C1 V4 C1'}, \
+ {'title':'Guide me O thou great Jehovah', 'verse_order':'V1 V2 V3'}, \
+ {'title':'Guide me O thou great Jehovah', 'verse_order':'V1 V3'}, \
+ {'title':'To God Be The Glory', 'verse_order':'V1 C1 V2 V3'}, \
+ {'title':'To God Be The Glory', 'verse_order':'V1 C1 V2 C1 V3 C1'}, \
+ {'title':'Amazing Grace', 'verse_order':'V1 V2 V3 V4 V6'}, \
+ {'title':'All Things Bright And Beautiful', 'verse_order':'V1 V2 V1 V4 V1 V5 V1 V7 V1'}, \
+ {'title':'The First Nowell', 'verse_order':'V1 C1 V2 V3 V4 V5 V6'}, \
+ {'title':'Joy to the World', 'verse_order':'V1 V2 V3'}]
+
+ # THEN: The service should contain the right number of items
+ assert len(items) == len(expected_data), 'The service should have ' + str(len(expected_data)) + ' items'
+
+ for (item, expected) in zip(items, expected_data):
+ # THEN: Each service item should have a name and verse order as expected
+ service_item.set_from_service(item)
+ assert 'title' in service_item.data_string, \
+ 'This service item should have a title in its data string'
+ assert 'verse_order' in service_item.data_string, \
+ 'This service item should have a verse order in its data string'
+ assert service_item.data_string['title'].lower() == expected['title'].lower() + '@', \
+ 'The expected title is "' + expected['title'] + '@" (got "'+ service_item.data_string['title'] + '")'
+ assert service_item.data_string['verse_order'] == expected['verse_order'], \
+ 'The expected verse order for ' + expected['title'] + ' is "' + expected['verse_order'] + '" (got "'+ service_item.data_string['verse_order'] + '")'
+
+ def serviceitem_load_songs_from_old_service_test(self):
+ self.serviceitem_songs_from_service('serviceitem_songs_1.osj')
+
+ def serviceitem_load_songs_from_new_service_test(self):
+ self.serviceitem_songs_from_service('serviceitem_songs_2.osj')
=== modified file 'tests/functional/openlp_plugins/songs/test_mediaitem.py'
--- tests/functional/openlp_plugins/songs/test_mediaitem.py 2013-08-31 18:17:38 +0000
+++ tests/functional/openlp_plugins/songs/test_mediaitem.py 2013-09-09 18:41:28 +0000
@@ -26,9 +26,9 @@
Registry().register('service_list', MagicMock())
Registry().register('main_window', MagicMock())
with patch('openlp.core.lib.mediamanageritem.MediaManagerItem.__init__'), \
- patch('openlp.plugins.songs.forms.editsongform.EditSongForm.__init__'):
+ patch('openlp.plugins.songs.forms.editsongform.EditSongForm.__init__'):
self.media_item = SongMediaItem(MagicMock(), MagicMock())
-
+
fd, self.ini_file = mkstemp('.ini')
Settings().set_filename(self.ini_file)
self.application = QtGui.QApplication.instance()
@@ -45,6 +45,19 @@
os.unlink(Settings().fileName())
except Exception:
pass
+
+ def init_test(self):
+ # GIVEN: a newly created SongMediaItem from setUp
+
+ # WHEN: it was first created
+
+ # THEN: The remote_ ... properties are set
+ assert self.media_item.remote_song == -1, \
+ 'SongMediaItem should have a property remote_song which is -1'
+ assert self.media_item.remote_triggered == False, \
+ 'SongMediaItem should have a property remote_triggered which is False'
+ assert self.media_item.remote_order is None, \
+ 'SongMediaItem should have a property remote_order which is None'
def build_song_footer_one_author_test(self):
"""
@@ -124,3 +137,86 @@
# THEN: I would get an amended footer string
self.assertEqual(service_item.raw_footer, ['My Song', 'my author', 'My copyright', 'CCLI License: 4321'],
'The array should be returned correctly with a song, an author, copyright and amended ccli')
+
+ def generate_slide_data_from_text_test(self):
+ # GIVEN: Media Item, mocked song with plain text lyrics and methods
+ service_item = MagicMock()
+ song = MagicMock()
+ song.lyrics = 'Mary had a little lamb\n'+ \
+ 'It\'s fleece was white as snow\n' + \
+ 'And every where that Mary went\n' + \
+ 'The lamb was sure to go\n\n' + \
+ 'It followed her to school one day\n' + \
+ 'It was against the rule\n' + \
+ 'It made the children laugh and shout\n' + \
+ 'To see a lamb at school'
+
+ self.media_item.plugin = MagicMock()
+ self.media_item.plugin.manager = MagicMock()
+ self.media_item.plugin.manager.get_object = MagicMock(return_value=song)
+ self.media_item.openLyrics = MagicMock()
+
+ # WHEN: Service item is built from it
+ self.media_item.generate_slide_data(service_item)
+
+ #THEN: verse order comes from song
+ assert service_item.data_string['verse_order'] == '', \
+ 'Service Item should have empty verse order'
+
+ def generate_slide_data_from_xml_locally_test(self):
+ # GIVEN: Media Item, mocked song with plain text lyrics and methods
+ service_item = MagicMock()
+ song_order = 'v1'
+ remote_order = 'v1 v1'
+
+ song = MagicMock()
+ song.lyrics = '<?xml version=\'1.0\' encoding=\'UTF-8\'?>\n'+\
+ '<song version="1.0"><lyrics><verse label="1" type="v"><![CDATA['+\
+ 'He is Lord, He is Lord,\nHe is risen from the dead\n'+\
+ 'And He is Lord.\nEvery knee shall bow,\n'+\
+ 'Every tongue confess\nThat Jesus Christ is Lord.]]>'+\
+ '</verse></lyrics></song>'
+ song.verse_order = song_order
+
+ self.media_item.plugin = MagicMock()
+ self.media_item.plugin.manager = MagicMock()
+ self.media_item.plugin.manager.get_object = MagicMock(return_value=song)
+ self.media_item.openLyrics = MagicMock()
+
+ # WHEN: Service item is built from it
+ self.media_item.remote_order = remote_order
+ self.media_item.generate_slide_data(service_item)
+ self.media_item.remote_order = None
+
+ #THEN: verse order comes from song
+ assert service_item.data_string['verse_order'] == song_order, \
+ 'Service Item should have verse order "' + song_order + '"'
+
+ def generate_slide_data_from_xml_remotely_test(self):
+ # GIVEN: Media Item, mocked song with plain text lyrics and methods
+ service_item = MagicMock()
+ song_order = 'v1'
+ remote_order = 'v1 v1'
+
+ song = MagicMock()
+ song.lyrics = '<?xml version=\'1.0\' encoding=\'UTF-8\'?>\n'+\
+ '<song version="1.0"><lyrics><verse label="1" type="v"><![CDATA['+\
+ 'He is Lord, He is Lord,\nHe is risen from the dead\n'+\
+ 'And He is Lord.\nEvery knee shall bow,\n'+\
+ 'Every tongue confess\nThat Jesus Christ is Lord.]]>'+\
+ '</verse></lyrics></song>'
+ song.verse_order = song_order
+
+ self.media_item.plugin = MagicMock()
+ self.media_item.plugin.manager = MagicMock()
+ self.media_item.plugin.manager.get_object = MagicMock(return_value=song)
+ self.media_item.openLyrics = MagicMock()
+
+ # WHEN: Service item is built from it
+ self.media_item.remote_order = remote_order
+ self.media_item.generate_slide_data(service_item, remote=True)
+ self.media_item.remote_order = None
+
+ #THEN: verse order comes from song
+ assert service_item.data_string['verse_order'] == remote_order, \
+ 'Service Item should have verse order "' + remote_order + '"'
=== modified file 'tests/interfaces/openlp_plugins/songs/forms/test_editsongform.py'
--- tests/interfaces/openlp_plugins/songs/forms/test_editsongform.py 2013-08-31 18:17:38 +0000
+++ tests/interfaces/openlp_plugins/songs/forms/test_editsongform.py 2013-09-09 18:41:28 +0000
@@ -9,7 +9,6 @@
from openlp.core.lib import Registry
from openlp.plugins.songs.forms.editsongform import EditSongForm
-
class TestEditSongForm(TestCase):
"""
Test the EditSongForm class
@@ -69,7 +68,7 @@
def verse_order_incomplete_warning_test(self):
"""
- Test if the verse-order-incomple warning is shown
+ Test if the verse-order-incomplete warning is shown
"""
# GIVEN: Mocked methods.
given_verse_order = 'V1'
@@ -89,6 +88,228 @@
assert self.form.warning_label.text() == self.form.not_all_verses_used_warning, \
'The verse-order-incomplete warning should be shown.'
+ def verse_order_empty_warning_test(self):
+ """
+ Test if the verse-order-incomplete warning is shown
+ """
+ # GIVEN: Mocked methods.
+ given_verse_order = ''
+ self.form.verse_list_widget.rowCount = MagicMock(return_value=2)
+ # Mock out the verse.
+ first_verse = MagicMock()
+ first_verse.data = MagicMock(return_value='V1')
+ second_verse = MagicMock()
+ second_verse.data = MagicMock(return_value= 'V2')
+ self.form.verse_list_widget.item = MagicMock(side_effect=[first_verse, second_verse])
+ self.form._extract_verse_order = MagicMock(return_value=[])
+
+ # WHEN: Call the method.
+ self.form.on_verse_order_text_changed(given_verse_order)
+
+ # THEN: The verse-order-incomplete text should be shown.
+ assert self.form.warning_label.text() == self.form.no_verse_order_entered_warning, \
+ 'The verse-order-empty warning should be shown.'+self.form.warning_label.text()
+
+ def verse_order_override_nop_test(self):
+ """
+ Test if the verse order override warning is not shown
+ """
+ # GIVEN: Mocked methods.
+ given_verse_order = 'V1 V2'
+ self.form.verse_list_widget.rowCount = MagicMock(return_value=2)
+ # Mock out the verse.
+ first_verse = MagicMock()
+ first_verse.data = MagicMock(return_value='V1')
+ second_verse = MagicMock()
+ second_verse.data = MagicMock(return_value= 'V2')
+ self.form.verse_list_widget.item = MagicMock(side_effect=[first_verse, second_verse])
+ self.form._extract_verse_order = MagicMock(return_value=given_verse_order.split())
+
+ # GIVEN: Verse order override is inactive
+ self.form.initialise(False)
+
+ # WHEN: Call the method.
+ unexpected_label = 'Spam and eggs'
+ self.form.warning_label.setText(unexpected_label)
+ self.form.on_verse_order_override_text_changed(given_verse_order)
+
+ # THEN: No text should be shown.
+ assert self.form.warning_label.text() == unexpected_label, \
+ 'The override warning should not change'
+
+ def verse_order_override_no_warning_test(self):
+ """
+ Test if the verse order override warning is not shown
+ """
+ # GIVEN: Mocked methods.
+ given_verse_order = 'V1 V2'
+ self.form.verse_list_widget.rowCount = MagicMock(return_value=2)
+ # Mock out the verse.
+ first_verse = MagicMock()
+ first_verse.data = MagicMock(return_value='V1')
+ second_verse = MagicMock()
+ second_verse.data = MagicMock(return_value= 'V2')
+ self.form.verse_list_widget.item = MagicMock(side_effect=[first_verse, second_verse])
+ self.form._extract_verse_order = MagicMock(return_value=given_verse_order.split())
+
+ # GIVEN: Verse order override is active
+ self.form.initialise(True)
+
+ # WHEN: Call the method.
+ self.form.on_verse_order_override_text_changed(given_verse_order)
+
+ # THEN: No text should be shown.
+ assert self.form.warning_label.text() == '', 'There should be no override warning.'
+
+ def verse_order_override_incomplete_warning_test(self):
+ """
+ Test if the verse-order-override-incomplete warning is shown
+ """
+ # GIVEN: Mocked methods.
+ given_verse_order = 'V1'
+ self.form.verse_list_widget.rowCount = MagicMock(return_value=2)
+ # Mock out the verse.
+ first_verse = MagicMock()
+ first_verse.data = MagicMock(return_value='V1')
+ second_verse = MagicMock()
+ second_verse.data = MagicMock(return_value= 'V2')
+ self.form.verse_list_widget.item = MagicMock(side_effect=[first_verse, second_verse])
+ self.form._extract_verse_order = MagicMock(return_value=[given_verse_order])
+
+ # GIVEN: Verse order override is active
+ self.form.initialise(True)
+
+ # WHEN: The method is called
+ self.form.on_verse_order_override_text_changed(given_verse_order)
+
+ # THEN: The verse-order-incomplete text should be shown.
+ assert self.form.warning_label.text() == self.form.not_all_verses_used_warning, \
+ 'The verse-order-override-incomplete warning should be shown.'
+
+ def verse_order_override_empty_warning_test(self):
+ """
+ Test if the verse-order-incomplete warning is shown
+ """
+ # GIVEN: Mocked methods.
+ given_verse_order = ''
+ self.form.verse_list_widget.rowCount = MagicMock(return_value=2)
+ # Mock out the verse.
+ first_verse = MagicMock()
+ first_verse.data = MagicMock(return_value='V1')
+ second_verse = MagicMock()
+ second_verse.data = MagicMock(return_value= 'V2')
+ self.form.verse_list_widget.item = MagicMock(side_effect=[first_verse, second_verse])
+ self.form._extract_verse_order = MagicMock(return_value=[])
+
+ # GIVEN: Verse order override is active
+ self.form.initialise(True)
+
+ # WHEN: The method is called
+ self.form.on_verse_order_override_text_changed(given_verse_order)
+
+ # THEN: The verse-order-incomplete text should be shown.
+ assert self.form.warning_label.text() == self.form.no_verse_order_entered_warning, \
+ 'The verse-order-override-empty warning should be shown.'+self.form.warning_label.text()
+
+ def translate_verse_order_test(self):
+ # GIVEN: a fairly standard verse order
+ verse_order = 'v1 v2 c v3'
+ expected = verse_order.upper()
+
+ # WHEN: asked to translate it
+ translatedFalse = self.form._translate_verse_order(verse_order, False)
+ translatedTrue = self.form._translate_verse_order(verse_order, True)
+
+ # THEN: It is returned in upper case
+ assert translatedFalse == expected, 'Verse order did not translate properly'
+ assert translatedTrue == expected, 'Verse order did not translate properly'
+
+ def initialise_false_test(self):
+ # GIVEN: form
+
+ # WHEN: initialised without verse order overriding
+ self.form.initialise(False)
+
+ #THEN: verse order override flag should not be set
+ assert not self.form.verse_order_override, \
+ 'Verse order override flag should not be set'
+
+ #THEN: verse order override widgets are invisible
+ assert self.form.verse_order_override_label.isHidden(), \
+ 'Verse order override label should be invisible'
+ assert self.form.verse_order_override_edit.isHidden(), \
+ 'Verse order override edit should be invisible'
+
+ def initialise_true_test(self):
+ # GIVEN: form
+
+ # WHEN: initialised with verse order overriding
+ self.form.initialise(True)
+
+ #THEN: verse order override flag should be set
+ assert self.form.verse_order_override, \
+ 'Verse order override flag should be set'
+
+ #THEN: verse order override widgets are visible
+ assert not self.form.verse_order_override_label.isHidden(), \
+ 'Verse order override label should be visible'
+ assert not self.form.verse_order_override_edit.isHidden(), \
+ 'Verse order override edit should be visible'
+
+ def load_song_test(self):
+ # GIVEN: Mocked methods and objects:
+ self.form.load_authors = MagicMock(side_effects=[])
+ self.form.load_topics = MagicMock(side_effects=[])
+ self.form.load_books = MagicMock(side_effects=[])
+ self.form.load_media_files = MagicMock(side_effects=[])
+
+ song_id = -1
+ verse_order = 'v1 v2 v3'
+ verse_order_override = 'v1 v2'
+ translated_verse_order = self.form._translate_verse_order(verse_order, True)
+ translated_verse_order_override = self.form._translate_verse_order(verse_order_override, True)
+
+ song = MagicMock()
+ song.title = ''
+ song.alternate_title = ''
+ song.copyright = ''
+ song.comments = ''
+ song.ccli_number = None
+ song.song_number = None
+ song.lyrics = ''
+ song.verse_order = verse_order
+ self.form.manager.get_object = MagicMock(return_value=song)
+
+ # WHEN: Song is loaded
+ self.form.load_song(song_id, verse_order_override)
+
+ # THEN: verse_order_override is set
+ assert self.form.verse_order_override == True, \
+ 'The verse order override flag should be set'
+
+ # THEN: verse_order_edit contains the translated verse order
+ assert self.form.verse_order_edit.text() == translated_verse_order, \
+ 'The verse order text should be "' + translated_verse_order + '"'
+
+ # THEN: verse_order_override_edit contains the translated overridden verse order
+ assert self.form.verse_order_override_edit.text() == translated_verse_order_override, \
+ 'The verse order override text should be "' + translated_verse_order_override + '"'
+
+ # WHEN Song is loaded without verse order override
+ self.form.load_song(song_id, None)
+
+ #THEN: verse_order_override is not set
+ assert self.form.verse_order_override == False, \
+ 'The verse order override flag should not be set'
+
+ # THEN: verse_order_edit contains the translated verse order
+ assert self.form.verse_order_edit.text() == translated_verse_order, \
+ 'The verse order text should be "' + translated_verse_order + '"'
+
+ # THEN: verse_order_override_edit contains the translated overridden verse order
+ assert self.form.verse_order_override_edit.text() == '', \
+ 'The verse order override text should be ""'
+
def bug_1170435_test(self):
"""
Regression test for bug 1170435 (test if "no verse order" message is shown)
=== added file 'tests/resources/serviceitem_songs_1.osj'
--- tests/resources/serviceitem_songs_1.osj 1970-01-01 00:00:00 +0000
+++ tests/resources/serviceitem_songs_1.osj 2013-09-09 18:41:28 +0000
@@ -0,0 +1,1 @@
+[{"serviceitem": {"data": [{"title": "Abide with me, fast falls the ", "raw_slide": "Abide with me, fast falls the eventide;\nThe darkness deepens, Lord, with me abide;\nWhen other helpers fail and comforts flee,\nHelp of the helpless, O abide with me.", "verseTag": "V1"}, {"title": "Swift to its close ebbs out li", "raw_slide": "Swift to its close ebbs out life\u2019s little day;\nEarth\u2019s joys grow dim, its glories pass away;\nChange and decay in all around I see;\nO Thou who changest not, abide with me.", "verseTag": "V2"}, {"title": "I need Thy presence every pass", "raw_slide": "I need Thy presence every passing hour;\nWhat but Thy grace can foil the tempter\u2019s power?\nWho like Thyself my guide and stay can be?\nThrough cloud and sunshine, O abide with me.", "verseTag": "V3"}, {"title": "I fear no foe, with Thee at ha", "raw_slide": "I fear no foe, with Thee at hand to bless;\nIlls have no weight, and tears no bitterness.\nWhere is death\u2019s sting? Where, grave, thy victory? \nI triumph still, if Thou abide with me.", "verseTag": "V4"}, {"title": "Reveal Thyself before my closi", "raw_slide": "Reveal Thyself before my closing eyes;\nShine through the gloom, and point me to the skies,\nHeaven\u2019s morning breaks, and earth\u2019s vain shadows flee;\nIn life, in death, O Lord, abide with me.", "verseTag": "V5"}], "header": {"icon": ":/plugins/plugin_songs.png", "theme": null, "type": 1, "audit": ["Abide With Me", ["W. H. Monk"], "", ""], "end_time": 0, "notes": "", "title": "Abide With Me", "auto_play_slides_once": false, "auto_play_slides_loop": false, "start_time": 0, "background_audio": [], "media_length": 0, "processor": null, "plugin": "songs", "timed_slide_interval": 0, "footer": ["Abide With Me", "W. H. Monk", ""], "search": "", "theme_overwritten": false, "data": {"title": "abide with me@", "authors": "W. H. Monk"}, "name": "songs", "from_plugin": false, "capabilities": [2, 1, 5, 8, 9, 13], "xml_version": "<?xml version='1.0' encoding='UTF-8'?>\n<song xmlns=\"http://openlyrics.info/namespace/2009/song\" version=\"0.8\" createdIn=\"OpenLP 2.2.2\" modifiedIn=\"OpenLP 2.2.2\" modifiedDate=\"2013-09-07T09:20:02\"><properties><titles><title>Abide With Me</title></titles><authors><author>W. H. Monk</author></authors></properties><lyrics><verse name=\"v1\"><lines>Abide with me, fast falls the eventide;<br/>The darkness deepens, Lord, with me abide;<br/>When other helpers fail and comforts flee,<br/>Help of the helpless, O abide with me.</lines></verse><verse name=\"v2\"><lines>Swift to its close ebbs out life\u2019s little day;<br/>Earth\u2019s joys grow dim, its glories pass away;<br/>Change and decay in all around I see;<br/>O Thou who changest not, abide with me.</lines></verse><verse name=\"v3\"><lines>I need Thy presence every passing hour;<br/>What but Thy grace can foil the tempter\u2019s power?<br/>Who like Thyself my guide and stay can be?<br/>Through cloud and sunshine, O abide with me.</lines></verse><verse name=\"v4\"><lines>I fear no foe, with Thee at hand to bless;<br/>Ills have no weight, and tears no bitterness.<br/>Where is death\u2019s sting? Where, grave, thy victory? <br/>I triumph still, if Thou abide with me.</lines></verse><verse name=\"v5\"><lines>Reveal Thyself before my closing eyes;<br/>Shine through the gloom, and point me to the skies,<br/>Heaven\u2019s morning breaks, and earth\u2019s vain shadows flee;<br/>In life, in death, O Lord, abide with me.</lines></verse></lyrics></song>", "will_auto_start": false}}}, {"serviceitem": {"data": [{"title": "Angels, from the realsm of Glo", "raw_slide": "Angels, from the realsm of Glory,\nWing your flight o\u2019er all the earth;\nYe who sang creation\u2019s story,\nNow proclaim Messiah\u2019s birth:", "verseTag": "V1"}, {"title": "Come and worship", "raw_slide": "Come and worship\nChrist, the new-born King.\nCome and worship\nWorship Christ, the new-born King.", "verseTag": "C1"}, {"title": "Shepherds, in the field abidin", "raw_slide": "Shepherds, in the field abiding,\nWatching o\u2019er your flocks by night,\nGod with man is now residing,\nYonder shines the infant-light:", "verseTag": "V2"}, {"title": "Come and worship", "raw_slide": "Come and worship\nChrist, the new-born King.\nCome and worship\nWorship Christ, the new-born King.", "verseTag": "C1"}, {"title": "Sages, leave your contemplatio", "raw_slide": "Sages, leave your contemplations,\nBrighter visions beam afar;\nSeek the great desire of nations,\nYe have seen His natal star:", "verseTag": "V3"}, {"title": "Come and worship", "raw_slide": "Come and worship\nChrist, the new-born King.\nCome and worship\nWorship Christ, the new-born King.", "verseTag": "C1"}, {"title": "Saints, before the altar bendi", "raw_slide": "Saints, before the altar bending,\nWatching long in hope and fear,\nSuddenly the Lord descending\nIn His temple shall appear:", "verseTag": "V4"}, {"title": "Come and worship", "raw_slide": "Come and worship\nChrist, the new-born King.\nCome and worship\nWorship Christ, the new-born King.", "verseTag": "C1"}], "header": {"icon": ":/plugins/plugin_songs.png", "theme": null, "type": 1, "audit": ["Angels From the Realsm of Glory", ["James Montgomery"], null, "None"], "end_time": 0, "notes": "", "title": "Angels From the Realsm of Glory", "auto_play_slides_once": false, "auto_play_slides_loop": false, "start_time": 0, "background_audio": [], "media_length": 0, "processor": null, "plugin": "songs", "timed_slide_interval": 0, "footer": ["Angels From the Realsm of Glory", "James Montgomery", null], "search": "", "theme_overwritten": false, "data": {"title": "angels from the realsm of glory@", "authors": "James Montgomery"}, "name": "songs", "from_plugin": false, "capabilities": [2, 1, 5, 8, 9, 13], "xml_version": "<?xml version='1.0' encoding='UTF-8'?>\n<song xmlns=\"http://openlyrics.info/namespace/2009/song\" version=\"0.8\" createdIn=\"OpenLP 2.2.2\" modifiedIn=\"OpenLP 2.2.2\" modifiedDate=\"2013-09-07T09:20:04\"><properties><titles><title>Angels From the Realsm of Glory</title></titles><verseOrder>v1 c1 v2 c1 v3 c1 v4 c1</verseOrder><authors><author>James Montgomery</author></authors></properties><lyrics><verse name=\"v1\"><lines>Angels, from the realsm of Glory,<br/>Wing your flight o\u2019er all the earth;<br/>Ye who sang creation\u2019s story,<br/>Now proclaim Messiah\u2019s birth:</lines></verse><verse name=\"c1\"><lines>Come and worship<br/>Christ, the new-born King.<br/>Come and worship<br/>Worship Christ, the new-born King.</lines></verse><verse name=\"v2\"><lines>Shepherds, in the field abiding,<br/>Watching o\u2019er your flocks by night,<br/>God with man is now residing,<br/>Yonder shines the infant-light:</lines></verse><verse name=\"v3\"><lines>Sages, leave your contemplations,<br/>Brighter visions beam afar;<br/>Seek the great desire of nations,<br/>Ye have seen His natal star:</lines></verse><verse name=\"v4\"><lines>Saints, before the altar bending,<br/>Watching long in hope and fear,<br/>Suddenly the Lord descending<br/>In His temple shall appear:</lines></verse></lyrics></song>", "will_auto_start": false}}}, {"serviceitem": {"data": [{"title": "Give me oil in my lamp, keep m", "raw_slide": "Give me oil in my lamp, keep me burning.\nGive me oil in my lamp, I pray.\nGive me oil in my lamp, keep my burning,\nKeep me burning till the break of day.", "verseTag": "V1"}, {"title": "Sing hosanna, sing hosanna,", "raw_slide": "Sing hosanna, sing hosanna,\nSing hosanna to the King of kings.\nSing hosanna, sing hosanna,\nSing hosanna to the King.", "verseTag": "C1"}], "header": {"icon": ":/plugins/plugin_songs.png", "theme": null, "type": 1, "audit": ["Give me oil in my Lamp", ["Author Unknown"], "", ""], "end_time": 0, "notes": "", "title": "Give me oil in my Lamp", "auto_play_slides_once": false, "auto_play_slides_loop": false, "start_time": 0, "background_audio": [], "media_length": 0, "processor": null, "plugin": "songs", "timed_slide_interval": 0, "footer": ["Give me oil in my Lamp", "Author Unknown", ""], "search": "", "theme_overwritten": false, "data": {"title": "give me oil in my lamp@", "authors": "Author Unknown"}, "name": "songs", "from_plugin": false, "capabilities": [2, 1, 5, 8, 9, 13], "xml_version": "<?xml version='1.0' encoding='UTF-8'?>\n<song xmlns=\"http://openlyrics.info/namespace/2009/song\" version=\"0.8\" createdIn=\"OpenLP 2.2.2\" modifiedIn=\"OpenLP 2.2.2\" modifiedDate=\"2013-09-07T09:28:50\"><properties><titles><title>Give me oil in my Lamp</title></titles><verseOrder>v1 c1</verseOrder><authors><author>Author Unknown</author></authors></properties><lyrics><verse name=\"v1\"><lines>Give me oil in my lamp, keep me burning.<br/>Give me oil in my lamp, I pray.<br/>Give me oil in my lamp, keep my burning,<br/>Keep me burning till the break of day.</lines></verse><verse name=\"c1\"><lines>Sing hosanna, sing hosanna,<br/>Sing hosanna to the King of kings.<br/>Sing hosanna, sing hosanna,<br/>Sing hosanna to the King.</lines></verse><verse name=\"v2\"><lines>Give me joy in my heart, keep me praising\u2026</lines></verse><verse name=\"v3\"><lines>Give me peace in my heart, keep me resting\u2026</lines></verse><verse name=\"v4\"><lines>Give me love in my heart, keep me serving\u2026</lines></verse></lyrics></song>", "will_auto_start": false}}}, {"serviceitem": {"data": [{"title": "Give me oil in my lamp, keep m", "raw_slide": "Give me oil in my lamp, keep me burning.\nGive me oil in my lamp, I pray.\nGive me oil in my lamp, keep my burning,\nKeep me burning till the break of day.", "verseTag": "V1"}, {"title": "Sing hosanna, sing hosanna,", "raw_slide": "Sing hosanna, sing hosanna,\nSing hosanna to the King of kings.\nSing hosanna, sing hosanna,\nSing hosanna to the King.", "verseTag": "C1"}, {"title": "Give me joy in my heart, keep ", "raw_slide": "Give me joy in my heart, keep me praising\u2026", "verseTag": "V2"}, {"title": "Sing hosanna, sing hosanna,", "raw_slide": "Sing hosanna, sing hosanna,\nSing hosanna to the King of kings.\nSing hosanna, sing hosanna,\nSing hosanna to the King.", "verseTag": "C1"}, {"title": "Give me peace in my heart, kee", "raw_slide": "Give me peace in my heart, keep me resting\u2026", "verseTag": "V3"}, {"title": "Sing hosanna, sing hosanna,", "raw_slide": "Sing hosanna, sing hosanna,\nSing hosanna to the King of kings.\nSing hosanna, sing hosanna,\nSing hosanna to the King.", "verseTag": "C1"}, {"title": "Give me love in my heart, keep", "raw_slide": "Give me love in my heart, keep me serving\u2026", "verseTag": "V4"}, {"title": "Sing hosanna, sing hosanna,", "raw_slide": "Sing hosanna, sing hosanna,\nSing hosanna to the King of kings.\nSing hosanna, sing hosanna,\nSing hosanna to the King.", "verseTag": "C1"}], "header": {"icon": ":/plugins/plugin_songs.png", "theme": null, "type": 1, "audit": ["Give me oil in my Lamp", ["Author Unknown"], "", ""], "end_time": 0, "notes": "", "title": "Give me oil in my Lamp", "auto_play_slides_once": false, "auto_play_slides_loop": false, "start_time": 0, "background_audio": [], "media_length": 0, "processor": null, "plugin": "songs", "timed_slide_interval": 0, "footer": ["Give me oil in my Lamp", "Author Unknown", ""], "search": "", "theme_overwritten": false, "data": {"title": "give me oil in my lamp@", "authors": "Author Unknown"}, "name": "songs", "from_plugin": false, "capabilities": [2, 1, 5, 8, 9, 13], "xml_version": "<?xml version='1.0' encoding='UTF-8'?>\n<song xmlns=\"http://openlyrics.info/namespace/2009/song\" version=\"0.8\" createdIn=\"OpenLP 2.2.2\" modifiedIn=\"OpenLP 2.2.2\" modifiedDate=\"2013-09-07T09:28:58\"><properties><titles><title>Give me oil in my Lamp</title></titles><verseOrder>v1 c1 v2 c1 v3 c1 v4 c1</verseOrder><authors><author>Author Unknown</author></authors></properties><lyrics><verse name=\"v1\"><lines>Give me oil in my lamp, keep me burning.<br/>Give me oil in my lamp, I pray.<br/>Give me oil in my lamp, keep my burning,<br/>Keep me burning till the break of day.</lines></verse><verse name=\"c1\"><lines>Sing hosanna, sing hosanna,<br/>Sing hosanna to the King of kings.<br/>Sing hosanna, sing hosanna,<br/>Sing hosanna to the King.</lines></verse><verse name=\"v2\"><lines>Give me joy in my heart, keep me praising\u2026</lines></verse><verse name=\"v3\"><lines>Give me peace in my heart, keep me resting\u2026</lines></verse><verse name=\"v4\"><lines>Give me love in my heart, keep me serving\u2026</lines></verse></lyrics></song>", "will_auto_start": false}}}, {"serviceitem": {"data": [{"title": "Guide me, O thou great Jehovah", "raw_slide": "Guide me, O thou great Jehovah,\nPilgrim through this barren land;\nI am weak, but Thou art mighty,\nHold me with Thy powerful hand:\nBread of heaven, Bread of heaven,\nFeed me now and ever more,\nFeed me now and ever more.", "verseTag": "V1"}, {"title": "Open Thou the crystal fountain", "raw_slide": "Open Thou the crystal fountain\nWhence the healing stream doth flow;\nLet the fiery, cloudy pillar\nLead me all my journey through:\nStrong Deliverer, strong Deliverer,\nBe Thou still my strength and shield,\nBe Thou still my strength and shield.", "verseTag": "V2"}, {"title": "When I tread the verge of Jord", "raw_slide": "When I tread the verge of Jordan\nBid my anxious fears subside;\nDeath of death, and hell\u2019s destruction,\nLand me safe on Canaan\u2019s side:\nSongs of praises, songs of praises,\nI will ever give to Thee,\nI will ever give to Thee.", "verseTag": "V3"}], "header": {"icon": ":/plugins/plugin_songs.png", "theme": null, "type": 1, "audit": ["Guide Me O Thou Great Jehovah", ["William Williams"], "", ""], "end_time": 0, "notes": "", "title": "Guide Me O Thou Great Jehovah", "auto_play_slides_once": false, "auto_play_slides_loop": false, "start_time": 0, "background_audio": [], "media_length": 0, "processor": null, "plugin": "songs", "timed_slide_interval": 0, "footer": ["Guide Me O Thou Great Jehovah", "William Williams", ""], "search": "", "theme_overwritten": false, "data": {"title": "guide me o thou great jehovah@", "authors": "William Williams"}, "name": "songs", "from_plugin": false, "capabilities": [2, 1, 5, 8, 9, 13], "xml_version": "<?xml version='1.0' encoding='UTF-8'?>\n<song xmlns=\"http://openlyrics.info/namespace/2009/song\" version=\"0.8\" createdIn=\"OpenLP 2.2.2\" modifiedIn=\"OpenLP 2.2.2\" modifiedDate=\"2013-09-07T09:30:21\"><properties><titles><title>Guide Me O Thou Great Jehovah</title></titles><authors><author>William Williams</author></authors></properties><lyrics><verse name=\"v1\"><lines>Guide me, O thou great Jehovah,<br/>Pilgrim through this barren land;<br/>I am weak, but Thou art mighty,<br/>Hold me with Thy powerful hand:<br/>Bread of heaven, Bread of heaven,<br/>Feed me now and ever more,<br/>Feed me now and ever more.</lines></verse><verse name=\"v2\"><lines>Open Thou the crystal fountain<br/>Whence the healing stream doth flow;<br/>Let the fiery, cloudy pillar<br/>Lead me all my journey through:<br/>Strong Deliverer, strong Deliverer,<br/>Be Thou still my strength and shield,<br/>Be Thou still my strength and shield.</lines></verse><verse name=\"v3\"><lines>When I tread the verge of Jordan<br/>Bid my anxious fears subside;<br/>Death of death, and hell\u2019s destruction,<br/>Land me safe on Canaan\u2019s side:<br/>Songs of praises, songs of praises,<br/>I will ever give to Thee,<br/>I will ever give to Thee.</lines></verse></lyrics></song>", "will_auto_start": false}}}, {"serviceitem": {"data": [{"title": "Guide me, O thou great Jehovah", "raw_slide": "Guide me, O thou great Jehovah,\nPilgrim through this barren land;\nI am weak, but Thou art mighty,\nHold me with Thy powerful hand:\nBread of heaven, Bread of heaven,\nFeed me now and ever more,\nFeed me now and ever more.", "verseTag": "V1"}, {"title": "When I tread the verge of Jord", "raw_slide": "When I tread the verge of Jordan\nBid my anxious fears subside;\nDeath of death, and hell\u2019s destruction,\nLand me safe on Canaan\u2019s side:\nSongs of praises, songs of praises,\nI will ever give to Thee,\nI will ever give to Thee.", "verseTag": "V3"}], "header": {"icon": ":/plugins/plugin_songs.png", "theme": null, "type": 1, "audit": ["Guide Me O Thou Great Jehovah", ["William Williams"], "", ""], "end_time": 0, "notes": "", "title": "Guide Me O Thou Great Jehovah", "auto_play_slides_once": false, "auto_play_slides_loop": false, "start_time": 0, "background_audio": [], "media_length": 0, "processor": null, "plugin": "songs", "timed_slide_interval": 0, "footer": ["Guide Me O Thou Great Jehovah", "William Williams", ""], "search": "", "theme_overwritten": false, "data": {"title": "guide me o thou great jehovah@", "authors": "William Williams"}, "name": "songs", "from_plugin": false, "capabilities": [2, 1, 5, 8, 9, 13], "xml_version": "<?xml version='1.0' encoding='UTF-8'?>\n<song xmlns=\"http://openlyrics.info/namespace/2009/song\" version=\"0.8\" createdIn=\"OpenLP 2.2.2\" modifiedIn=\"OpenLP 2.2.2\" modifiedDate=\"2013-09-07T09:30:13\"><properties><titles><title>Guide Me O Thou Great Jehovah</title></titles><verseOrder>v1 v3</verseOrder><authors><author>William Williams</author></authors></properties><lyrics><verse name=\"v1\"><lines>Guide me, O thou great Jehovah,<br/>Pilgrim through this barren land;<br/>I am weak, but Thou art mighty,<br/>Hold me with Thy powerful hand:<br/>Bread of heaven, Bread of heaven,<br/>Feed me now and ever more,<br/>Feed me now and ever more.</lines></verse><verse name=\"v2\"><lines>Open Thou the crystal fountain<br/>Whence the healing stream doth flow;<br/>Let the fiery, cloudy pillar<br/>Lead me all my journey through:<br/>Strong Deliverer, strong Deliverer,<br/>Be Thou still my strength and shield,<br/>Be Thou still my strength and shield.</lines></verse><verse name=\"v3\"><lines>When I tread the verge of Jordan<br/>Bid my anxious fears subside;<br/>Death of death, and hell\u2019s destruction,<br/>Land me safe on Canaan\u2019s side:<br/>Songs of praises, songs of praises,<br/>I will ever give to Thee,<br/>I will ever give to Thee.</lines></verse></lyrics></song>", "will_auto_start": false}}}, {"serviceitem": {"data": [{"title": "To God be the glory! great thi", "raw_slide": "To God be the glory! great things He hath done!\nSo loved He the world that He gave us His Son,\nWho yielded His life an atonement for sin,\nAnd opened the life-gate that all may go in.", "verseTag": "V1"}, {"title": "Praise the Lord! Praise the Lo", "raw_slide": "Praise the Lord! Praise the Lord!\nLet the earth hear His voice!\nPraise the Lord! Praise the Lord!\nLet the people rejoice!\nO come to the Father through Jesus the Son;\nAnd give Him the glory, great things He hath done!", "verseTag": "C1"}, {"title": "O perfect redemption, the purc", "raw_slide": "O perfect redemption, the purchase of blood!\nTo every believer the promise of God;\nThe vilest offender who truly believes,\nThat moment from Jesus a pardon receives.", "verseTag": "V2"}, {"title": "Great things He hath taught us", "raw_slide": "Great things He hath taught us, great things He hath done,\nAnd great our rejoicing through Jesus the Son:\nBut purer and higher and greater will be\nOur wonder, our worship, when Jesus we see!", "verseTag": "V3"}], "header": {"icon": ":/plugins/plugin_songs.png", "theme": null, "type": 1, "audit": ["To God be the Glory", ["Fanny Crosby"], "", ""], "end_time": 0, "notes": "", "title": "To God be the Glory", "auto_play_slides_once": false, "auto_play_slides_loop": false, "start_time": 0, "background_audio": [], "media_length": 0, "processor": null, "plugin": "songs", "timed_slide_interval": 0, "footer": ["To God be the Glory", "Fanny Crosby", ""], "search": "", "theme_overwritten": false, "data": {"title": "to god be the glory@", "authors": "Fanny Crosby"}, "name": "songs", "from_plugin": false, "capabilities": [2, 1, 5, 8, 9, 13], "xml_version": "<?xml version='1.0' encoding='UTF-8'?>\n<song xmlns=\"http://openlyrics.info/namespace/2009/song\" version=\"0.8\" createdIn=\"OpenLP 2.2.2\" modifiedIn=\"OpenLP 2.2.2\" modifiedDate=\"2013-09-07T09:49:50\"><properties><titles><title>To God be the Glory</title></titles><authors><author>Fanny Crosby</author></authors></properties><lyrics><verse name=\"v1\"><lines>To God be the glory! great things He hath done!<br/>So loved He the world that He gave us His Son,<br/>Who yielded His life an atonement for sin,<br/>And opened the life-gate that all may go in.</lines></verse><verse name=\"c1\"><lines>Praise the Lord! Praise the Lord!<br/>Let the earth hear His voice!<br/>Praise the Lord! Praise the Lord!<br/>Let the people rejoice!<br/>O come to the Father through Jesus the Son;<br/>And give Him the glory, great things He hath done!</lines></verse><verse name=\"v2\"><lines>O perfect redemption, the purchase of blood!<br/>To every believer the promise of God;<br/>The vilest offender who truly believes,<br/>That moment from Jesus a pardon receives.</lines></verse><verse name=\"v3\"><lines>Great things He hath taught us, great things He hath done,<br/>And great our rejoicing through Jesus the Son:<br/>But purer and higher and greater will be<br/>Our wonder, our worship, when Jesus we see!</lines></verse></lyrics></song>", "will_auto_start": false}}}, {"serviceitem": {"data": [{"title": "To God be the glory! great thi", "raw_slide": "To God be the glory! great things He hath done!\nSo loved He the world that He gave us His Son,\nWho yielded His life an atonement for sin,\nAnd opened the life-gate that all may go in.", "verseTag": "V1"}, {"title": "Praise the Lord! Praise the Lo", "raw_slide": "Praise the Lord! Praise the Lord!\nLet the earth hear His voice!\nPraise the Lord! Praise the Lord!\nLet the people rejoice!\nO come to the Father through Jesus the Son;\nAnd give Him the glory, great things He hath done!", "verseTag": "C1"}, {"title": "O perfect redemption, the purc", "raw_slide": "O perfect redemption, the purchase of blood!\nTo every believer the promise of God;\nThe vilest offender who truly believes,\nThat moment from Jesus a pardon receives.", "verseTag": "V2"}, {"title": "Praise the Lord! Praise the Lo", "raw_slide": "Praise the Lord! Praise the Lord!\nLet the earth hear His voice!\nPraise the Lord! Praise the Lord!\nLet the people rejoice!\nO come to the Father through Jesus the Son;\nAnd give Him the glory, great things He hath done!", "verseTag": "C1"}, {"title": "Great things He hath taught us", "raw_slide": "Great things He hath taught us, great things He hath done,\nAnd great our rejoicing through Jesus the Son:\nBut purer and higher and greater will be\nOur wonder, our worship, when Jesus we see!", "verseTag": "V3"}, {"title": "Praise the Lord! Praise the Lo", "raw_slide": "Praise the Lord! Praise the Lord!\nLet the earth hear His voice!\nPraise the Lord! Praise the Lord!\nLet the people rejoice!\nO come to the Father through Jesus the Son;\nAnd give Him the glory, great things He hath done!", "verseTag": "C1"}], "header": {"icon": ":/plugins/plugin_songs.png", "theme": null, "type": 1, "audit": ["To God be the Glory", ["Fanny Crosby"], "", ""], "end_time": 0, "notes": "", "title": "To God be the Glory", "auto_play_slides_once": false, "auto_play_slides_loop": false, "start_time": 0, "background_audio": [], "media_length": 0, "processor": null, "plugin": "songs", "timed_slide_interval": 0, "footer": ["To God be the Glory", "Fanny Crosby", ""], "search": "", "theme_overwritten": false, "data": {"title": "to god be the glory@", "authors": "Fanny Crosby"}, "name": "songs", "from_plugin": false, "capabilities": [2, 1, 5, 8, 9, 13], "xml_version": "<?xml version='1.0' encoding='UTF-8'?>\n<song xmlns=\"http://openlyrics.info/namespace/2009/song\" version=\"0.8\" createdIn=\"OpenLP 2.2.2\" modifiedIn=\"OpenLP 2.2.2\" modifiedDate=\"2013-09-07T09:49:16\"><properties><titles><title>To God be the Glory</title></titles><verseOrder>v1 c1 v2 c1 v3 c1</verseOrder><authors><author>Fanny Crosby</author></authors></properties><lyrics><verse name=\"v1\"><lines>To God be the glory! great things He hath done!<br/>So loved He the world that He gave us His Son,<br/>Who yielded His life an atonement for sin,<br/>And opened the life-gate that all may go in.</lines></verse><verse name=\"c1\"><lines>Praise the Lord! Praise the Lord!<br/>Let the earth hear His voice!<br/>Praise the Lord! Praise the Lord!<br/>Let the people rejoice!<br/>O come to the Father through Jesus the Son;<br/>And give Him the glory, great things He hath done!</lines></verse><verse name=\"v2\"><lines>O perfect redemption, the purchase of blood!<br/>To every believer the promise of God;<br/>The vilest offender who truly believes,<br/>That moment from Jesus a pardon receives.</lines></verse><verse name=\"v3\"><lines>Great things He hath taught us, great things He hath done,<br/>And great our rejoicing through Jesus the Son:<br/>But purer and higher and greater will be<br/>Our wonder, our worship, when Jesus we see!</lines></verse></lyrics></song>", "will_auto_start": false}}}, {"serviceitem": {"data": [{"title": "Amazing Grace! how sweet the s", "raw_slide": "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.", "verseTag": "V1"}, {"title": "\u2019Twas grace that taught my hea", "raw_slide": "\u2019Twas grace that taught my heart to fear,\nAnd grace my fears relieved;\nHow precious did that grace appear,\nThe hour I first believed!", "verseTag": "V2"}, {"title": "Through many dangers, toils an", "raw_slide": "Through many dangers, toils and snares\nI have already come;\n\u2019Tis grace that brought me safe thus far,\nAnd grace will lead me home.", "verseTag": "V3"}, {"title": "The Lord has promised good to ", "raw_slide": "The Lord has promised good to me,\nHis word my hope secures;\nHe will my shield and portion be\nAs long as life endures.", "verseTag": "V4"}, {"title": "When we\u2019ve been there a thousa", "raw_slide": "When we\u2019ve been there a thousand years,\nBright shining as the sun,\nWe\u2019ve no less days to sing God\u2019s praise\nThan when we first begun.", "verseTag": "V6"}], "header": {"icon": ":/plugins/plugin_songs.png", "theme": null, "type": 1, "audit": ["Amazing Grace", ["John Newton"], "", ""], "end_time": 0, "notes": "", "title": "Amazing Grace", "auto_play_slides_once": false, "auto_play_slides_loop": false, "start_time": 0, "background_audio": [], "media_length": 0, "processor": null, "plugin": "songs", "timed_slide_interval": 0, "footer": ["Amazing Grace", "John Newton", ""], "search": "", "theme_overwritten": false, "data": {"title": "amazing grace@", "authors": "John Newton"}, "name": "songs", "from_plugin": false, "capabilities": [2, 1, 5, 8, 9, 13], "xml_version": "<?xml version='1.0' encoding='UTF-8'?>\n<song xmlns=\"http://openlyrics.info/namespace/2009/song\" version=\"0.8\" createdIn=\"OpenLP 2.2.2\" modifiedIn=\"OpenLP 2.2.2\" modifiedDate=\"2013-09-07T09:46:56\"><properties><titles><title>Amazing Grace</title></titles><verseOrder>v1 v2 v3 v4 v6</verseOrder><authors><author>John Newton</author></authors></properties><lyrics><verse name=\"v1\"><lines>Amazing Grace! how sweet the sound<br/>That saved a wretch like me;<br/>I once was lost, but now am found,<br/>Was blind, but now I see.</lines></verse><verse name=\"v2\"><lines>\u2019Twas grace that taught my heart to fear,<br/>And grace my fears relieved;<br/>How precious did that grace appear,<br/>The hour I first believed!</lines></verse><verse name=\"v3\"><lines>Through many dangers, toils and snares<br/>I have already come;<br/>\u2019Tis grace that brought me safe thus far,<br/>And grace will lead me home.</lines></verse><verse name=\"v4\"><lines>The Lord has promised good to me,<br/>His word my hope secures;<br/>He will my shield and portion be<br/>As long as life endures.</lines></verse><verse name=\"v5\"><lines>Yes, when this heart and flesh shall fail,<br/>And mortal life shall cease,<br/>I shall possess within the veil<br/>A life of joy and peace.</lines></verse><verse name=\"v6\"><lines>When we\u2019ve been there a thousand years,<br/>Bright shining as the sun,<br/>We\u2019ve no less days to sing God\u2019s praise<br/>Than when we first begun.</lines></verse></lyrics></song>", "will_auto_start": false}}}, {"serviceitem": {"data": [{"title": "All things bright and beautifu", "raw_slide": "All things bright and beautiful,\nAll creatures great and small,\nAll things wise and wonderful,\nThe Lord God made them all.", "verseTag": "V1"}, {"title": "Each little flower that opens,", "raw_slide": "Each little flower that opens,\nEach little bird that sings,\nHe made their glowing colours,\nHe made their tiny wings.", "verseTag": "V2"}, {"title": "All things bright and beautifu", "raw_slide": "All things bright and beautiful,\nAll creatures great and small,\nAll things wise and wonderful,\nThe Lord God made them all.", "verseTag": "V1"}, {"title": "The purple-headed mountain,", "raw_slide": "The purple-headed mountain,\nThe river running by,\nThe sunset, and the morning\nThat brightens up the sky.", "verseTag": "V4"}, {"title": "All things bright and beautifu", "raw_slide": "All things bright and beautiful,\nAll creatures great and small,\nAll things wise and wonderful,\nThe Lord God made them all.", "verseTag": "V1"}, {"title": "The cold wind in the winter,", "raw_slide": "The cold wind in the winter,\nThe pleasant summer sun,\nThe ripe fruits in the garden,\nHe made them every one.", "verseTag": "V5"}, {"title": "All things bright and beautifu", "raw_slide": "All things bright and beautiful,\nAll creatures great and small,\nAll things wise and wonderful,\nThe Lord God made them all.", "verseTag": "V1"}, {"title": "He gave us eyes to see them,", "raw_slide": "He gave us eyes to see them,\nAnd lips that we might tell\nHow great is God Almighty,\nWho has made all things well.", "verseTag": "V7"}, {"title": "All things bright and beautifu", "raw_slide": "All things bright and beautiful,\nAll creatures great and small,\nAll things wise and wonderful,\nThe Lord God made them all.", "verseTag": "V1"}], "header": {"icon": ":/plugins/plugin_songs.png", "theme": null, "type": 1, "audit": ["All Things Bright and Beautiful", ["Cecil F. Alexander"], "", ""], "end_time": 0, "notes": "", "title": "All Things Bright and Beautiful", "auto_play_slides_once": false, "auto_play_slides_loop": false, "start_time": 0, "background_audio": [], "media_length": 0, "processor": null, "plugin": "songs", "timed_slide_interval": 0, "footer": ["All Things Bright and Beautiful", "Cecil F. Alexander", ""], "search": "", "theme_overwritten": false, "data": {"title": "all things bright and beautiful@", "authors": "Cecil F. Alexander"}, "name": "songs", "from_plugin": false, "capabilities": [2, 1, 5, 8, 9, 13], "xml_version": "<?xml version='1.0' encoding='UTF-8'?>\n<song xmlns=\"http://openlyrics.info/namespace/2009/song\" version=\"0.8\" createdIn=\"OpenLP 2.2.2\" modifiedIn=\"OpenLP 2.2.2\" modifiedDate=\"2013-09-07T09:42:02\"><properties><titles><title>All Things Bright and Beautiful</title></titles><verseOrder>v1 v2 v1 v4 v1 v5 v1 v7 v1</verseOrder><authors><author>Cecil F. Alexander</author></authors></properties><lyrics><verse name=\"v1\"><lines>All things bright and beautiful,<br/>All creatures great and small,<br/>All things wise and wonderful,<br/>The Lord God made them all.</lines></verse><verse name=\"v2\"><lines>Each little flower that opens,<br/>Each little bird that sings,<br/>He made their glowing colours,<br/>He made their tiny wings.</lines></verse><verse name=\"v3\"><lines>The rich man in his castle,<br/>The poor man at his gate,<br/>God made them high and lowly,<br/>And ordered their estate.</lines></verse><verse name=\"v4\"><lines>The purple-headed mountain,<br/>The river running by,<br/>The sunset, and the morning<br/>That brightens up the sky.</lines></verse><verse name=\"v5\"><lines>The cold wind in the winter,<br/>The pleasant summer sun,<br/>The ripe fruits in the garden,<br/>He made them every one.</lines></verse><verse name=\"v6\"><lines>The tall trees in the greenwood,<br/>The meadows where we play,<br/>The rushes by the water,<br/>We gather every day.</lines></verse><verse name=\"v7\"><lines>He gave us eyes to see them,<br/>And lips that we might tell<br/>How great is God Almighty,<br/>Who has made all things well.</lines></verse></lyrics></song>", "will_auto_start": false}}}, {"serviceitem": {"data": [{"title": "The first nowell the angel did", "raw_slide": "The first nowell the angel did say\nWas to certain poor shepherds in fields as they lay;\nIn fields where they lay keeping their sheep,\nOn a cold winter\u2019s night that was so deep.", "verseTag": "V1"}, {"title": "Nowell, nowell, nowell, nowell", "raw_slide": "Nowell, nowell, nowell, nowell,\nBorn is the King of Israel!", "verseTag": "C1"}, {"title": "They looked up and saw a star", "raw_slide": "They looked up and saw a star\nShining in the east, beyond them far,\nAnd to the earth it gave great light,\nAnd so it continued both day and night.", "verseTag": "V2"}, {"title": "And by the light of that same ", "raw_slide": "And by the light of that same star\nThree wise men came from country far;\nTo seek for a King was their intent,\nAnd to follow the star wherever it went.", "verseTag": "V3"}, {"title": "This star drew nigh to the nor", "raw_slide": "This star drew nigh to the north-west;\nOver Bethlehem it took its rest,\nAnd there it did both stop and stay\nRight over the place where Jesus lay.", "verseTag": "V4"}, {"title": "Then entered in those wise men", "raw_slide": "Then entered in those wise men three\nFull reverently upon their knee,\nAnd offered there in His presence\nTheir gold, and myrrh, and frankincense.", "verseTag": "V5"}, {"title": "Then let us all with one accor", "raw_slide": "Then let us all with one accord\nSing praises to our heavenly Lord,\nThat hath made heaven and earth of nought,\nAnd with His blood mankind hath bought.", "verseTag": "V6"}], "header": {"icon": ":/plugins/plugin_songs.png", "theme": null, "type": 1, "audit": ["The First Nowell", ["Author Unknown"], "", ""], "end_time": 0, "notes": "", "title": "The First Nowell", "auto_play_slides_once": false, "auto_play_slides_loop": false, "start_time": 0, "background_audio": [], "media_length": 0, "processor": null, "plugin": "songs", "timed_slide_interval": 0, "footer": ["The First Nowell", "Author Unknown", ""], "search": "", "theme_overwritten": false, "data": {"title": "the first nowell@", "authors": "Author Unknown"}, "name": "songs", "from_plugin": false, "capabilities": [2, 1, 5, 8, 9, 13], "xml_version": "<?xml version='1.0' encoding='UTF-8'?>\n<song xmlns=\"http://openlyrics.info/namespace/2009/song\" version=\"0.8\" createdIn=\"OpenLP 2.2.2\" modifiedIn=\"OpenLP 2.2.2\" modifiedDate=\"2013-09-07T09:46:18\"><properties><titles><title>The First Nowell</title></titles><authors><author>Author Unknown</author></authors></properties><lyrics><verse name=\"v1\"><lines>The first nowell the angel did say<br/>Was to certain poor shepherds in fields as they lay;<br/>In fields where they lay keeping their sheep,<br/>On a cold winter\u2019s night that was so deep.</lines></verse><verse name=\"c1\"><lines>Nowell, nowell, nowell, nowell,<br/>Born is the King of Israel!</lines></verse><verse name=\"v2\"><lines>They looked up and saw a star<br/>Shining in the east, beyond them far,<br/>And to the earth it gave great light,<br/>And so it continued both day and night.</lines></verse><verse name=\"v3\"><lines>And by the light of that same star<br/>Three wise men came from country far;<br/>To seek for a King was their intent,<br/>And to follow the star wherever it went.</lines></verse><verse name=\"v4\"><lines>This star drew nigh to the north-west;<br/>Over Bethlehem it took its rest,<br/>And there it did both stop and stay<br/>Right over the place where Jesus lay.</lines></verse><verse name=\"v5\"><lines>Then entered in those wise men three<br/>Full reverently upon their knee,<br/>And offered there in His presence<br/>Their gold, and myrrh, and frankincense.</lines></verse><verse name=\"v6\"><lines>Then let us all with one accord<br/>Sing praises to our heavenly Lord,<br/>That hath made heaven and earth of nought,<br/>And with His blood mankind hath bought.</lines></verse></lyrics></song>", "will_auto_start": false}}}, {"serviceitem": {"data": [{"title": "Joy to the world! the Lord has", "raw_slide": "Joy to the world! the Lord has come;\nLet earth receive her King.\nLet every heart prepare Him room,\nAnd heaven and nature sing,\nAnd heaven and nature sing,\nAnd heaven, and heaven and nature sing!", "verseTag": "V1"}, {"title": "Joy to the earth! the Saviour ", "raw_slide": "Joy to the earth! the Saviour reigns;\nYour sweetest songs employ.\nWhile fields and streams and hills and plains\nRepeat the sounding joy,\nRepeat the sounding joy,\nRepeat, repeat the sounding joy!", "verseTag": "V2"}, {"title": "He rules the world with truth ", "raw_slide": "He rules the world with truth and grace,\nAnd makes the nations prove\nThe glories of His righteousness,\nThe wonders of His love,\nThe wonders of His love,\nThe wonders, the wonders of His love.", "verseTag": "V3"}], "header": {"icon": ":/plugins/plugin_songs.png", "theme": null, "type": 1, "audit": ["Joy To the World", ["Isaac Watts"], "", ""], "end_time": 0, "notes": "", "title": "Joy To the World", "auto_play_slides_once": false, "auto_play_slides_loop": false, "start_time": 0, "background_audio": [], "media_length": 0, "processor": null, "plugin": "songs", "timed_slide_interval": 0, "footer": ["Joy To the World", "Isaac Watts", ""], "search": "", "theme_overwritten": false, "data": {"title": "joy to the world@", "authors": "Isaac Watts"}, "name": "songs", "from_plugin": false, "capabilities": [2, 1, 5, 8, 9, 13], "xml_version": "<?xml version='1.0' encoding='UTF-8'?>\n<song xmlns=\"http://openlyrics.info/namespace/2009/song\" version=\"0.8\" createdIn=\"OpenLP 2.2.2\" modifiedIn=\"OpenLP 2.2.2\" modifiedDate=\"2013-09-07T10:23:34\"><properties><titles><title>Joy To the World</title></titles><authors><author>Isaac Watts</author></authors></properties><lyrics><verse name=\"v1\"><lines>Joy to the world! the Lord has come;<br/>Let earth receive her King.<br/>Let every heart prepare Him room,<br/>And heaven and nature sing,<br/>And heaven and nature sing,<br/>And heaven, and heaven and nature sing!</lines></verse><verse name=\"v2\"><lines>Joy to the earth! the Saviour reigns;<br/>Your sweetest songs employ.<br/>While fields and streams and hills and plains<br/>Repeat the sounding joy,<br/>Repeat the sounding joy,<br/>Repeat, repeat the sounding joy!</lines></verse><verse name=\"v3\"><lines>He rules the world with truth and grace,<br/>And makes the nations prove<br/>The glories of His righteousness,<br/>The wonders of His love,<br/>The wonders of His love,<br/>The wonders, the wonders of His love.</lines></verse></lyrics></song>", "will_auto_start": false}}}]
\ No newline at end of file
=== added file 'tests/resources/serviceitem_songs_2.osj'
--- tests/resources/serviceitem_songs_2.osj 1970-01-01 00:00:00 +0000
+++ tests/resources/serviceitem_songs_2.osj 2013-09-09 18:41:28 +0000
@@ -0,0 +1,1 @@
+[{"serviceitem": {"header": {"auto_play_slides_once": false, "processor": null, "data": {"verse_order": "V1 V2 V3 V4 V5", "authors": "W. H. Monk", "title": "abide with me@"}, "theme_overwritten": false, "theme": null, "end_time": 0, "start_time": 0, "media_length": 0, "capabilities": [2, 1, 5, 8, 9, 13], "xml_version": "<?xml version='1.0' encoding='UTF-8'?>\n<song xmlns=\"http://openlyrics.info/namespace/2009/song\" version=\"0.8\" createdIn=\"OpenLP 2.2.2\" modifiedIn=\"OpenLP 2.2.2\" modifiedDate=\"2013-09-07T09:20:02\"><properties><titles><title>Abide With Me</title></titles><authors><author>W. H. Monk</author></authors></properties><lyrics><verse name=\"v1\"><lines>Abide with me, fast falls the eventide;<br/>The darkness deepens, Lord, with me abide;<br/>When other helpers fail and comforts flee,<br/>Help of the helpless, O abide with me.</lines></verse><verse name=\"v2\"><lines>Swift to its close ebbs out life\u2019s little day;<br/>Earth\u2019s joys grow dim, its glories pass away;<br/>Change and decay in all around I see;<br/>O Thou who changest not, abide with me.</lines></verse><verse name=\"v3\"><lines>I need Thy presence every passing hour;<br/>What but Thy grace can foil the tempter\u2019s power?<br/>Who like Thyself my guide and stay can be?<br/>Through cloud and sunshine, O abide with me.</lines></verse><verse name=\"v4\"><lines>I fear no foe, with Thee at hand to bless;<br/>Ills have no weight, and tears no bitterness.<br/>Where is death\u2019s sting? Where, grave, thy victory? <br/>I triumph still, if Thou abide with me.</lines></verse><verse name=\"v5\"><lines>Reveal Thyself before my closing eyes;<br/>Shine through the gloom, and point me to the skies,<br/>Heaven\u2019s morning breaks, and earth\u2019s vain shadows flee;<br/>In life, in death, O Lord, abide with me.</lines></verse></lyrics></song>", "audit": ["Abide With Me", ["W. H. Monk"], "", ""], "auto_play_slides_loop": false, "title": "Abide With Me", "type": 1, "icon": ":/plugins/plugin_songs.png", "name": "songs", "background_audio": [], "notes": "", "from_plugin": false, "plugin": "songs", "will_auto_start": false, "search": "", "timed_slide_interval": 0, "footer": ["Abide With Me", "W. H. Monk", ""]}, "data": [{"verseTag": "V1", "raw_slide": "Abide with me, fast falls the eventide;\nThe darkness deepens, Lord, with me abide;\nWhen other helpers fail and comforts flee,\nHelp of the helpless, O abide with me.", "title": "Abide with me, fast falls the "}, {"verseTag": "V2", "raw_slide": "Swift to its close ebbs out life\u2019s little day;\nEarth\u2019s joys grow dim, its glories pass away;\nChange and decay in all around I see;\nO Thou who changest not, abide with me.", "title": "Swift to its close ebbs out li"}, {"verseTag": "V3", "raw_slide": "I need Thy presence every passing hour;\nWhat but Thy grace can foil the tempter\u2019s power?\nWho like Thyself my guide and stay can be?\nThrough cloud and sunshine, O abide with me.", "title": "I need Thy presence every pass"}, {"verseTag": "V4", "raw_slide": "I fear no foe, with Thee at hand to bless;\nIlls have no weight, and tears no bitterness.\nWhere is death\u2019s sting? Where, grave, thy victory? \nI triumph still, if Thou abide with me.", "title": "I fear no foe, with Thee at ha"}, {"verseTag": "V5", "raw_slide": "Reveal Thyself before my closing eyes;\nShine through the gloom, and point me to the skies,\nHeaven\u2019s morning breaks, and earth\u2019s vain shadows flee;\nIn life, in death, O Lord, abide with me.", "title": "Reveal Thyself before my closi"}]}}, {"serviceitem": {"header": {"auto_play_slides_once": false, "processor": null, "data": {"verse_order": "V1 C1 V2 C1 V3 C1 V4 C1", "authors": "James Montgomery", "title": "angels from the realsm of glory@"}, "theme_overwritten": false, "theme": null, "end_time": 0, "start_time": 0, "media_length": 0, "capabilities": [2, 1, 5, 8, 9, 13], "xml_version": "<?xml version='1.0' encoding='UTF-8'?>\n<song xmlns=\"http://openlyrics.info/namespace/2009/song\" version=\"0.8\" createdIn=\"OpenLP 2.2.2\" modifiedIn=\"OpenLP 2.2.2\" modifiedDate=\"2013-09-07T09:20:04\"><properties><titles><title>Angels From the Realsm of Glory</title></titles><verseOrder>v1 c1 v2 c1 v3 c1 v4 c1</verseOrder><authors><author>James Montgomery</author></authors></properties><lyrics><verse name=\"v1\"><lines>Angels, from the realsm of Glory,<br/>Wing your flight o\u2019er all the earth;<br/>Ye who sang creation\u2019s story,<br/>Now proclaim Messiah\u2019s birth:</lines></verse><verse name=\"c1\"><lines>Come and worship<br/>Christ, the new-born King.<br/>Come and worship<br/>Worship Christ, the new-born King.</lines></verse><verse name=\"v2\"><lines>Shepherds, in the field abiding,<br/>Watching o\u2019er your flocks by night,<br/>God with man is now residing,<br/>Yonder shines the infant-light:</lines></verse><verse name=\"v3\"><lines>Sages, leave your contemplations,<br/>Brighter visions beam afar;<br/>Seek the great desire of nations,<br/>Ye have seen His natal star:</lines></verse><verse name=\"v4\"><lines>Saints, before the altar bending,<br/>Watching long in hope and fear,<br/>Suddenly the Lord descending<br/>In His temple shall appear:</lines></verse></lyrics></song>", "audit": ["Angels From the Realsm of Glory", ["James Montgomery"], null, "None"], "auto_play_slides_loop": false, "title": "Angels From the Realsm of Glory", "type": 1, "icon": ":/plugins/plugin_songs.png", "name": "songs", "background_audio": [], "notes": "", "from_plugin": false, "plugin": "songs", "will_auto_start": false, "search": "", "timed_slide_interval": 0, "footer": ["Angels From the Realsm of Glory", "James Montgomery", null]}, "data": [{"verseTag": "V1", "raw_slide": "Angels, from the realsm of Glory,\nWing your flight o\u2019er all the earth;\nYe who sang creation\u2019s story,\nNow proclaim Messiah\u2019s birth:", "title": "Angels, from the realsm of Glo"}, {"verseTag": "C1", "raw_slide": "Come and worship\nChrist, the new-born King.\nCome and worship\nWorship Christ, the new-born King.", "title": "Come and worship"}, {"verseTag": "V2", "raw_slide": "Shepherds, in the field abiding,\nWatching o\u2019er your flocks by night,\nGod with man is now residing,\nYonder shines the infant-light:", "title": "Shepherds, in the field abidin"}, {"verseTag": "C1", "raw_slide": "Come and worship\nChrist, the new-born King.\nCome and worship\nWorship Christ, the new-born King.", "title": "Come and worship"}, {"verseTag": "V3", "raw_slide": "Sages, leave your contemplations,\nBrighter visions beam afar;\nSeek the great desire of nations,\nYe have seen His natal star:", "title": "Sages, leave your contemplatio"}, {"verseTag": "C1", "raw_slide": "Come and worship\nChrist, the new-born King.\nCome and worship\nWorship Christ, the new-born King.", "title": "Come and worship"}, {"verseTag": "V4", "raw_slide": "Saints, before the altar bending,\nWatching long in hope and fear,\nSuddenly the Lord descending\nIn His temple shall appear:", "title": "Saints, before the altar bendi"}, {"verseTag": "C1", "raw_slide": "Come and worship\nChrist, the new-born King.\nCome and worship\nWorship Christ, the new-born King.", "title": "Come and worship"}]}}, {"serviceitem": {"header": {"auto_play_slides_once": false, "processor": null, "data": {"verse_order": "V1 C1", "authors": "Author Unknown", "title": "give me oil in my lamp@"}, "theme_overwritten": false, "theme": null, "end_time": 0, "start_time": 0, "media_length": 0, "capabilities": [2, 1, 5, 8, 9, 13], "xml_version": "<?xml version='1.0' encoding='UTF-8'?>\n<song xmlns=\"http://openlyrics.info/namespace/2009/song\" version=\"0.8\" createdIn=\"OpenLP 2.2.2\" modifiedIn=\"OpenLP 2.2.2\" modifiedDate=\"2013-09-07T09:28:50\"><properties><titles><title>Give me oil in my Lamp</title></titles><verseOrder>v1 c1</verseOrder><authors><author>Author Unknown</author></authors></properties><lyrics><verse name=\"v1\"><lines>Give me oil in my lamp, keep me burning.<br/>Give me oil in my lamp, I pray.<br/>Give me oil in my lamp, keep my burning,<br/>Keep me burning till the break of day.</lines></verse><verse name=\"c1\"><lines>Sing hosanna, sing hosanna,<br/>Sing hosanna to the King of kings.<br/>Sing hosanna, sing hosanna,<br/>Sing hosanna to the King.</lines></verse><verse name=\"v2\"><lines>Give me joy in my heart, keep me praising\u2026</lines></verse><verse name=\"v3\"><lines>Give me peace in my heart, keep me resting\u2026</lines></verse><verse name=\"v4\"><lines>Give me love in my heart, keep me serving\u2026</lines></verse></lyrics></song>", "audit": ["Give me oil in my Lamp", ["Author Unknown"], "", ""], "auto_play_slides_loop": false, "title": "Give me oil in my Lamp", "type": 1, "icon": ":/plugins/plugin_songs.png", "name": "songs", "background_audio": [], "notes": "", "from_plugin": false, "plugin": "songs", "will_auto_start": false, "search": "", "timed_slide_interval": 0, "footer": ["Give me oil in my Lamp", "Author Unknown", ""]}, "data": [{"verseTag": "V1", "raw_slide": "Give me oil in my lamp, keep me burning.\nGive me oil in my lamp, I pray.\nGive me oil in my lamp, keep my burning,\nKeep me burning till the break of day.", "title": "Give me oil in my lamp, keep m"}, {"verseTag": "C1", "raw_slide": "Sing hosanna, sing hosanna,\nSing hosanna to the King of kings.\nSing hosanna, sing hosanna,\nSing hosanna to the King.", "title": "Sing hosanna, sing hosanna,"}]}}, {"serviceitem": {"header": {"auto_play_slides_once": false, "processor": null, "data": {"verse_order": "V1 C1 V2 C1 V3 C1 V4 C1", "authors": "Author Unknown", "title": "give me oil in my lamp@"}, "theme_overwritten": false, "theme": null, "end_time": 0, "start_time": 0, "media_length": 0, "capabilities": [2, 1, 5, 8, 9, 13], "xml_version": "<?xml version='1.0' encoding='UTF-8'?>\n<song xmlns=\"http://openlyrics.info/namespace/2009/song\" version=\"0.8\" createdIn=\"OpenLP 2.2.2\" modifiedIn=\"OpenLP 2.2.2\" modifiedDate=\"2013-09-07T09:28:58\"><properties><titles><title>Give me oil in my Lamp</title></titles><verseOrder>v1 c1 v2 c1 v3 c1 v4 c1</verseOrder><authors><author>Author Unknown</author></authors></properties><lyrics><verse name=\"v1\"><lines>Give me oil in my lamp, keep me burning.<br/>Give me oil in my lamp, I pray.<br/>Give me oil in my lamp, keep my burning,<br/>Keep me burning till the break of day.</lines></verse><verse name=\"c1\"><lines>Sing hosanna, sing hosanna,<br/>Sing hosanna to the King of kings.<br/>Sing hosanna, sing hosanna,<br/>Sing hosanna to the King.</lines></verse><verse name=\"v2\"><lines>Give me joy in my heart, keep me praising\u2026</lines></verse><verse name=\"v3\"><lines>Give me peace in my heart, keep me resting\u2026</lines></verse><verse name=\"v4\"><lines>Give me love in my heart, keep me serving\u2026</lines></verse></lyrics></song>", "audit": ["Give me oil in my Lamp", ["Author Unknown"], "", ""], "auto_play_slides_loop": false, "title": "Give me oil in my Lamp", "type": 1, "icon": ":/plugins/plugin_songs.png", "name": "songs", "background_audio": [], "notes": "", "from_plugin": false, "plugin": "songs", "will_auto_start": false, "search": "", "timed_slide_interval": 0, "footer": ["Give me oil in my Lamp", "Author Unknown", ""]}, "data": [{"verseTag": "V1", "raw_slide": "Give me oil in my lamp, keep me burning.\nGive me oil in my lamp, I pray.\nGive me oil in my lamp, keep my burning,\nKeep me burning till the break of day.", "title": "Give me oil in my lamp, keep m"}, {"verseTag": "C1", "raw_slide": "Sing hosanna, sing hosanna,\nSing hosanna to the King of kings.\nSing hosanna, sing hosanna,\nSing hosanna to the King.", "title": "Sing hosanna, sing hosanna,"}, {"verseTag": "V2", "raw_slide": "Give me joy in my heart, keep me praising\u2026", "title": "Give me joy in my heart, keep "}, {"verseTag": "C1", "raw_slide": "Sing hosanna, sing hosanna,\nSing hosanna to the King of kings.\nSing hosanna, sing hosanna,\nSing hosanna to the King.", "title": "Sing hosanna, sing hosanna,"}, {"verseTag": "V3", "raw_slide": "Give me peace in my heart, keep me resting\u2026", "title": "Give me peace in my heart, kee"}, {"verseTag": "C1", "raw_slide": "Sing hosanna, sing hosanna,\nSing hosanna to the King of kings.\nSing hosanna, sing hosanna,\nSing hosanna to the King.", "title": "Sing hosanna, sing hosanna,"}, {"verseTag": "V4", "raw_slide": "Give me love in my heart, keep me serving\u2026", "title": "Give me love in my heart, keep"}, {"verseTag": "C1", "raw_slide": "Sing hosanna, sing hosanna,\nSing hosanna to the King of kings.\nSing hosanna, sing hosanna,\nSing hosanna to the King.", "title": "Sing hosanna, sing hosanna,"}]}}, {"serviceitem": {"header": {"auto_play_slides_once": false, "processor": null, "data": {"verse_order": "V1 V2 V3", "authors": "William Williams", "title": "guide me o thou great jehovah@"}, "theme_overwritten": false, "theme": null, "end_time": 0, "start_time": 0, "media_length": 0, "capabilities": [2, 1, 5, 8, 9, 13], "xml_version": "<?xml version='1.0' encoding='UTF-8'?>\n<song xmlns=\"http://openlyrics.info/namespace/2009/song\" version=\"0.8\" createdIn=\"OpenLP 2.2.2\" modifiedIn=\"OpenLP 2.2.2\" modifiedDate=\"2013-09-07T09:30:21\"><properties><titles><title>Guide Me O Thou Great Jehovah</title></titles><authors><author>William Williams</author></authors></properties><lyrics><verse name=\"v1\"><lines>Guide me, O thou great Jehovah,<br/>Pilgrim through this barren land;<br/>I am weak, but Thou art mighty,<br/>Hold me with Thy powerful hand:<br/>Bread of heaven, Bread of heaven,<br/>Feed me now and ever more,<br/>Feed me now and ever more.</lines></verse><verse name=\"v2\"><lines>Open Thou the crystal fountain<br/>Whence the healing stream doth flow;<br/>Let the fiery, cloudy pillar<br/>Lead me all my journey through:<br/>Strong Deliverer, strong Deliverer,<br/>Be Thou still my strength and shield,<br/>Be Thou still my strength and shield.</lines></verse><verse name=\"v3\"><lines>When I tread the verge of Jordan<br/>Bid my anxious fears subside;<br/>Death of death, and hell\u2019s destruction,<br/>Land me safe on Canaan\u2019s side:<br/>Songs of praises, songs of praises,<br/>I will ever give to Thee,<br/>I will ever give to Thee.</lines></verse></lyrics></song>", "audit": ["Guide Me O Thou Great Jehovah", ["William Williams"], "", ""], "auto_play_slides_loop": false, "title": "Guide Me O Thou Great Jehovah", "type": 1, "icon": ":/plugins/plugin_songs.png", "name": "songs", "background_audio": [], "notes": "", "from_plugin": false, "plugin": "songs", "will_auto_start": false, "search": "", "timed_slide_interval": 0, "footer": ["Guide Me O Thou Great Jehovah", "William Williams", ""]}, "data": [{"verseTag": "V1", "raw_slide": "Guide me, O thou great Jehovah,\nPilgrim through this barren land;\nI am weak, but Thou art mighty,\nHold me with Thy powerful hand:\nBread of heaven, Bread of heaven,\nFeed me now and ever more,\nFeed me now and ever more.", "title": "Guide me, O thou great Jehovah"}, {"verseTag": "V2", "raw_slide": "Open Thou the crystal fountain\nWhence the healing stream doth flow;\nLet the fiery, cloudy pillar\nLead me all my journey through:\nStrong Deliverer, strong Deliverer,\nBe Thou still my strength and shield,\nBe Thou still my strength and shield.", "title": "Open Thou the crystal fountain"}, {"verseTag": "V3", "raw_slide": "When I tread the verge of Jordan\nBid my anxious fears subside;\nDeath of death, and hell\u2019s destruction,\nLand me safe on Canaan\u2019s side:\nSongs of praises, songs of praises,\nI will ever give to Thee,\nI will ever give to Thee.", "title": "When I tread the verge of Jord"}]}}, {"serviceitem": {"header": {"auto_play_slides_once": false, "processor": null, "data": {"verse_order": "V1 V3", "authors": "William Williams", "title": "guide me o thou great jehovah@"}, "theme_overwritten": false, "theme": null, "end_time": 0, "start_time": 0, "media_length": 0, "capabilities": [2, 1, 5, 8, 9, 13], "xml_version": "<?xml version='1.0' encoding='UTF-8'?>\n<song xmlns=\"http://openlyrics.info/namespace/2009/song\" version=\"0.8\" createdIn=\"OpenLP 2.2.2\" modifiedIn=\"OpenLP 2.2.2\" modifiedDate=\"2013-09-07T09:30:13\"><properties><titles><title>Guide Me O Thou Great Jehovah</title></titles><verseOrder>v1 v3</verseOrder><authors><author>William Williams</author></authors></properties><lyrics><verse name=\"v1\"><lines>Guide me, O thou great Jehovah,<br/>Pilgrim through this barren land;<br/>I am weak, but Thou art mighty,<br/>Hold me with Thy powerful hand:<br/>Bread of heaven, Bread of heaven,<br/>Feed me now and ever more,<br/>Feed me now and ever more.</lines></verse><verse name=\"v2\"><lines>Open Thou the crystal fountain<br/>Whence the healing stream doth flow;<br/>Let the fiery, cloudy pillar<br/>Lead me all my journey through:<br/>Strong Deliverer, strong Deliverer,<br/>Be Thou still my strength and shield,<br/>Be Thou still my strength and shield.</lines></verse><verse name=\"v3\"><lines>When I tread the verge of Jordan<br/>Bid my anxious fears subside;<br/>Death of death, and hell\u2019s destruction,<br/>Land me safe on Canaan\u2019s side:<br/>Songs of praises, songs of praises,<br/>I will ever give to Thee,<br/>I will ever give to Thee.</lines></verse></lyrics></song>", "audit": ["Guide Me O Thou Great Jehovah", ["William Williams"], "", ""], "auto_play_slides_loop": false, "title": "Guide Me O Thou Great Jehovah", "type": 1, "icon": ":/plugins/plugin_songs.png", "name": "songs", "background_audio": [], "notes": "", "from_plugin": false, "plugin": "songs", "will_auto_start": false, "search": "", "timed_slide_interval": 0, "footer": ["Guide Me O Thou Great Jehovah", "William Williams", ""]}, "data": [{"verseTag": "V1", "raw_slide": "Guide me, O thou great Jehovah,\nPilgrim through this barren land;\nI am weak, but Thou art mighty,\nHold me with Thy powerful hand:\nBread of heaven, Bread of heaven,\nFeed me now and ever more,\nFeed me now and ever more.", "title": "Guide me, O thou great Jehovah"}, {"verseTag": "V3", "raw_slide": "When I tread the verge of Jordan\nBid my anxious fears subside;\nDeath of death, and hell\u2019s destruction,\nLand me safe on Canaan\u2019s side:\nSongs of praises, songs of praises,\nI will ever give to Thee,\nI will ever give to Thee.", "title": "When I tread the verge of Jord"}]}}, {"serviceitem": {"header": {"auto_play_slides_once": false, "processor": null, "data": {"verse_order": "V1 C1 V2 V3", "authors": "Fanny Crosby", "title": "to god be the glory@"}, "theme_overwritten": false, "theme": null, "end_time": 0, "start_time": 0, "media_length": 0, "capabilities": [2, 1, 5, 8, 9, 13], "xml_version": "<?xml version='1.0' encoding='UTF-8'?>\n<song xmlns=\"http://openlyrics.info/namespace/2009/song\" version=\"0.8\" createdIn=\"OpenLP 2.2.2\" modifiedIn=\"OpenLP 2.2.2\" modifiedDate=\"2013-09-07T09:49:50\"><properties><titles><title>To God be the Glory</title></titles><authors><author>Fanny Crosby</author></authors></properties><lyrics><verse name=\"v1\"><lines>To God be the glory! great things He hath done!<br/>So loved He the world that He gave us His Son,<br/>Who yielded His life an atonement for sin,<br/>And opened the life-gate that all may go in.</lines></verse><verse name=\"c1\"><lines>Praise the Lord! Praise the Lord!<br/>Let the earth hear His voice!<br/>Praise the Lord! Praise the Lord!<br/>Let the people rejoice!<br/>O come to the Father through Jesus the Son;<br/>And give Him the glory, great things He hath done!</lines></verse><verse name=\"v2\"><lines>O perfect redemption, the purchase of blood!<br/>To every believer the promise of God;<br/>The vilest offender who truly believes,<br/>That moment from Jesus a pardon receives.</lines></verse><verse name=\"v3\"><lines>Great things He hath taught us, great things He hath done,<br/>And great our rejoicing through Jesus the Son:<br/>But purer and higher and greater will be<br/>Our wonder, our worship, when Jesus we see!</lines></verse></lyrics></song>", "audit": ["To God be the Glory", ["Fanny Crosby"], "", ""], "auto_play_slides_loop": false, "title": "To God be the Glory", "type": 1, "icon": ":/plugins/plugin_songs.png", "name": "songs", "background_audio": [], "notes": "", "from_plugin": false, "plugin": "songs", "will_auto_start": false, "search": "", "timed_slide_interval": 0, "footer": ["To God be the Glory", "Fanny Crosby", ""]}, "data": [{"verseTag": "V1", "raw_slide": "To God be the glory! great things He hath done!\nSo loved He the world that He gave us His Son,\nWho yielded His life an atonement for sin,\nAnd opened the life-gate that all may go in.", "title": "To God be the glory! great thi"}, {"verseTag": "C1", "raw_slide": "Praise the Lord! Praise the Lord!\nLet the earth hear His voice!\nPraise the Lord! Praise the Lord!\nLet the people rejoice!\nO come to the Father through Jesus the Son;\nAnd give Him the glory, great things He hath done!", "title": "Praise the Lord! Praise the Lo"}, {"verseTag": "V2", "raw_slide": "O perfect redemption, the purchase of blood!\nTo every believer the promise of God;\nThe vilest offender who truly believes,\nThat moment from Jesus a pardon receives.", "title": "O perfect redemption, the purc"}, {"verseTag": "V3", "raw_slide": "Great things He hath taught us, great things He hath done,\nAnd great our rejoicing through Jesus the Son:\nBut purer and higher and greater will be\nOur wonder, our worship, when Jesus we see!", "title": "Great things He hath taught us"}]}}, {"serviceitem": {"header": {"auto_play_slides_once": false, "processor": null, "data": {"verse_order": "V1 C1 V2 C1 V3 C1", "authors": "Fanny Crosby", "title": "to god be the glory@"}, "theme_overwritten": false, "theme": null, "end_time": 0, "start_time": 0, "media_length": 0, "capabilities": [2, 1, 5, 8, 9, 13], "xml_version": "<?xml version='1.0' encoding='UTF-8'?>\n<song xmlns=\"http://openlyrics.info/namespace/2009/song\" version=\"0.8\" createdIn=\"OpenLP 2.2.2\" modifiedIn=\"OpenLP 2.2.2\" modifiedDate=\"2013-09-07T09:49:16\"><properties><titles><title>To God be the Glory</title></titles><verseOrder>v1 c1 v2 c1 v3 c1</verseOrder><authors><author>Fanny Crosby</author></authors></properties><lyrics><verse name=\"v1\"><lines>To God be the glory! great things He hath done!<br/>So loved He the world that He gave us His Son,<br/>Who yielded His life an atonement for sin,<br/>And opened the life-gate that all may go in.</lines></verse><verse name=\"c1\"><lines>Praise the Lord! Praise the Lord!<br/>Let the earth hear His voice!<br/>Praise the Lord! Praise the Lord!<br/>Let the people rejoice!<br/>O come to the Father through Jesus the Son;<br/>And give Him the glory, great things He hath done!</lines></verse><verse name=\"v2\"><lines>O perfect redemption, the purchase of blood!<br/>To every believer the promise of God;<br/>The vilest offender who truly believes,<br/>That moment from Jesus a pardon receives.</lines></verse><verse name=\"v3\"><lines>Great things He hath taught us, great things He hath done,<br/>And great our rejoicing through Jesus the Son:<br/>But purer and higher and greater will be<br/>Our wonder, our worship, when Jesus we see!</lines></verse></lyrics></song>", "audit": ["To God be the Glory", ["Fanny Crosby"], "", ""], "auto_play_slides_loop": false, "title": "To God be the Glory", "type": 1, "icon": ":/plugins/plugin_songs.png", "name": "songs", "background_audio": [], "notes": "", "from_plugin": false, "plugin": "songs", "will_auto_start": false, "search": "", "timed_slide_interval": 0, "footer": ["To God be the Glory", "Fanny Crosby", ""]}, "data": [{"verseTag": "V1", "raw_slide": "To God be the glory! great things He hath done!\nSo loved He the world that He gave us His Son,\nWho yielded His life an atonement for sin,\nAnd opened the life-gate that all may go in.", "title": "To God be the glory! great thi"}, {"verseTag": "C1", "raw_slide": "Praise the Lord! Praise the Lord!\nLet the earth hear His voice!\nPraise the Lord! Praise the Lord!\nLet the people rejoice!\nO come to the Father through Jesus the Son;\nAnd give Him the glory, great things He hath done!", "title": "Praise the Lord! Praise the Lo"}, {"verseTag": "V2", "raw_slide": "O perfect redemption, the purchase of blood!\nTo every believer the promise of God;\nThe vilest offender who truly believes,\nThat moment from Jesus a pardon receives.", "title": "O perfect redemption, the purc"}, {"verseTag": "C1", "raw_slide": "Praise the Lord! Praise the Lord!\nLet the earth hear His voice!\nPraise the Lord! Praise the Lord!\nLet the people rejoice!\nO come to the Father through Jesus the Son;\nAnd give Him the glory, great things He hath done!", "title": "Praise the Lord! Praise the Lo"}, {"verseTag": "V3", "raw_slide": "Great things He hath taught us, great things He hath done,\nAnd great our rejoicing through Jesus the Son:\nBut purer and higher and greater will be\nOur wonder, our worship, when Jesus we see!", "title": "Great things He hath taught us"}, {"verseTag": "C1", "raw_slide": "Praise the Lord! Praise the Lord!\nLet the earth hear His voice!\nPraise the Lord! Praise the Lord!\nLet the people rejoice!\nO come to the Father through Jesus the Son;\nAnd give Him the glory, great things He hath done!", "title": "Praise the Lord! Praise the Lo"}]}}, {"serviceitem": {"header": {"auto_play_slides_once": false, "processor": null, "data": {"verse_order": "V1 V2 V3 V4 V6", "authors": "John Newton", "title": "amazing grace@"}, "theme_overwritten": false, "theme": null, "end_time": 0, "start_time": 0, "media_length": 0, "capabilities": [2, 1, 5, 8, 9, 13], "xml_version": "<?xml version='1.0' encoding='UTF-8'?>\n<song xmlns=\"http://openlyrics.info/namespace/2009/song\" version=\"0.8\" createdIn=\"OpenLP 2.2.2\" modifiedIn=\"OpenLP 2.2.2\" modifiedDate=\"2013-09-07T09:46:56\"><properties><titles><title>Amazing Grace</title></titles><verseOrder>v1 v2 v3 v4 v6</verseOrder><authors><author>John Newton</author></authors></properties><lyrics><verse name=\"v1\"><lines>Amazing Grace! how sweet the sound<br/>That saved a wretch like me;<br/>I once was lost, but now am found,<br/>Was blind, but now I see.</lines></verse><verse name=\"v2\"><lines>\u2019Twas grace that taught my heart to fear,<br/>And grace my fears relieved;<br/>How precious did that grace appear,<br/>The hour I first believed!</lines></verse><verse name=\"v3\"><lines>Through many dangers, toils and snares<br/>I have already come;<br/>\u2019Tis grace that brought me safe thus far,<br/>And grace will lead me home.</lines></verse><verse name=\"v4\"><lines>The Lord has promised good to me,<br/>His word my hope secures;<br/>He will my shield and portion be<br/>As long as life endures.</lines></verse><verse name=\"v5\"><lines>Yes, when this heart and flesh shall fail,<br/>And mortal life shall cease,<br/>I shall possess within the veil<br/>A life of joy and peace.</lines></verse><verse name=\"v6\"><lines>When we\u2019ve been there a thousand years,<br/>Bright shining as the sun,<br/>We\u2019ve no less days to sing God\u2019s praise<br/>Than when we first begun.</lines></verse></lyrics></song>", "audit": ["Amazing Grace", ["John Newton"], "", ""], "auto_play_slides_loop": false, "title": "Amazing Grace", "type": 1, "icon": ":/plugins/plugin_songs.png", "name": "songs", "background_audio": [], "notes": "", "from_plugin": false, "plugin": "songs", "will_auto_start": false, "search": "", "timed_slide_interval": 0, "footer": ["Amazing Grace", "John Newton", ""]}, "data": [{"verseTag": "V1", "raw_slide": "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.", "title": "Amazing Grace! how sweet the s"}, {"verseTag": "V2", "raw_slide": "\u2019Twas grace that taught my heart to fear,\nAnd grace my fears relieved;\nHow precious did that grace appear,\nThe hour I first believed!", "title": "\u2019Twas grace that taught my hea"}, {"verseTag": "V3", "raw_slide": "Through many dangers, toils and snares\nI have already come;\n\u2019Tis grace that brought me safe thus far,\nAnd grace will lead me home.", "title": "Through many dangers, toils an"}, {"verseTag": "V4", "raw_slide": "The Lord has promised good to me,\nHis word my hope secures;\nHe will my shield and portion be\nAs long as life endures.", "title": "The Lord has promised good to "}, {"verseTag": "V6", "raw_slide": "When we\u2019ve been there a thousand years,\nBright shining as the sun,\nWe\u2019ve no less days to sing God\u2019s praise\nThan when we first begun.", "title": "When we\u2019ve been there a thousa"}]}}, {"serviceitem": {"header": {"auto_play_slides_once": false, "processor": null, "data": {"verse_order": "V1 V2 V1 V4 V1 V5 V1 V7 V1", "authors": "Cecil F. Alexander", "title": "all things bright and beautiful@"}, "theme_overwritten": false, "theme": null, "end_time": 0, "start_time": 0, "media_length": 0, "capabilities": [2, 1, 5, 8, 9, 13], "xml_version": "<?xml version='1.0' encoding='UTF-8'?>\n<song xmlns=\"http://openlyrics.info/namespace/2009/song\" version=\"0.8\" createdIn=\"OpenLP 2.2.2\" modifiedIn=\"OpenLP 2.2.2\" modifiedDate=\"2013-09-07T09:42:02\"><properties><titles><title>All Things Bright and Beautiful</title></titles><verseOrder>v1 v2 v1 v4 v1 v5 v1 v7 v1</verseOrder><authors><author>Cecil F. Alexander</author></authors></properties><lyrics><verse name=\"v1\"><lines>All things bright and beautiful,<br/>All creatures great and small,<br/>All things wise and wonderful,<br/>The Lord God made them all.</lines></verse><verse name=\"v2\"><lines>Each little flower that opens,<br/>Each little bird that sings,<br/>He made their glowing colours,<br/>He made their tiny wings.</lines></verse><verse name=\"v3\"><lines>The rich man in his castle,<br/>The poor man at his gate,<br/>God made them high and lowly,<br/>And ordered their estate.</lines></verse><verse name=\"v4\"><lines>The purple-headed mountain,<br/>The river running by,<br/>The sunset, and the morning<br/>That brightens up the sky.</lines></verse><verse name=\"v5\"><lines>The cold wind in the winter,<br/>The pleasant summer sun,<br/>The ripe fruits in the garden,<br/>He made them every one.</lines></verse><verse name=\"v6\"><lines>The tall trees in the greenwood,<br/>The meadows where we play,<br/>The rushes by the water,<br/>We gather every day.</lines></verse><verse name=\"v7\"><lines>He gave us eyes to see them,<br/>And lips that we might tell<br/>How great is God Almighty,<br/>Who has made all things well.</lines></verse></lyrics></song>", "audit": ["All Things Bright and Beautiful", ["Cecil F. Alexander"], "", ""], "auto_play_slides_loop": false, "title": "All Things Bright and Beautiful", "type": 1, "icon": ":/plugins/plugin_songs.png", "name": "songs", "background_audio": [], "notes": "", "from_plugin": false, "plugin": "songs", "will_auto_start": false, "search": "", "timed_slide_interval": 0, "footer": ["All Things Bright and Beautiful", "Cecil F. Alexander", ""]}, "data": [{"verseTag": "V1", "raw_slide": "All things bright and beautiful,\nAll creatures great and small,\nAll things wise and wonderful,\nThe Lord God made them all.", "title": "All things bright and beautifu"}, {"verseTag": "V2", "raw_slide": "Each little flower that opens,\nEach little bird that sings,\nHe made their glowing colours,\nHe made their tiny wings.", "title": "Each little flower that opens,"}, {"verseTag": "V1", "raw_slide": "All things bright and beautiful,\nAll creatures great and small,\nAll things wise and wonderful,\nThe Lord God made them all.", "title": "All things bright and beautifu"}, {"verseTag": "V4", "raw_slide": "The purple-headed mountain,\nThe river running by,\nThe sunset, and the morning\nThat brightens up the sky.", "title": "The purple-headed mountain,"}, {"verseTag": "V1", "raw_slide": "All things bright and beautiful,\nAll creatures great and small,\nAll things wise and wonderful,\nThe Lord God made them all.", "title": "All things bright and beautifu"}, {"verseTag": "V5", "raw_slide": "The cold wind in the winter,\nThe pleasant summer sun,\nThe ripe fruits in the garden,\nHe made them every one.", "title": "The cold wind in the winter,"}, {"verseTag": "V1", "raw_slide": "All things bright and beautiful,\nAll creatures great and small,\nAll things wise and wonderful,\nThe Lord God made them all.", "title": "All things bright and beautifu"}, {"verseTag": "V7", "raw_slide": "He gave us eyes to see them,\nAnd lips that we might tell\nHow great is God Almighty,\nWho has made all things well.", "title": "He gave us eyes to see them,"}, {"verseTag": "V1", "raw_slide": "All things bright and beautiful,\nAll creatures great and small,\nAll things wise and wonderful,\nThe Lord God made them all.", "title": "All things bright and beautifu"}]}}, {"serviceitem": {"header": {"auto_play_slides_once": false, "processor": null, "data": {"verse_order": "V1 C1 V2 V3 V4 V5 V6", "authors": "Author Unknown", "title": "the first nowell@"}, "theme_overwritten": false, "theme": null, "end_time": 0, "start_time": 0, "media_length": 0, "capabilities": [2, 1, 5, 8, 9, 13], "xml_version": "<?xml version='1.0' encoding='UTF-8'?>\n<song xmlns=\"http://openlyrics.info/namespace/2009/song\" version=\"0.8\" createdIn=\"OpenLP 2.2.2\" modifiedIn=\"OpenLP 2.2.2\" modifiedDate=\"2013-09-07T09:46:18\"><properties><titles><title>The First Nowell</title></titles><authors><author>Author Unknown</author></authors></properties><lyrics><verse name=\"v1\"><lines>The first nowell the angel did say<br/>Was to certain poor shepherds in fields as they lay;<br/>In fields where they lay keeping their sheep,<br/>On a cold winter\u2019s night that was so deep.</lines></verse><verse name=\"c1\"><lines>Nowell, nowell, nowell, nowell,<br/>Born is the King of Israel!</lines></verse><verse name=\"v2\"><lines>They looked up and saw a star<br/>Shining in the east, beyond them far,<br/>And to the earth it gave great light,<br/>And so it continued both day and night.</lines></verse><verse name=\"v3\"><lines>And by the light of that same star<br/>Three wise men came from country far;<br/>To seek for a King was their intent,<br/>And to follow the star wherever it went.</lines></verse><verse name=\"v4\"><lines>This star drew nigh to the north-west;<br/>Over Bethlehem it took its rest,<br/>And there it did both stop and stay<br/>Right over the place where Jesus lay.</lines></verse><verse name=\"v5\"><lines>Then entered in those wise men three<br/>Full reverently upon their knee,<br/>And offered there in His presence<br/>Their gold, and myrrh, and frankincense.</lines></verse><verse name=\"v6\"><lines>Then let us all with one accord<br/>Sing praises to our heavenly Lord,<br/>That hath made heaven and earth of nought,<br/>And with His blood mankind hath bought.</lines></verse></lyrics></song>", "audit": ["The First Nowell", ["Author Unknown"], "", ""], "auto_play_slides_loop": false, "title": "The First Nowell", "type": 1, "icon": ":/plugins/plugin_songs.png", "name": "songs", "background_audio": [], "notes": "", "from_plugin": false, "plugin": "songs", "will_auto_start": false, "search": "", "timed_slide_interval": 0, "footer": ["The First Nowell", "Author Unknown", ""]}, "data": [{"verseTag": "V1", "raw_slide": "The first nowell the angel did say\nWas to certain poor shepherds in fields as they lay;\nIn fields where they lay keeping their sheep,\nOn a cold winter\u2019s night that was so deep.", "title": "The first nowell the angel did"}, {"verseTag": "C1", "raw_slide": "Nowell, nowell, nowell, nowell,\nBorn is the King of Israel!", "title": "Nowell, nowell, nowell, nowell"}, {"verseTag": "V2", "raw_slide": "They looked up and saw a star\nShining in the east, beyond them far,\nAnd to the earth it gave great light,\nAnd so it continued both day and night.", "title": "They looked up and saw a star"}, {"verseTag": "V3", "raw_slide": "And by the light of that same star\nThree wise men came from country far;\nTo seek for a King was their intent,\nAnd to follow the star wherever it went.", "title": "And by the light of that same "}, {"verseTag": "V4", "raw_slide": "This star drew nigh to the north-west;\nOver Bethlehem it took its rest,\nAnd there it did both stop and stay\nRight over the place where Jesus lay.", "title": "This star drew nigh to the nor"}, {"verseTag": "V5", "raw_slide": "Then entered in those wise men three\nFull reverently upon their knee,\nAnd offered there in His presence\nTheir gold, and myrrh, and frankincense.", "title": "Then entered in those wise men"}, {"verseTag": "V6", "raw_slide": "Then let us all with one accord\nSing praises to our heavenly Lord,\nThat hath made heaven and earth of nought,\nAnd with His blood mankind hath bought.", "title": "Then let us all with one accor"}]}}, {"serviceitem": {"header": {"auto_play_slides_once": false, "processor": null, "data": {"verse_order": "V1 V2 V3", "authors": "Isaac Watts", "title": "joy to the world@"}, "theme_overwritten": false, "theme": null, "end_time": 0, "start_time": 0, "media_length": 0, "capabilities": [2, 1, 5, 8, 9, 13], "xml_version": "<?xml version='1.0' encoding='UTF-8'?>\n<song xmlns=\"http://openlyrics.info/namespace/2009/song\" version=\"0.8\" createdIn=\"OpenLP 2.2.2\" modifiedIn=\"OpenLP 2.2.2\" modifiedDate=\"2013-09-07T10:23:34\"><properties><titles><title>Joy To the World</title></titles><authors><author>Isaac Watts</author></authors></properties><lyrics><verse name=\"v1\"><lines>Joy to the world! the Lord has come;<br/>Let earth receive her King.<br/>Let every heart prepare Him room,<br/>And heaven and nature sing,<br/>And heaven and nature sing,<br/>And heaven, and heaven and nature sing!</lines></verse><verse name=\"v2\"><lines>Joy to the earth! the Saviour reigns;<br/>Your sweetest songs employ.<br/>While fields and streams and hills and plains<br/>Repeat the sounding joy,<br/>Repeat the sounding joy,<br/>Repeat, repeat the sounding joy!</lines></verse><verse name=\"v3\"><lines>He rules the world with truth and grace,<br/>And makes the nations prove<br/>The glories of His righteousness,<br/>The wonders of His love,<br/>The wonders of His love,<br/>The wonders, the wonders of His love.</lines></verse></lyrics></song>", "audit": ["Joy To the World", ["Isaac Watts"], "", ""], "auto_play_slides_loop": false, "title": "Joy To the World", "type": 1, "icon": ":/plugins/plugin_songs.png", "name": "songs", "background_audio": [], "notes": "", "from_plugin": false, "plugin": "songs", "will_auto_start": false, "search": "", "timed_slide_interval": 0, "footer": ["Joy To the World", "Isaac Watts", ""]}, "data": [{"verseTag": "V1", "raw_slide": "Joy to the world! the Lord has come;\nLet earth receive her King.\nLet every heart prepare Him room,\nAnd heaven and nature sing,\nAnd heaven and nature sing,\nAnd heaven, and heaven and nature sing!", "title": "Joy to the world! the Lord has"}, {"verseTag": "V2", "raw_slide": "Joy to the earth! the Saviour reigns;\nYour sweetest songs employ.\nWhile fields and streams and hills and plains\nRepeat the sounding joy,\nRepeat the sounding joy,\nRepeat, repeat the sounding joy!", "title": "Joy to the earth! the Saviour "}, {"verseTag": "V3", "raw_slide": "He rules the world with truth and grace,\nAnd makes the nations prove\nThe glories of His righteousness,\nThe wonders of His love,\nThe wonders of His love,\nThe wonders, the wonders of His love.", "title": "He rules the world with truth "}]}}]
\ No newline at end of file
Follow ups