← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~trb143/openlp/splitter into lp:openlp

 

Tim Bentley has proposed merging lp:~trb143/openlp/splitter into lp:openlp.

Requested reviews:
  OpenLP Core (openlp-core)

For more details, see:
https://code.launchpad.net/~trb143/openlp/splitter/+merge/328924

Add option to add a split to a song 
This will split the verse when added to the service but keep the verse together for editing.
Useful for the 10 line hymn verses which need 2 slides to display.

Fix some iffy spelling

lp:~trb143/openlp/splitter (revision 2734)
[SUCCESS] https://ci.openlp.io/job/Branch-01-Pull/2135/
[SUCCESS] https://ci.openlp.io/job/Branch-02-Functional-Tests/2042/
[SUCCESS] https://ci.openlp.io/job/Branch-03-Interface-Tests/1946/
[SUCCESS] https://ci.openlp.io/job/Branch-04a-Code_Analysis/1323/
[SUCCESS] https://ci.openlp.io/job/Branch-04b-Test_Coverage/1161/
[SUCCESS] https://ci.openlp.io/job/Branch-04c-Code_Analysis2/291/
[SUCCESS] https://ci.openlp.io/job/Branch-05-AppVeyor-Tests/136/

-- 
Your team OpenLP Core is requested to review the proposed merge of lp:~trb143/openlp/splitter into lp:openlp.
=== modified file 'openlp/core/lib/db.py'
--- openlp/core/lib/db.py	2017-08-01 20:59:41 +0000
+++ openlp/core/lib/db.py	2017-08-11 16:39:27 +0000
@@ -208,7 +208,7 @@
     :param upgrade: The python module that contains the upgrade instructions.
     """
     if not database_exists(url):
-        log.warn("Database {db} doesn't exist - skipping upgrade checks".format(db=url))
+        log.warning("Database {db} doesn't exist - skipping upgrade checks".format(db=url))
         return (0, 0)
 
     log.debug('Checking upgrades for DB {db}'.format(db=url))

=== modified file 'openlp/plugins/songs/forms/duplicatesongremovalform.py'
--- openlp/plugins/songs/forms/duplicatesongremovalform.py	2017-06-09 06:06:49 +0000
+++ openlp/plugins/songs/forms/duplicatesongremovalform.py	2017-08-11 16:39:27 +0000
@@ -25,14 +25,13 @@
 
 import logging
 import multiprocessing
-import os
 
 from PyQt5 import QtCore, QtWidgets
 
 from openlp.core.common import Registry, RegistryProperties, translate
 from openlp.core.ui.lib.wizard import OpenLPWizard, WizardStrings
 from openlp.plugins.songs.lib import delete_song
-from openlp.plugins.songs.lib.db import Song, MediaFile
+from openlp.plugins.songs.lib.db import Song
 from openlp.plugins.songs.forms.songreviewwidget import SongReviewWidget
 from openlp.plugins.songs.lib.songcompare import songs_probably_equal
 

=== modified file 'openlp/plugins/songs/forms/editversedialog.py'
--- openlp/plugins/songs/forms/editversedialog.py	2017-07-04 23:13:51 +0000
+++ openlp/plugins/songs/forms/editversedialog.py	2017-08-11 16:39:27 +0000
@@ -42,6 +42,10 @@
         self.dialog_layout.addWidget(self.verse_text_edit)
         self.verse_type_layout = QtWidgets.QHBoxLayout()
         self.verse_type_layout.setObjectName('verse_type_layout')
+        self.divide_split_button = QtWidgets.QPushButton(edit_verse_dialog)
+        self.divide_split_button.setIcon(build_icon(':/general/general_add.png'))
+        self.divide_split_button.setObjectName('divide_split_button')
+        self.verse_type_layout.addWidget(self.divide_split_button)
         self.split_button = QtWidgets.QPushButton(edit_verse_dialog)
         self.split_button.setIcon(build_icon(':/general/general_add.png'))
         self.split_button.setObjectName('split_button')
@@ -95,6 +99,9 @@
         self.verse_type_combo_box.setItemText(VerseType.Other, VerseType.translated_names[VerseType.Other])
         self.split_button.setText(UiStrings().Split)
         self.split_button.setToolTip(UiStrings().SplitToolTip)
+        self.divide_split_button.setText(translate('SongsPlugin.EditVerseForm', '&Divide'))
+        self.divide_split_button.setToolTip(translate('SongsPlugin.EditVerseForm', 'Divide the verse when displayed '
+                                                                                   'regardless of the screen size.'))
         self.insert_button.setText(translate('SongsPlugin.EditVerseForm', '&Insert'))
         self.insert_button.setToolTip(translate('SongsPlugin.EditVerseForm',
                                       'Split a slide into two by inserting a verse splitter.'))

=== modified file 'openlp/plugins/songs/forms/editverseform.py'
--- openlp/plugins/songs/forms/editverseform.py	2017-06-04 12:14:23 +0000
+++ openlp/plugins/songs/forms/editverseform.py	2017-08-11 16:39:27 +0000
@@ -51,9 +51,10 @@
         self.split_button.clicked.connect(self.on_split_button_clicked)
         self.verse_text_edit.cursorPositionChanged.connect(self.on_cursor_position_changed)
         self.verse_type_combo_box.currentIndexChanged.connect(self.on_verse_type_combo_box_changed)
+        self.divide_split_button.clicked.connect(self.on_divide_split_button_clicked)
         if Settings().value('songs/enable chords'):
-            self.transpose_down_button.clicked.connect(self.on_transepose_down_button_clicked)
-            self.transpose_up_button.clicked.connect(self.on_transepose_up_button_clicked)
+            self.transpose_down_button.clicked.connect(self.on_transpose_down_button_clicked)
+            self.transpose_up_button.clicked.connect(self.on_transpose_up_button_clicked)
 
     def insert_verse(self, verse_tag, verse_num=1):
         """
@@ -70,11 +71,25 @@
 
     def on_split_button_clicked(self):
         """
-        The split button has been pressed
+        The optional split button has been pressed so we need add the split
+        """
+        self._add_splitter_to_text('[---]')
+
+    def on_divide_split_button_clicked(self):
+        """
+        The force split button has been pressed so we need add the split
+        """
+        self._add_splitter_to_text('[--}{--]')
+
+    def _add_splitter_to_text(self, insert_string):
+        """
+        Add a custom splitter to the song text
+
+        :param insert_string: The string to insert
+        :return:
         """
         text = self.verse_text_edit.toPlainText()
         position = self.verse_text_edit.textCursor().position()
-        insert_string = '[---]'
         if position and text[position - 1] != '\n':
             insert_string = '\n' + insert_string
         if position == len(text) or text[position] != '\n':
@@ -101,7 +116,7 @@
         """
         self.update_suggested_verse_number()
 
-    def on_transepose_up_button_clicked(self):
+    def on_transpose_up_button_clicked(self):
         """
         The transpose up button clicked
         """
@@ -118,7 +133,7 @@
         self.verse_text_edit.setFocus()
         self.verse_text_edit.moveCursor(QtGui.QTextCursor.End)
 
-    def on_transepose_down_button_clicked(self):
+    def on_transpose_down_button_clicked(self):
         """
         The transpose down button clicked
         """

=== modified file 'openlp/plugins/songs/lib/__init__.py'
--- openlp/plugins/songs/lib/__init__.py	2017-08-01 20:59:41 +0000
+++ openlp/plugins/songs/lib/__init__.py	2017-08-11 16:39:27 +0000
@@ -546,12 +546,12 @@
     song_plugin.manager.delete_object(Song, song_id)
 
 
-def transpose_lyrics(lyrics, transepose_value):
+def transpose_lyrics(lyrics, transpose_value):
     """
-    Transepose lyrics
+    Transpose lyrics
 
-    :param lyrcs: The lyrics to be transposed
-    :param transepose_value: The value to transpose the lyrics with
+    :param lyrics: The lyrics to be transposed
+    :param transpose_value: The value to transpose the lyrics with
     :return: The transposed lyrics
     """
     # Split text by verse delimiter - both normal and optional
@@ -562,16 +562,17 @@
         if verse.startswith('---[') or verse == '[---]':
             transposed_lyrics += verse
         else:
-            transposed_lyrics += transpose_verse(verse, transepose_value, notation)
+            transposed_lyrics += transpose_verse(verse, transpose_value, notation)
     return transposed_lyrics
 
 
-def transpose_verse(verse_text, transepose_value, notation):
+def transpose_verse(verse_text, transpose_value, notation):
     """
-    Transepose lyrics
+    Transpose Verse
 
-    :param lyrcs: The lyrics to be transposed
-    :param transepose_value: The value to transpose the lyrics with
+    :param verse_text: The lyrics to be transposed
+    :param transpose_value: The value to transpose the lyrics with
+    :param notation: which notation to use
     :return: The transposed lyrics
     """
     if '[' not in verse_text:
@@ -589,11 +590,11 @@
             if word == ']':
                 in_tag = False
                 transposed_lyrics += word
-            elif word == '/':
+            elif word == '/' or word == '--}{--':
                 transposed_lyrics += word
             else:
                 # This MUST be a chord
-                transposed_lyrics += transpose_chord(word, transepose_value, notation)
+                transposed_lyrics += transpose_chord(word, transpose_value, notation)
     # If still inside a chord tag something is wrong!
     if in_tag:
         return verse_text
@@ -629,36 +630,36 @@
     for i in range(0, len(chord_split)):
         if i > 0:
             transposed_chord += '/'
-        currentchord = chord_split[i]
-        if currentchord and currentchord[0] == '(':
+        current_chord = chord_split[i]
+        if current_chord and current_chord[0] == '(':
             transposed_chord += '('
-            if len(currentchord) > 1:
-                currentchord = currentchord[1:]
+            if len(current_chord) > 1:
+                current_chord = current_chord[1:]
             else:
-                currentchord = ''
-        if len(currentchord) > 0:
-            if len(currentchord) > 1:
-                if '#b'.find(currentchord[1]) == -1:
-                    note = currentchord[0:1]
-                    rest = currentchord[1:]
+                current_chord = ''
+        if len(current_chord) > 0:
+            if len(current_chord) > 1:
+                if '#b'.find(current_chord[1]) == -1:
+                    note = current_chord[0:1]
+                    rest = current_chord[1:]
                 else:
-                    note = currentchord[0:2]
-                    rest = currentchord[2:]
+                    note = current_chord[0:2]
+                    rest = current_chord[2:]
             else:
-                note = currentchord
+                note = current_chord
                 rest = ''
-            notenumber = notes_flat.index(note) if note not in notes_sharp else notes_sharp.index(note)
-            notenumber += transpose_value
-            while notenumber > 11:
-                notenumber -= 12
-            while notenumber < 0:
-                notenumber += 12
+            note_number = notes_flat.index(note) if note not in notes_sharp else notes_sharp.index(note)
+            note_number += transpose_value
+            while note_number > 11:
+                note_number -= 12
+            while note_number < 0:
+                note_number += 12
             if i == 0:
-                current_chord = notes_sharp[notenumber] if notes_preferred[notenumber] == '#' else notes_flat[
-                    notenumber]
+                current_chord = notes_sharp[note_number] if notes_preferred[note_number] == '#' else notes_flat[
+                    note_number]
                 last_chord = current_chord
             else:
-                current_chord = notes_flat[notenumber] if last_chord not in notes_sharp else notes_sharp[notenumber]
+                current_chord = notes_flat[note_number] if last_chord not in notes_sharp else notes_sharp[note_number]
             if not (note not in notes_flat and note not in notes_sharp):
                 transposed_chord += current_chord + rest
             else:

=== modified file 'openlp/plugins/songs/lib/mediaitem.py'
--- openlp/plugins/songs/lib/mediaitem.py	2017-08-02 06:09:38 +0000
+++ openlp/plugins/songs/lib/mediaitem.py	2017-08-11 16:39:27 +0000
@@ -578,7 +578,7 @@
         if not song.verse_order.strip():
             for verse in verse_list:
                 # We cannot use from_loose_input() here, because database is supposed to contain English lowercase
-                # singlechar tags.
+                # single char tags.
                 verse_tag = verse[0]['type']
                 verse_index = None
                 if len(verse_tag) > 1:
@@ -589,7 +589,9 @@
                     verse_index = VerseType.from_tag(verse_tag)
                 verse_tag = VerseType.translated_tags[verse_index].upper()
                 verse_def = '{tag}{label}'.format(tag=verse_tag, label=verse[0]['label'])
-                service_item.add_from_text(str(verse[1]), verse_def)
+                force_verse = verse[1].split('[--}{--]\n', 2)
+                for split_verse in force_verse:
+                    service_item.add_from_text(split_verse, verse_def)
         else:
             # Loop through the verse list and expand the song accordingly.
             for order in song.verse_order.lower().split():
@@ -604,7 +606,9 @@
                             verse_index = VerseType.from_tag(verse[0]['type'])
                         verse_tag = VerseType.translated_tags[verse_index]
                         verse_def = '{tag}{text}'.format(tag=verse_tag, text=verse[0]['label'])
-                        service_item.add_from_text(verse[1], verse_def)
+                        force_verse = verse[1].split('[--}{--]\n', 2)
+                        for split_verse in force_verse:
+                            service_item.add_from_text(split_verse, verse_def)
         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)}

=== modified file 'tests/functional/openlp_plugins/songs/test_editverseform.py'
--- tests/functional/openlp_plugins/songs/test_editverseform.py	2017-05-30 20:06:27 +0000
+++ tests/functional/openlp_plugins/songs/test_editverseform.py	2017-08-11 16:39:27 +0000
@@ -72,3 +72,31 @@
 
         # THEN the verse number must not be changed
         self.assertEqual(3, self.edit_verse_form.verse_number_box.value(), 'The verse number should be 3')
+
+    def test_on_divide_split_button_clicked(self):
+        """
+        Test that divide adds text at the correct position
+        """
+        # GIVEN some input values
+        self.edit_verse_form.verse_type_combo_box.currentIndex = MagicMock(return_value=4)
+        self.edit_verse_form.verse_text_edit.setPlainText('Text\n')
+
+        # WHEN the method is called
+        self.edit_verse_form.on_divide_split_button_clicked()
+        # THEN the verse number must not be changed
+        self.assertEqual('[--}{--]\nText\n', self.edit_verse_form.verse_text_edit.toPlainText(),
+                         'The verse number should be [--}{--]\nText\n')
+
+    def test_on_split_button_clicked(self):
+        """
+        Test that divide adds text at the correct position
+        """
+        # GIVEN some input values
+        self.edit_verse_form.verse_type_combo_box.currentIndex = MagicMock(return_value=4)
+        self.edit_verse_form.verse_text_edit.setPlainText('Text\n')
+
+        # WHEN the method is called
+        self.edit_verse_form.on_split_button_clicked()
+        # THEN the verse number must not be changed
+        self.assertEqual('[---]\nText\n', self.edit_verse_form.verse_text_edit.toPlainText(),
+                         'The verse number should be [---]\nText\n')


Follow ups