diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index b360ab13d..a26d580df 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -183,8 +183,9 @@ class ServiceItem(object): else: log.error(u'Invalid value renderer :%s' % self.service_item_type) self.title = clean_tags(self.title) - # The footer should never be None, but to be compatible with older - # release of OpenLP, we have to correct this to avoid tracebacks. + # The footer should never be None, but to be compatible with a few + # nightly between 1.9.4 and 1.9.5, we have to correct this to avoid + # tracebacks. if self.raw_footer is None: self.raw_footer = [] self.foot_text = \ @@ -447,4 +448,5 @@ class ServiceItem(object): elif not start and end: return end else: - return u'%s : %s' % (start, end) \ No newline at end of file + return u'%s : %s' % (start, end) + diff --git a/openlp/plugins/songs/lib/__init__.py b/openlp/plugins/songs/lib/__init__.py index 1c1957b9e..b9dcd1e96 100644 --- a/openlp/plugins/songs/lib/__init__.py +++ b/openlp/plugins/songs/lib/__init__.py @@ -275,14 +275,33 @@ def clean_song(manager, song): sxml = SongXML() # Rebuild the song's verses, to remove any wrong verse names (for example # translated ones), which might have been added prior to 1.9.5. + # List for later comparison. + compare_order = [] for verse in verses: + type = VerseType.Tags[VerseType.from_loose_input(verse[0][u'type'])] sxml.add_verse_to_lyrics( - VerseType.Tags[VerseType.from_loose_input(verse[0][u'type'])], + type, verse[0][u'label'], verse[1], verse[0][u'lang'] if verse[0].has_key(u'lang') else None ) + compare_order.append((u'%s%s' % (type, verse[0][u'label'])).upper()) song.lyrics = unicode(sxml.extract_xml(), u'utf-8') + # Rebuild the verse order, to convert translated verse tags, which might + # have been added prior to 1.9.5. + order = song.verse_order.strip().split() + new_order = [] + for verse_def in order: + new_order.append((u'%s%s' % ( + VerseType.Tags[VerseType.from_loose_input(verse_def[0])], + verse_def[1:])).upper() + ) + song.verse_order = u' '.join(new_order) + # Check if the verse order contains tags for verses which do not exist. + for order in new_order: + if order not in compare_order: + song.verse_order = u'' + break # The song does not have any author, add one. if not song.authors: name = SongStrings.AuthorUnknown diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 57e56aaf6..b95bff3dc 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -461,5 +461,5 @@ class SongMediaItem(MediaManagerItem): """ Locale aware collation of song titles """ - return locale.strcoll(unicode(song_1.title.lower()), + return locale.strcoll(unicode(song_1.title.lower()), unicode(song_2.title.lower())) diff --git a/openlp/plugins/songs/lib/sofimport.py b/openlp/plugins/songs/lib/sofimport.py index 37f3136e9..49ed5b569 100644 --- a/openlp/plugins/songs/lib/sofimport.py +++ b/openlp/plugins/songs/lib/sofimport.py @@ -309,7 +309,7 @@ class SofImport(OooImport): self.add_verse(lyrics, tag) if not self.is_chorus and u'C1' in self.verse_order_list_generated: self.verse_order_list_generated.append(u'C1') - self.verse_order_list_generated_useful = True + self.verse_order_list_generated_useful = True def uncap_text(self, text): """ diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index ea7a30e2f..c14354dcb 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -225,7 +225,7 @@ class SongImport(QtCore.QObject): self.verse_counts[verse_def[0]] = int(verse_def[1:]) self.verses.append([verse_def, verse_text.rstrip(), lang]) self.verse_order_list_generated.append(verse_def) - + def repeat_verse(self): """ Repeat the previous verse in the verse order diff --git a/openlp/plugins/songs/lib/songshowplusimport.py b/openlp/plugins/songs/lib/songshowplusimport.py index d69160faa..363bfaa98 100644 --- a/openlp/plugins/songs/lib/songshowplusimport.py +++ b/openlp/plugins/songs/lib/songshowplusimport.py @@ -131,7 +131,7 @@ class SongShowPlusImport(SongImport): lengthDescriptor, = struct.unpack("B", songData.read(1)) data = songData.read(lengthDescriptor) if blockKey == TITLE: - self.title = unicode(data, u'cp1252') + self.title = unicode(data, u'cp1252') elif blockKey == AUTHOR: authors = data.split(" / ") for author in authors: