diff --git a/openlp/core/ui/media/playertab.py b/openlp/core/ui/media/playertab.py index 826a204b4..93cb0b1e7 100644 --- a/openlp/core/ui/media/playertab.py +++ b/openlp/core/ui/media/playertab.py @@ -85,9 +85,7 @@ class PlayerTab(SettingsTab): self.information_label.setWordWrap(True) self.form_layout.addRow(self.information_label) self.left_layout.addWidget(self.background_color_group_box) - self.left_layout.addStretch() self.right_column.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred) - self.right_layout.addStretch() self.media_player_group_box = QtGui.QGroupBox(self.left_column) self.media_player_group_box.setObjectName('media_player_group_box') self.media_player_layout = QtGui.QVBoxLayout(self.media_player_group_box) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 530ab7f65..8bdf9c383 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -1389,7 +1389,8 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtGui.QWidget, Ui_ServiceManage if expand is None: expand = Settings().value('advanced/expand service item') item.from_service = True - self.drop_position = position + if position != -1: + self.drop_position = position if replace: s_item, child = self.find_service_item() item.merge(self.service_items[s_item]['service_item']) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index a357a751a..e88342373 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -287,6 +287,7 @@ class SlideController(DisplayController, RegistryProperties): self.delay_spin_box.setRange(1, 180) self.delay_spin_box.setSuffix(UiStrings().Seconds) self.delay_spin_box.setToolTip(translate('OpenLP.SlideController', 'Delay between slides in seconds.')) + self.receive_spin_delay() self.toolbar.add_toolbar_widget(self.delay_spin_box) else: self.toolbar.add_toolbar_action('goLive', icon=':/general/general_live.png', diff --git a/openlp/plugins/songs/lib/openlyricsxml.py b/openlp/plugins/songs/lib/openlyricsxml.py index e8051eb5b..b9f6b6bd1 100644 --- a/openlp/plugins/songs/lib/openlyricsxml.py +++ b/openlp/plugins/songs/lib/openlyricsxml.py @@ -504,8 +504,19 @@ class OpenLyrics(object): for author in properties.authors.author: display_name = self._text(author) author_type = author.get('type', '') + # As of 0.8 OpenLyrics supports these 3 author types + if author_type not in ('words', 'music', 'translation'): + author_type = '' if display_name: - authors.append((display_name, author_type)) + # Check if an author is listed for both music and words. In that case we use a special type + if author_type == 'words' and (display_name, 'music') in authors: + authors.remove((display_name, 'music')) + authors.append((display_name, 'words+music')) + elif author_type == 'music' and (display_name, 'words') in authors: + authors.remove((display_name, 'words')) + authors.append((display_name, 'words+music')) + else: + authors.append((display_name, author_type)) for (display_name, author_type) in authors: author = self.manager.get_object_filtered(Author, Author.display_name == display_name) if author is None: diff --git a/tests/functional/openlp_plugins/songs/test_openlyricsimport.py b/tests/functional/openlp_plugins/songs/test_openlyricsimport.py index 2eeff5eb6..7a519b4f7 100644 --- a/tests/functional/openlp_plugins/songs/test_openlyricsimport.py +++ b/tests/functional/openlp_plugins/songs/test_openlyricsimport.py @@ -66,6 +66,14 @@ result_tags = [{"temporary": False, "protected": False, "desc": "z", "start tag" "start html": "", "end html": "", "protected": False}] +author_xml = '\ + \ + Test Author1\ + Test Author1\ + Test Author2\ + \ + ' + class TestOpenLyricsImport(TestCase, TestMixin): """ @@ -139,3 +147,22 @@ class TestOpenLyricsImport(TestCase, TestMixin): self.assertListEqual(json.loads(json.dumps(result_tags)), json.loads(str(Settings().value('formattingTags/html_tags'))), 'The formatting tags should contain both the old and the new') + + def process_author_test(self): + """ + Test that _process_authors works + """ + # GIVEN: A OpenLyric XML with authors and a mocked out manager + with patch('openlp.plugins.songs.lib.openlyricsxml.Author') as mocked_author: + mocked_manager = MagicMock() + mocked_manager.get_object_filtered.return_value = None + ol = OpenLyrics(mocked_manager) + properties_xml = objectify.fromstring(author_xml) + mocked_song = MagicMock() + + # WHEN: processing the author xml + ol._process_authors(properties_xml, mocked_song) + + # THEN: add_author should have been called twice + self.assertEquals(mocked_song.method_calls[0][1][1], 'words+music') + self.assertEquals(mocked_song.method_calls[1][1][1], 'words')