From 7e18b8e3e6641342f32094b65130ddebabda371c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Wed, 16 Feb 2011 11:36:59 +0200 Subject: [PATCH 01/16] fix opensong order shuffling + refactoring --- openlp/plugins/songs/lib/opensongimport.py | 152 ++++++++++----------- openlp/plugins/songs/lib/songimport.py | 17 ++- 2 files changed, 83 insertions(+), 86 deletions(-) diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index 8c6d283e3..66ccdd3cc 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -149,23 +149,25 @@ class OpenSongImport(SongImport): unicode(translate('SongsPlugin.ImportWizardForm', 'Importing %s...')) % parts[-1]) songfile = z.open(song) - self.do_import_file(songfile) - if self.commit: + if self.do_import_file(songfile) and self.commit and \ + not self.stop_import_flag: self.finish() - if self.stop_import_flag: - success = False - break + else: + success = False + break else: # not a zipfile log.info(u'Direct import %s', filename) self.import_wizard.incrementProgressBar( unicode(translate('SongsPlugin.ImportWizardForm', 'Importing %s...')) % os.path.split(filename)[-1]) - file = open(filename) - self.do_import_file(file) - if self.commit: + songfile = open(filename) + if self.do_import_file(songfile) and self.commit and \ + not self.stop_import_flag: self.finish() - + else: + success = False + break return success def do_import_file(self, file): @@ -178,7 +180,7 @@ class OpenSongImport(SongImport): tree = objectify.parse(file) except (Error, LxmlError): log.exception(u'Error parsing XML') - return + return False root = tree.getroot() fields = dir(root) decode = { @@ -196,19 +198,22 @@ class OpenSongImport(SongImport): setattr(self, fn_or_string, ustring) else: fn_or_string(ustring) + if not len(self.title): + # to prevent creation of empty songs from wrong files + return False if u'theme' in fields and unicode(root.theme) not in self.topics: self.topics.append(unicode(root.theme)) if u'alttheme' in fields and unicode(root.alttheme) not in self.topics: self.topics.append(unicode(root.alttheme)) # data storage while importing verses = {} - # keep track of a "default" verse order, in case none is specified + # keep track of verses appearance order our_verse_order = [] - verses_seen = {} - # in the absence of any other indication, verses are the default, - # erm, versetype! - versetype = u'V' - versenum = None + # default versetype + vt = u'V' + vn = u'1' + # for the case where song has several sections with same marker + inst = 1 lyrics = unicode(root.lyrics) for thisline in lyrics.split(u'\n'): # remove comments @@ -216,14 +221,14 @@ class OpenSongImport(SongImport): if semicolon >= 0: thisline = thisline[:semicolon] thisline = thisline.strip() - if len(thisline) == 0: + if not len(thisline): continue - # skip inthisline guitar chords and page and column breaks - if thisline[0] == u'.' or thisline.startswith(u'---') \ + # skip guitar chords and page and column breaks + if thisline.startswith(u'.') or thisline.startswith(u'---') \ or thisline.startswith(u'-!!'): continue # verse/chorus/etc. marker - if thisline[0] == u'[': + if thisline.startswith(u'['): # drop the square brackets right_bracket = thisline.find(u']') content = thisline[1:right_bracket].upper() @@ -232,78 +237,63 @@ class OpenSongImport(SongImport): # to the end (even if there are some alpha chars on the end) match = re.match(u'(.*)(\d+.*)', content) if match is not None: - versetype = match.group(1) - versenum = match.group(2) + vt = match.group(1) + vn = match.group(2) else: # otherwise we assume number 1 and take the whole prefix as # the versetype - versetype = content - versenum = u'1' + vt = content + vn = u'1' + inst = 1 + if [vt, vn, inst] in our_verse_order and verses.has_key(vt) \ + and verses[vt].has_key(vn): + inst = len(verses[vt][vn])+1 + our_verse_order.append([vt, vn, inst]) continue - words = None # number at start of line.. it's verse number if thisline[0].isdigit(): - versenum = thisline[0] - words = thisline[1:].strip() - if words is None: - words = thisline - if not versenum: - versenum = u'1' - if versenum is not None: - versetag = u'%s%s' % (versetype, versenum) - if not verses.has_key(versetype): - verses[versetype] = {} - if not verses[versetype].has_key(versenum): - # storage for lines in this verse - verses[versetype][versenum] = [] - if not verses_seen.has_key(versetag): - verses_seen[versetag] = 1 - our_verse_order.append(versetag) + vn = thisline[0] + thisline = thisline[1:].strip() + our_verse_order.append([vt, vn, inst]) + if not verses.has_key(vt): + verses[vt] = {} + if not verses[vt].has_key(vn): + verses[vt][vn] = {} + if not verses[vt][vn].has_key(inst): + verses[vt][vn][inst] = [] if words: # Tidy text and remove the ____s from extended words - words = self.tidy_text(words) - words = words.replace('_', '') - verses[versetype][versenum].append(words) + thisline = self.tidy_text(thisline) + thisline = thisline.replace(u'_', u'') + thisline = thisline.replace(u'|', u'\n') + verses[vt][vn][inst].append(thisline) # done parsing - versetypes = verses.keys() - versetypes.sort() - versetags = {} - for versetype in versetypes: - our_verse_type = versetype - if our_verse_type == u'': - our_verse_type = u'V' - versenums = verses[versetype].keys() - versenums.sort() - for num in versenums: - versetag = u'%s%s' % (our_verse_type, num) - lines = u'\n'.join(verses[versetype][num]) - self.add_verse(lines, versetag) - # Keep track of what we have for error checking later - versetags[versetag] = 1 - # now figure out the presentation order - order = [] + # add verses in original order + for (vt, vn, inst) in our_verse_order: + vtag = u'%s%s' % (vt, vn) + lines = u'\n'.join(verses[vt][vn][inst]) + self.add_verse(lines, vtag) + # figure out the presentation order, if present if u'presentation' in fields and root.presentation != u'': order = unicode(root.presentation) # We make all the tags in the lyrics upper case, so match that here # and then split into a list on the whitespace order = order.upper().split() - else: - if len(our_verse_order) > 0: - order = our_verse_order - else: - log.warn(u'No verse order available for %s, skipping.', - self.title) - # TODO: make sure that the default order list will be overwritten, if - # the songs provides its own order list. - for tag in order: - if tag[0].isdigit(): - # Assume it's a verse if it has no prefix - tag = u'V' + tag - elif not re.search('\d+', tag): - # Assume it's no.1 if there's no digits - tag = tag + u'1' - if not versetags.has_key(tag): - log.info(u'Got order %s but not in versetags, dropping this' - u'item from presentation order', tag) - else: - self.verse_order_list.append(tag) + for tag in order: + match = re.match(u'(.*)(\d+.*)', tag) + if match is not None: + vt = match.group(1) + vn = match.group(2) + if not len(vt): + vt = u'V' + else: + # Assume it's no.1 if there are no digits + vt = tag + vn = u'1' + vtagString = u'%s%s' % (vt, vn) + if verses.has_key(vt) and verses[vt].has_key(vn): + self.verse_order_list.append(vtagString) + else: + log.info(u'Got order %s but not in versetags, dropping' + u'this item from presentation order', vtagString) + return True diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index da017d4f5..ca54009cb 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -75,6 +75,8 @@ class SongImport(QtCore.QObject): self.media_files = [] self.song_book_name = u'' self.song_book_pub = u'' + self.verse_order_list_generated_useful = False + self.verse_order_list_generated = [] self.verse_order_list = [] self.verses = [] self.versecounts = {} @@ -217,7 +219,8 @@ class SongImport(QtCore.QObject): """ for (oldversetag, oldverse, oldlang) in self.verses: if oldverse.strip() == versetext.strip(): - self.verse_order_list.append(oldversetag) + self.verse_order_list_generated.append(oldversetag) + self.verse_order_list_generated_useful = True return if versetag[0] in self.versecounts: self.versecounts[versetag[0]] += 1 @@ -228,15 +231,15 @@ class SongImport(QtCore.QObject): elif int(versetag[1:]) > self.versecounts[versetag[0]]: self.versecounts[versetag[0]] = int(versetag[1:]) self.verses.append([versetag, versetext.rstrip(), lang]) - self.verse_order_list.append(versetag) - if versetag.startswith(u'V') and u'C1' in self.verse_order_list: - self.verse_order_list.append(u'C1') + self.verse_order_list_generated.append(versetag) def repeat_verse(self): """ Repeat the previous verse in the verse order """ - self.verse_order_list.append(self.verse_order_list[-1]) + self.verse_order_list_generated.append( + self.verse_order_list_generated[-1]) + self.verse_order_list_generated_useful = True def check_complete(self): """ @@ -297,6 +300,9 @@ class SongImport(QtCore.QObject): song.search_lyrics += u' ' + self.remove_punctuation(versetext) song.search_lyrics = song.search_lyrics.lower() song.lyrics = unicode(sxml.extract_xml(), u'utf-8') + if not len(self.verse_order_list) and \ + self.verse_order_list_generated_useful: + self.verse_order_list = self.verse_order_list_generated for i, current_verse_tag in enumerate(self.verse_order_list): if verses_changed_to_other.has_key(current_verse_tag): self.verse_order_list[i] = \ @@ -348,6 +354,7 @@ class SongImport(QtCore.QObject): for (versetag, versetext, lang) in self.verses: print u'VERSE ' + versetag + u': ' + versetext print u'ORDER: ' + u' '.join(self.verse_order_list) + print u'GENERATED ORDER: ' + u' '.join(self.verse_order_list_generated) for author in self.authors: print u'AUTHOR: ' + author if self.copyright: From 31fbb999f912063a81c0b9e2e1a7cdc97071d083 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Wed, 16 Feb 2011 11:43:07 +0200 Subject: [PATCH 02/16] forgot one --- openlp/plugins/songs/lib/opensongimport.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index 66ccdd3cc..83a26249a 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -261,12 +261,11 @@ class OpenSongImport(SongImport): verses[vt][vn] = {} if not verses[vt][vn].has_key(inst): verses[vt][vn][inst] = [] - if words: - # Tidy text and remove the ____s from extended words - thisline = self.tidy_text(thisline) - thisline = thisline.replace(u'_', u'') - thisline = thisline.replace(u'|', u'\n') - verses[vt][vn][inst].append(thisline) + # Tidy text and remove the ____s from extended words + thisline = self.tidy_text(thisline) + thisline = thisline.replace(u'_', u'') + thisline = thisline.replace(u'|', u'\n') + verses[vt][vn][inst].append(thisline) # done parsing # add verses in original order for (vt, vn, inst) in our_verse_order: From cd431652caab01542a020a2938e40a16b041e556 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Wed, 16 Feb 2011 12:20:25 +0200 Subject: [PATCH 03/16] no translation for song tags in database --- openlp/plugins/songs/lib/songimport.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index ca54009cb..8c3457ebf 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -138,12 +138,12 @@ class SongImport(QtCore.QObject): def process_verse_text(self, text): lines = text.split(u'\n') if text.lower().find(self.copyright_string) >= 0 \ - or text.lower().find(self.copyright_symbol) >= 0: + or text.find(self.copyright_symbol) >= 0: copyright_found = False for line in lines: if (copyright_found or line.lower().find(self.copyright_string) >= 0 or - line.lower().find(self.copyright_symbol) >= 0): + line.find(self.copyright_symbol) >= 0): copyright_found = True self.add_copyright(line) else: @@ -219,6 +219,7 @@ class SongImport(QtCore.QObject): """ for (oldversetag, oldverse, oldlang) in self.verses: if oldverse.strip() == versetext.strip(): + # this verse is already present self.verse_order_list_generated.append(oldversetag) self.verse_order_list_generated_useful = True return @@ -278,17 +279,17 @@ class SongImport(QtCore.QObject): other_count = 1 for (versetag, versetext, lang) in self.verses: if versetag[0] == u'C': - versetype = VerseType.to_string(VerseType.Chorus) + versetype = u'Chorus' elif versetag[0] == u'V': - versetype = VerseType.to_string(VerseType.Verse) + versetype = u'Verse' elif versetag[0] == u'B': - versetype = VerseType.to_string(VerseType.Bridge) + versetype = u'Bridge' elif versetag[0] == u'I': - versetype = VerseType.to_string(VerseType.Intro) + versetype = u'Intro' elif versetag[0] == u'P': - versetype = VerseType.to_string(VerseType.PreChorus) + versetype = u'Pre-Chorus' elif versetag[0] == u'E': - versetype = VerseType.to_string(VerseType.Ending) + versetype = u'Ending' else: newversetag = u'O%d' % other_count verses_changed_to_other[versetag] = newversetag From 04a90fe42bc70ee82f06d0f394eb65aff4f59512 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Wed, 16 Feb 2011 16:51:40 +0200 Subject: [PATCH 04/16] longer variable names --- openlp/plugins/songs/lib/opensongimport.py | 62 +++++++++++----------- 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index 83a26249a..29648214e 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -210,8 +210,8 @@ class OpenSongImport(SongImport): # keep track of verses appearance order our_verse_order = [] # default versetype - vt = u'V' - vn = u'1' + versetype = u'V' + versenum = u'1' # for the case where song has several sections with same marker inst = 1 lyrics = unicode(root.lyrics) @@ -237,40 +237,41 @@ class OpenSongImport(SongImport): # to the end (even if there are some alpha chars on the end) match = re.match(u'(.*)(\d+.*)', content) if match is not None: - vt = match.group(1) - vn = match.group(2) + versetype = match.group(1) + versenum = match.group(2) else: # otherwise we assume number 1 and take the whole prefix as # the versetype - vt = content - vn = u'1' + versetype = content + versenum = u'1' inst = 1 - if [vt, vn, inst] in our_verse_order and verses.has_key(vt) \ - and verses[vt].has_key(vn): - inst = len(verses[vt][vn])+1 - our_verse_order.append([vt, vn, inst]) + if [versetype, versenum, inst] in our_verse_order \ + and verses.has_key(versetype) \ + and verses[versetype].has_key(versenum): + inst = len(verses[versetype][versenum])+1 + our_verse_order.append([versetype, versenum, inst]) continue # number at start of line.. it's verse number if thisline[0].isdigit(): - vn = thisline[0] + versenum = thisline[0] thisline = thisline[1:].strip() - our_verse_order.append([vt, vn, inst]) - if not verses.has_key(vt): - verses[vt] = {} - if not verses[vt].has_key(vn): - verses[vt][vn] = {} - if not verses[vt][vn].has_key(inst): - verses[vt][vn][inst] = [] + our_verse_order.append([versetype, versenum, inst]) + if not verses.has_key(versetype): + verses[versetype] = {} + if not verses[versetype].has_key(versenum): + verses[versetype][versenum] = {} + if not verses[versetype][versenum].has_key(inst): + verses[versetype][versenum][inst] = [] # Tidy text and remove the ____s from extended words thisline = self.tidy_text(thisline) thisline = thisline.replace(u'_', u'') thisline = thisline.replace(u'|', u'\n') - verses[vt][vn][inst].append(thisline) + verses[versetype][versenum][inst].append(thisline) # done parsing # add verses in original order - for (vt, vn, inst) in our_verse_order: - vtag = u'%s%s' % (vt, vn) - lines = u'\n'.join(verses[vt][vn][inst]) + for (versetype, versenum, inst) in our_verse_order: + vtag = u'%s%s' % (versetype, versenum) + lines = u'\n'.join(verses[versetype][versenum][inst]) self.add_verse(lines, vtag) # figure out the presentation order, if present if u'presentation' in fields and root.presentation != u'': @@ -281,16 +282,17 @@ class OpenSongImport(SongImport): for tag in order: match = re.match(u'(.*)(\d+.*)', tag) if match is not None: - vt = match.group(1) - vn = match.group(2) - if not len(vt): - vt = u'V' + versetype = match.group(1) + versenum = match.group(2) + if not len(versetype): + versetype = u'V' else: # Assume it's no.1 if there are no digits - vt = tag - vn = u'1' - vtagString = u'%s%s' % (vt, vn) - if verses.has_key(vt) and verses[vt].has_key(vn): + versetype = tag + versenum = u'1' + vtagString = u'%s%s' % (versetype, versenum) + if verses.has_key(versetype) \ + and verses[versetype].has_key(versenum): self.verse_order_list.append(vtagString) else: log.info(u'Got order %s but not in versetags, dropping' From 175bfd2f97a7bb62a086e9a86a4f1faead832783 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Wed, 16 Feb 2011 19:09:35 +0200 Subject: [PATCH 05/16] change back, leave massive change for later --- openlp/plugins/songs/lib/songimport.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 8c3457ebf..ad18b57ef 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -279,17 +279,17 @@ class SongImport(QtCore.QObject): other_count = 1 for (versetag, versetext, lang) in self.verses: if versetag[0] == u'C': - versetype = u'Chorus' + versetype = VerseType.to_string(VerseType.Chorus) elif versetag[0] == u'V': - versetype = u'Verse' + versetype = VerseType.to_string(VerseType.Verse) elif versetag[0] == u'B': - versetype = u'Bridge' + versetype = VerseType.to_string(VerseType.Bridge) elif versetag[0] == u'I': - versetype = u'Intro' + versetype = VerseType.to_string(VerseType.Intro) elif versetag[0] == u'P': - versetype = u'Pre-Chorus' + versetype = VerseType.to_string(VerseType.PreChorus) elif versetag[0] == u'E': - versetype = u'Ending' + versetype = VerseType.to_string(VerseType.Ending) else: newversetag = u'O%d' % other_count verses_changed_to_other[versetag] = newversetag From 89181e387dfa9193cccb8190eb52101a52c26716 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Wed, 16 Feb 2011 20:37:51 +0200 Subject: [PATCH 06/16] VerseType changes --- openlp/plugins/songs/lib/__init__.py | 161 +++++++++++++++++++-------- 1 file changed, 115 insertions(+), 46 deletions(-) diff --git a/openlp/plugins/songs/lib/__init__.py b/openlp/plugins/songs/lib/__init__.py index c763d70b9..4adeb5345 100644 --- a/openlp/plugins/songs/lib/__init__.py +++ b/openlp/plugins/songs/lib/__init__.py @@ -39,69 +39,138 @@ class VerseType(object): Intro = 4 Ending = 5 Other = 6 + Tags = [ + u'v', + u'c', + u'b', + u'p', + u'i', + u'e', + u'o'] + Names = [ + u'Verse', + u'Chorus', + u'Bridge', + u'Pre-Chorus', + u'Intro', + u'Ending', + u'Other'] + Translations = [ + translate('SongsPlugin.VerseType', 'Verse'), + translate('SongsPlugin.VerseType', 'Chorus'), + translate('SongsPlugin.VerseType', 'Bridge'), + translate('SongsPlugin.VerseType', 'Pre-Chorus'), + translate('SongsPlugin.VerseType', 'Intro'), + translate('SongsPlugin.VerseType', 'Ending'), + translate('SongsPlugin.VerseType', 'Other')] @staticmethod - def to_string(verse_type): + def tag(verse_type, strict=False): """ - Return a string for a given VerseType + Return a string for a given VerseType tag + + ``verse_type`` + The verse type to return a string for + + ``strict`` + If strict, False is returned instead of Other, when not found + """ + if isinstance(verse_type, int): + if verse_type >=0 and verse_type <= 6: + return VerseType.Tags[verse_type] + else: + return self.returnvalue(VerseType.Tags, strict) + elif verse_type[0].lower() in VerseType.Tags: + return verse_type[0].lower() + else: + return VerseType.returnvalue(VerseType.Tags, strict) + + @staticmethod + def to_string(verse_type, strict=False): + """ + Return a string for a given VerseType Name ``verse_type`` The type to return a string for + + ``strict`` + If strict, False is returned instead of Other, when not found """ - if not isinstance(verse_type, int): - verse_type = verse_type.lower() - if verse_type == VerseType.Verse or verse_type == \ - unicode(VerseType.to_string(VerseType.Verse)).lower()[0]: - return translate('SongsPlugin.VerseType', 'Verse') - elif verse_type == VerseType.Chorus or verse_type == \ - unicode(VerseType.to_string(VerseType.Chorus)).lower()[0]: - return translate('SongsPlugin.VerseType', 'Chorus') - elif verse_type == VerseType.Bridge or verse_type == \ - unicode(VerseType.to_string(VerseType.Bridge)).lower()[0]: - return translate('SongsPlugin.VerseType', 'Bridge') - elif verse_type == VerseType.PreChorus or verse_type == \ - unicode(VerseType.to_string(VerseType.PreChorus)).lower()[0]: - return translate('SongsPlugin.VerseType', 'Pre-Chorus') - elif verse_type == VerseType.Intro or verse_type == \ - unicode(VerseType.to_string(VerseType.Intro)).lower()[0]: - return translate('SongsPlugin.VerseType', 'Intro') - elif verse_type == VerseType.Ending or verse_type == \ - unicode(VerseType.to_string(VerseType.Ending)).lower()[0]: - return translate('SongsPlugin.VerseType', 'Ending') - elif verse_type == VerseType.Other or verse_type == \ - unicode(VerseType.to_string(VerseType.Other)).lower()[0]: - return translate('SongsPlugin.VerseType', 'Other') + if isinstance(verse_type, int): + if verse_type >=0 and verse_type <= 6: + return VerseType.Names[verse_type] + else: + return self.returnvalue(VerseType.Names, strict) + else: + verse_type = verse_type[0].lower() + for num, tag in enumerate(VerseType.Tags): + if verse_type == tag: + return VerseType.Names[num] + return VerseType.returnvalue(VerseType.Names, strict) @staticmethod - def from_string(verse_type): + def to_translated_string(verse_type, strict=False): + """ + Return a string for a given VerseType Name + + ``verse_type`` + The type to return a string for + + ``strict`` + If strict, False is returned instead of Other, when not found + """ + if isinstance(verse_type, int): + if verse_type >=0 and verse_type <= 6: + return VerseType.Translations[verse_type] + else: + return self.returnvalue(VerseType.Translations, strict) + else: + verse_type = verse_type[0].lower() + for num, tag in enumerate(VerseType.Tags): + if verse_type == tag: + return VerseType.Translations[num] + return VerseType.returnvalue(VerseType.Translations, strict) + + @staticmethod + def from_string(verse_type, strict=False): """ Return the VerseType for a given string ``verse_type`` The string to return a VerseType for + + ``strict`` + If strict, False is returned instead of Other, when not found """ verse_type = verse_type.lower() - if verse_type == unicode(VerseType.to_string(VerseType.Verse)).lower(): - return VerseType.Verse - elif verse_type == \ - unicode(VerseType.to_string(VerseType.Chorus)).lower(): - return VerseType.Chorus - elif verse_type == \ - unicode(VerseType.to_string(VerseType.Bridge)).lower(): - return VerseType.Bridge - elif verse_type == \ - unicode(VerseType.to_string(VerseType.PreChorus)).lower(): - return VerseType.PreChorus - elif verse_type == \ - unicode(VerseType.to_string(VerseType.Intro)).lower(): - return VerseType.Intro - elif verse_type == \ - unicode(VerseType.to_string(VerseType.Ending)).lower(): - return VerseType.Ending - elif verse_type == \ - unicode(VerseType.to_string(VerseType.Other)).lower(): - return VerseType.Other + for num, string in enumerate(VerseType.Names): + if verse_type == string: + return num + return VerseType.returnvalue(range(0,7), strict) + @staticmethod + def from_translated_string(verse_type, strict=False): + """ + Return the VerseType for a given string + + ``verse_type`` + The string to return a VerseType for + + ``strict`` + If strict, False is returned instead of Other, when not found + """ + verse_type = verse_type.lower() + for num, translation in enumerate(VerseType.Translations): + if verse_type == translation: + return num + return VerseType.returnvalue(range(0,7), strict) + + @staticmethod + def returnvalue(lst, strict): + if strict: + return False + else: + return lst[VerseType.Other] def retrieve_windows_encoding(recommendation=None): """ From 425ec8ece0636ac0ec66135c9bd109ecf9ee1db1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Wed, 16 Feb 2011 21:09:06 +0200 Subject: [PATCH 07/16] more changes reflecting VerseType changes --- openlp/plugins/songs/lib/opensongimport.py | 4 ++-- openlp/plugins/songs/lib/songimport.py | 21 ++++++--------------- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index 29648214e..320339f36 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -210,7 +210,7 @@ class OpenSongImport(SongImport): # keep track of verses appearance order our_verse_order = [] # default versetype - versetype = u'V' + versetype = u'v' versenum = u'1' # for the case where song has several sections with same marker inst = 1 @@ -285,7 +285,7 @@ class OpenSongImport(SongImport): versetype = match.group(1) versenum = match.group(2) if not len(versetype): - versetype = u'V' + versetype = u'v' else: # Assume it's no.1 if there are no digits versetype = tag diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index ad18b57ef..f4a43c3b4 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -200,7 +200,7 @@ class SongImport(QtCore.QObject): return self.media_files.append(filename) - def add_verse(self, versetext, versetag=u'V', lang=None): + def add_verse(self, versetext, versetag=u'v', lang=None): """ Add a verse. This is the whole verse, lines split by \\n. It will also attempt to detect duplicates. In this case it will just add to the verse @@ -278,23 +278,14 @@ class SongImport(QtCore.QObject): sxml = SongXML() other_count = 1 for (versetag, versetext, lang) in self.verses: - if versetag[0] == u'C': - versetype = VerseType.to_string(VerseType.Chorus) - elif versetag[0] == u'V': - versetype = VerseType.to_string(VerseType.Verse) - elif versetag[0] == u'B': - versetype = VerseType.to_string(VerseType.Bridge) - elif versetag[0] == u'I': - versetype = VerseType.to_string(VerseType.Intro) - elif versetag[0] == u'P': - versetype = VerseType.to_string(VerseType.PreChorus) - elif versetag[0] == u'E': - versetype = VerseType.to_string(VerseType.Ending) + if versetag[0].lower() in VerseType.Tags: + versetype = versetag[0].lower() else: - newversetag = u'O%d' % other_count + newversetag = u'%s%d' % (VerseType.Tags[VerseType.Other], + other_count) verses_changed_to_other[versetag] = newversetag other_count += 1 - versetype = VerseType.to_string(VerseType.Other) + versetype = VerseType.Tags[VerseType.Other] log.info(u'Versetype %s changing to %s' , versetag, newversetag) versetag = newversetag sxml.add_verse_to_lyrics(versetype, versetag[1:], versetext, lang) From 18f43fc8589df13160085a37b0cc447d9984bc12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Wed, 16 Feb 2011 21:28:55 +0200 Subject: [PATCH 08/16] more lower case tags --- openlp/plugins/songs/lib/opensongimport.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index 320339f36..36d46b903 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -231,7 +231,7 @@ class OpenSongImport(SongImport): if thisline.startswith(u'['): # drop the square brackets right_bracket = thisline.find(u']') - content = thisline[1:right_bracket].upper() + content = thisline[1:right_bracket].lower() # have we got any digits? # If so, versenumber is everything from the digits # to the end (even if there are some alpha chars on the end) @@ -276,9 +276,9 @@ class OpenSongImport(SongImport): # figure out the presentation order, if present if u'presentation' in fields and root.presentation != u'': order = unicode(root.presentation) - # We make all the tags in the lyrics upper case, so match that here + # We make all the tags in the lyrics lower case, so match that here # and then split into a list on the whitespace - order = order.upper().split() + order = order.lower().split() for tag in order: match = re.match(u'(.*)(\d+.*)', tag) if match is not None: From 02c1bd441332c9b7c53044d12a3d93e7f7749df1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Thu, 17 Feb 2011 17:05:58 +0200 Subject: [PATCH 09/16] first working example with unilanguage tags handling --- openlp/plugins/songs/forms/editsongform.py | 72 +++++++++-- openlp/plugins/songs/forms/editversedialog.py | 14 +-- openlp/plugins/songs/forms/editverseform.py | 30 +++-- openlp/plugins/songs/lib/__init__.py | 115 ++++++++++-------- openlp/plugins/songs/lib/mediaitem.py | 16 ++- 5 files changed, 161 insertions(+), 86 deletions(-) diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index 39f1ba256..7ff129de8 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -228,7 +228,14 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.verseListWidget.clear() self.verseListWidget.setRowCount(0) if self.song.verse_order: - self.verseOrderEdit.setText(self.song.verse_order) + # we translate verse order + translated = [] + for verse in self.song.verse_order.split(): + verseindex = VerseType.from_tag(verse[0]) + versetype = VerseType.Translations[verseindex][0] + versetag = verse[1:] + translated.append(u'%s%s' % (versetype, versetag)) + self.verseOrderEdit.setText(u' '.join(translated)) else: self.verseOrderEdit.setText(u'') if self.song.comments: @@ -256,6 +263,20 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): for count, verse in enumerate(verseList): self.verseListWidget.setRowCount( self.verseListWidget.rowCount() + 1) + # this takes care of silently migrating from old or any markup + # if we entirely trusted the database, this should + # be unnecessary in the future + vtype = verse[0][u'type'] + index = None + if len(vtype) > 1: + index = VerseType.from_translated_string(vtype) + if index is None: + index = VerseType.from_string(vtype) + if index is None: + index = VerseType.from_tag(vtype) + if index is None: + index = VerseType.Other + verse[0][u'type'] = VerseType.Tags[index] variant = u'%s:%s' % (verse[0][u'type'], verse[0][u'label']) item = QtGui.QTableWidgetItem(verse[1]) item.setData(QtCore.Qt.UserRole, QtCore.QVariant(variant)) @@ -267,7 +288,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.verseListWidget.rowCount() + 1) item = QtGui.QTableWidgetItem(verse) variant = u'%s:%s' % \ - (VerseType.to_string(VerseType.Verse), unicode(count + 1)) + (VerseType.Tags[VerseType.Verse], unicode(count + 1)) item.setData(QtCore.Qt.UserRole, QtCore.QVariant(variant)) self.verseListWidget.setItem(count, 0, item) self.verseListWidget.resizeRowsToContents() @@ -299,7 +320,8 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): item = self.verseListWidget.item(row, 0) data = unicode(item.data(QtCore.Qt.UserRole).toString()) bit = data.split(u':') - rowTag = u'%s%s' % (bit[0][0:1], bit[1]) + bit[0] = VerseType.Translations[VerseType.from_tag(bit[0])][0] + rowTag = u'%s%s' % (bit[0], bit[1]) rowLabel.append(rowTag) self.verseListWidget.setVerticalHeaderLabels(rowLabel) @@ -467,7 +489,9 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): for row in range(0, self.verseListWidget.rowCount()): item = self.verseListWidget.item(row, 0) field = unicode(item.data(QtCore.Qt.UserRole).toString()) - verse_list += u'---[%s]---\n' % field + versetype, versenum = field.split(u':') + versetype = VerseType.to_translated_string(versetype) + verse_list += u'---[%s:%s]---\n' % (versetype, versenum) verse_list += item.text() verse_list += u'\n' self.verse_form.setVerse(verse_list) @@ -483,9 +507,18 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): for count, parts in enumerate(match.split(u']---\n')): if len(parts) > 1: if count == 0: - # make sure the tag is correctly cased - variant = u'%s%s' % \ - (parts[0:1].upper(), parts[1:].lower()) + # handling carefully user inputted versetags + separator = parts.find(u':') + if separator >= 0: + verse = parts[0:separator].strip() + subVerse = parts[separator+1:].strip() + else: + verse = parts + verseIndex = VerseType.from_loose_input(verse) + verseType = VerseType.Tags[verseIndex] + if not len(subVerse): + subVerse = u'1' + variant = u'%s:%s' % (verseType, subVerse) else: if parts.endswith(u'\n'): parts = parts.rstrip(u'\n') @@ -543,9 +576,13 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): order_names = unicode(self.verseOrderEdit.text()).split() for item in order_names: if len(item) == 1: - order.append(item.lower() + u'1') + order.append(VerseType.Tags[VerseType.from_translated_tag( + item)] + u'1') else: - order.append(item.lower()) + versetag = VerseType.Tags[ + VerseType.from_translated_tag(item[0])] + versenum = item[1:].lower() + order.append(u'%s%s' % (versetag, versenum)) verses = [] verse_names = [] for index in range (0, self.verseListWidget.rowCount()): @@ -561,7 +598,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.verseOrderEdit.setFocus() valid = verses.pop(0) for verse in verses: - valid = valid + u', ' + verse + valid = valid + u', ' + verse.upper() critical_error_message_box( message=unicode(translate('SongsPlugin.EditSongForm', 'The verse order is invalid. There is no verse ' @@ -572,12 +609,16 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): if verse not in order: self.songTabWidget.setCurrentIndex(0) self.verseOrderEdit.setFocus() + versetype, versenum = verse_names[count].split(u':') + verseindex = VerseType.from_tag(versetype) + versetype = VerseType.Translations[verseindex][0] + versename = u'%s%s' % (versetype, versenum) answer = QtGui.QMessageBox.warning(self, translate('SongsPlugin.EditSongForm', 'Warning'), unicode(translate('SongsPlugin.EditSongForm', 'You have not used %s anywhere in the verse ' 'order. Are you sure you want to save the song ' - 'like this?')) % verse_names[count].replace(u':', u' '), + 'like this?')) % versename, QtGui.QMessageBox.Yes | QtGui.QMessageBox.No) if answer == QtGui.QMessageBox.No: return False @@ -684,7 +725,14 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): else: self.song.search_title = self.song.title self.song.comments = unicode(self.commentsEdit.toPlainText()) - self.song.verse_order = unicode(self.verseOrderEdit.text()) + ordertext = unicode(self.verseOrderEdit.text()) + order = [] + for item in ordertext.split(): + versetag = VerseType.Tags[ + VerseType.from_translated_tag(item[0])] + versenum = item[1:].lower() + order.append(u'%s%s' % (versetag, versenum)) + self.song.verse_order = u' '.join(order) self.song.ccli_number = unicode(self.CCLNumberEdit.text()) self.song.song_number = unicode(self.songBookNumberEdit.text()) book_name = unicode(self.songBookComboBox.currentText()) diff --git a/openlp/plugins/songs/forms/editversedialog.py b/openlp/plugins/songs/forms/editversedialog.py index 7caf782e6..fe857e12a 100644 --- a/openlp/plugins/songs/forms/editversedialog.py +++ b/openlp/plugins/songs/forms/editversedialog.py @@ -71,18 +71,18 @@ class Ui_EditVerseDialog(object): self.verseTypeLabel.setText( translate('SongsPlugin.EditVerseForm', '&Verse type:')) self.verseTypeComboBox.setItemText(0, - VerseType.to_string(VerseType.Verse)) + VerseType.Translations[VerseType.Verse]) self.verseTypeComboBox.setItemText(1, - VerseType.to_string(VerseType.Chorus)) + VerseType.Translations[VerseType.Chorus]) self.verseTypeComboBox.setItemText(2, - VerseType.to_string(VerseType.Bridge)) + VerseType.Translations[VerseType.Bridge]) self.verseTypeComboBox.setItemText(3, - VerseType.to_string(VerseType.PreChorus)) + VerseType.Translations[VerseType.PreChorus]) self.verseTypeComboBox.setItemText(4, - VerseType.to_string(VerseType.Intro)) + VerseType.Translations[VerseType.Intro]) self.verseTypeComboBox.setItemText(5, - VerseType.to_string(VerseType.Ending)) + VerseType.Translations[VerseType.Ending]) self.verseTypeComboBox.setItemText(6, - VerseType.to_string(VerseType.Other)) + VerseType.Translations[VerseType.Other]) self.insertButton.setText( translate('SongsPlugin.EditVerseForm', '&Insert')) diff --git a/openlp/plugins/songs/forms/editverseform.py b/openlp/plugins/songs/forms/editverseform.py index e67e0733a..bb9d9e906 100644 --- a/openlp/plugins/songs/forms/editverseform.py +++ b/openlp/plugins/songs/forms/editverseform.py @@ -57,7 +57,7 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): QtCore.QObject.connect(self.verseTypeComboBox, QtCore.SIGNAL(u'currentIndexChanged(int)'), self.onVerseTypeComboBoxChanged) - self.verse_regex = re.compile(r'---\[([-\w]+):([\d]+)\]---') + self.verse_regex = re.compile(r'---\[(.+):(.+)\]---') def contextMenu(self, point): item = self.serviceManagerList.itemAt(point) @@ -70,8 +70,8 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): def onInsertButtonClicked(self): verse_type = self.verseTypeComboBox.currentIndex() - if VerseType.to_string(verse_type) is not None: - self.insertVerse(VerseType.to_string(verse_type), + if VerseType.to_translated_string(verse_type) is not None: + self.insertVerse(VerseType.to_translated_string(verse_type), self.verseNumberBox.value()) def onVerseTypeComboBoxChanged(self): @@ -81,7 +81,8 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): """ position = self.verseTextEdit.textCursor().position() text = unicode(self.verseTextEdit.toPlainText()) - verse_type = VerseType.to_string(self.verseTypeComboBox.currentIndex()) + verse_type = VerseType.Translations[ + self.verseTypeComboBox.currentIndex()] if not text: return position = text.rfind(u'---[%s' % verse_type, 0, position) @@ -97,7 +98,11 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): if match: verse_type = match.group(1) verse_number = int(match.group(2)) - verse_type_index = VerseType.from_string(verse_type) + verse_type_index = VerseType.from_translated_string(verse_type) + if verse_type_index is None: + verse_type_index = VerseType.from_string(verse_type) + if verse_type_index is None: + verse_type_index = VerseType.from_tag(verse_type) if verse_type_index is not None: self.verseNumberBox.setValue(verse_number) @@ -125,24 +130,25 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): if match: verse_type = match.group(1) verse_number = int(match.group(2)) - verse_type_index = VerseType.from_string(verse_type) + verse_type_index = VerseType.from_loose_input(verse_type) if verse_type_index is not None: self.verseTypeComboBox.setCurrentIndex(verse_type_index) self.verseNumberBox.setValue(verse_number) def setVerse(self, text, single=False, - tag=u'%s:1' % VerseType.to_string(VerseType.Verse)): + tag=u'%s:1' % VerseType.tag(VerseType.Verse)): self.hasSingleVerse = single if single: verse_type, verse_number = tag.split(u':') - verse_type_index = VerseType.from_string(verse_type) + verse_type_index = VerseType.from_tag(verse_type) if verse_type_index is not None: self.verseTypeComboBox.setCurrentIndex(verse_type_index) self.verseNumberBox.setValue(int(verse_number)) self.insertButton.setVisible(False) else: if not text: - text = u'---[%s:1]---\n' % VerseType.to_string(VerseType.Verse) + text = u'---[%s:1]---\n' % \ + VerseType.to_translated_string(VerseType.Verse) self.verseTypeComboBox.setCurrentIndex(0) self.verseNumberBox.setValue(1) self.insertButton.setVisible(True) @@ -152,14 +158,14 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): def getVerse(self): return self.verseTextEdit.toPlainText(), \ - VerseType.to_string(self.verseTypeComboBox.currentIndex()), \ + VerseType.Tags[self.verseTypeComboBox.currentIndex()], \ unicode(self.verseNumberBox.value()) def getVerseAll(self): text = self.verseTextEdit.toPlainText() if not text.startsWith(u'---['): - text = u'---[%s:1]---\n%s' % (VerseType.to_string(VerseType.Verse), - text) + text = u'---[%s:1]---\n%s' % \ + (VerseType.to_translated_string(VerseType.Verse), text) return text def accept(self): diff --git a/openlp/plugins/songs/lib/__init__.py b/openlp/plugins/songs/lib/__init__.py index 4adeb5345..7853f6c61 100644 --- a/openlp/plugins/songs/lib/__init__.py +++ b/openlp/plugins/songs/lib/__init__.py @@ -56,121 +56,138 @@ class VerseType(object): u'Ending', u'Other'] Translations = [ - translate('SongsPlugin.VerseType', 'Verse'), - translate('SongsPlugin.VerseType', 'Chorus'), - translate('SongsPlugin.VerseType', 'Bridge'), - translate('SongsPlugin.VerseType', 'Pre-Chorus'), - translate('SongsPlugin.VerseType', 'Intro'), - translate('SongsPlugin.VerseType', 'Ending'), - translate('SongsPlugin.VerseType', 'Other')] + unicode(translate('SongsPlugin.VerseType', 'Verse')), + unicode(translate('SongsPlugin.VerseType', 'Chorus')), + unicode(translate('SongsPlugin.VerseType', 'Bridge')), + unicode(translate('SongsPlugin.VerseType', 'Pre-Chorus')), + unicode(translate('SongsPlugin.VerseType', 'Intro')), + unicode(translate('SongsPlugin.VerseType', 'Ending')), + unicode(translate('SongsPlugin.VerseType', 'Other'))] @staticmethod - def tag(verse_type, strict=False): + def tag(verse_type): """ Return a string for a given VerseType tag ``verse_type`` The verse type to return a string for - - ``strict`` - If strict, False is returned instead of Other, when not found """ if isinstance(verse_type, int): - if verse_type >=0 and verse_type <= 6: + try: return VerseType.Tags[verse_type] - else: - return self.returnvalue(VerseType.Tags, strict) + except: + return elif verse_type[0].lower() in VerseType.Tags: return verse_type[0].lower() - else: - return VerseType.returnvalue(VerseType.Tags, strict) @staticmethod - def to_string(verse_type, strict=False): + def to_string(verse_type): """ Return a string for a given VerseType Name ``verse_type`` The type to return a string for - - ``strict`` - If strict, False is returned instead of Other, when not found """ if isinstance(verse_type, int): - if verse_type >=0 and verse_type <= 6: + try: return VerseType.Names[verse_type] - else: - return self.returnvalue(VerseType.Names, strict) + except: + return else: verse_type = verse_type[0].lower() for num, tag in enumerate(VerseType.Tags): if verse_type == tag: return VerseType.Names[num] - return VerseType.returnvalue(VerseType.Names, strict) @staticmethod - def to_translated_string(verse_type, strict=False): + def to_translated_string(verse_type): """ Return a string for a given VerseType Name ``verse_type`` The type to return a string for - - ``strict`` - If strict, False is returned instead of Other, when not found """ if isinstance(verse_type, int): - if verse_type >=0 and verse_type <= 6: + try: return VerseType.Translations[verse_type] - else: - return self.returnvalue(VerseType.Translations, strict) + except: + return else: verse_type = verse_type[0].lower() for num, tag in enumerate(VerseType.Tags): if verse_type == tag: return VerseType.Translations[num] - return VerseType.returnvalue(VerseType.Translations, strict) @staticmethod - def from_string(verse_type, strict=False): + def from_tag(verse_type): + """ + Return the VerseType for a given tag + + ``verse_type`` + The string to return a VerseType for + """ + verse_type = verse_type[0].lower() + for num, string in enumerate(VerseType.Tags): + if verse_type == string: + return num + + @staticmethod + def from_translated_tag(verse_type): + """ + Return the VerseType for a given tag + + ``verse_type`` + The string to return a VerseType for + """ + verse_type = verse_type[0].lower() + for num, string in enumerate(VerseType.Translations): + if verse_type == string[0].lower(): + return num + + @staticmethod + def from_string(verse_type): """ Return the VerseType for a given string ``verse_type`` The string to return a VerseType for - - ``strict`` - If strict, False is returned instead of Other, when not found """ verse_type = verse_type.lower() for num, string in enumerate(VerseType.Names): - if verse_type == string: + if verse_type == string.lower(): return num - return VerseType.returnvalue(range(0,7), strict) @staticmethod - def from_translated_string(verse_type, strict=False): + def from_translated_string(verse_type): """ Return the VerseType for a given string ``verse_type`` The string to return a VerseType for - - ``strict`` - If strict, False is returned instead of Other, when not found """ verse_type = verse_type.lower() for num, translation in enumerate(VerseType.Translations): - if verse_type == translation: + if verse_type == translation.lower(): return num - return VerseType.returnvalue(range(0,7), strict) @staticmethod - def returnvalue(lst, strict): - if strict: - return False - else: - return lst[VerseType.Other] + def from_loose_input(verse_type): + """ + Return the VerseType for a given string, Other if not found + + ``verse_type`` + The string to return a VerseType for + """ + verseIndex = None + if len(verse_type) > 1: + verseIndex = VerseType.from_translated_string(verse_type) + if verseIndex is None: + verseIndex = VerseType.from_string(verse_type) + if verseIndex is None: + verseIndex = VerseType.from_translated_tag(verse_type) + elif verseIndex is None: + verseIndex = VerseType.from_tag(verse_type) + return verseIndex def retrieve_windows_encoding(recommendation=None): """ diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 283aa6c03..28f7822cb 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -36,7 +36,7 @@ from openlp.core.lib import MediaManagerItem, Receiver, ItemCapabilities, \ from openlp.core.lib.ui import UiStrings from openlp.plugins.songs.forms import EditSongForm, SongMaintenanceForm, \ SongImportForm, SongExportForm -from openlp.plugins.songs.lib import OpenLyrics, SongXML +from openlp.plugins.songs.lib import OpenLyrics, SongXML, VerseType from openlp.plugins.songs.lib.db import Author, Song from openlp.core.lib.searchedit import SearchEdit @@ -344,22 +344,26 @@ class SongMediaItem(MediaManagerItem): if song.lyrics.startswith(u' Date: Thu, 17 Feb 2011 17:19:02 +0200 Subject: [PATCH 10/16] fix when loading from db to show preview/live --- openlp/plugins/songs/lib/mediaitem.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 28f7822cb..e71939bb7 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -346,8 +346,20 @@ class SongMediaItem(MediaManagerItem): # no verse list or only 1 space (in error) if not song.verse_order.strip(): for verse in verseList: - verseindex = VerseType.from_tag(verse[0][u'type']) - versetype = VerseType.Translations[verseindex][0] + # we cannot use from_loose_input() here, because database + # is supposed to contain English lowercase singlechar tags + verse_type = verse[0][u'type'] + verseIndex = None + if len(verse_type) > 1: + verseIndex = \ + VerseType.from_translated_string(verse_type) + if verseIndex is None: + verseIndex = VerseType.from_string(verse_type) + if verseIndex is None: + verseIndex = VerseType.from_tag(verse_type) + if verseIndex is None: + verseIndex = VerseType.Other + versetype = VerseType.Translations[verseIndex][0] verseTag = u'%s:%s' % (versetype, verse[0][u'label']) service_item.add_from_text( verse[1][:30], unicode(verse[1]), verseTag) From 059ca9ac08487a845b935d45dc904550ae66dfa9 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Thu, 17 Feb 2011 21:02:47 +0200 Subject: [PATCH 11/16] Updated InnoSetup script to add a 'Debug' shortcut to the Start Menu which invokes debug logging. --- resources/windows/OpenLP-2.0.iss | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/windows/OpenLP-2.0.iss b/resources/windows/OpenLP-2.0.iss index a85b41187..c64e2b488 100644 --- a/resources/windows/OpenLP-2.0.iss +++ b/resources/windows/OpenLP-2.0.iss @@ -68,6 +68,7 @@ Source: ..\..\dist\OpenLP\*; DestDir: {app}; Flags: ignoreversion recursesubdirs [Icons] Name: {group}\{#AppName}; Filename: {app}\{#AppExeName} +Name: {group}\{#AppName} (Debug); Filename: {app}\{#AppExeName}; Parameters: -l debug Name: {group}\{cm:ProgramOnTheWeb,{#AppName}}; Filename: {#AppURL} Name: {group}\{cm:UninstallProgram,{#AppName}}; Filename: {uninstallexe} Name: {commondesktop}\{#AppName}; Filename: {app}\{#AppExeName}; Tasks: desktopicon From dff393b6a4df6ff4e04190487fc49e254d6aac5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Thu, 17 Feb 2011 21:46:01 +0200 Subject: [PATCH 12/16] just another massive set of changes --- openlp/core/ui/slidecontroller.py | 15 ++-- openlp/plugins/songs/forms/editsongform.py | 87 +++++++++++-------- openlp/plugins/songs/forms/editversedialog.py | 28 +++--- openlp/plugins/songs/forms/editverseform.py | 46 +++++----- openlp/plugins/songs/lib/__init__.py | 86 ++++-------------- openlp/plugins/songs/lib/mediaitem.py | 16 ++-- openlp/plugins/songs/lib/xml.py | 5 +- 7 files changed, 122 insertions(+), 161 deletions(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 52626f24f..fda151c19 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -603,14 +603,15 @@ class SlideController(QtGui.QWidget): slideHeight = 0 if self.serviceItem.is_text(): if frame[u'verseTag']: - bits = frame[u'verseTag'].split(u':') - tag = u'%s\n%s' % (bits[0][0], bits[1][0:] ) - tag1 = u'%s%s' % (bits[0][0], bits[1][0:] ) - row = tag + # These tags are already translated. + versetag = frame[u'verseTag'] + versetag = u'%s%s' % (versetag[0].upper(), versetag[1:]) + twolineTag = u'%s\n%s' % (versetag[0], versetag[1:] ) + row = twolineTag if self.isLive: - if tag1 not in self.slideList: - self.slideList[tag1] = framenumber - self.songMenu.menu().addAction(tag1, + if versetag not in self.slideList: + self.slideList[versetag] = framenumber + self.songMenu.menu().addAction(versetag, self.onSongBarHandler) else: row += 1 diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index 7ff129de8..34cab3c74 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -230,11 +230,11 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): if self.song.verse_order: # we translate verse order translated = [] - for verse in self.song.verse_order.split(): - verseindex = VerseType.from_tag(verse[0]) - versetype = VerseType.Translations[verseindex][0] - versetag = verse[1:] - translated.append(u'%s%s' % (versetype, versetag)) + for versetag in self.song.verse_order.split(): + verseindex = VerseType.from_tag(versetag[0]) + versetype = VerseType.TranslatedTags[verseindex] + versenum = versetag[1:] + translated.append(u'%s%s' % (versetype.upper(), versenum)) self.verseOrderEdit.setText(u' '.join(translated)) else: self.verseOrderEdit.setText(u'') @@ -263,9 +263,8 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): for count, verse in enumerate(verseList): self.verseListWidget.setRowCount( self.verseListWidget.rowCount() + 1) - # this takes care of silently migrating from old or any markup - # if we entirely trusted the database, this should - # be unnecessary in the future + # This silently migrates from localized verse type markup. + # If we trusted the database, this would be unnecessary. vtype = verse[0][u'type'] index = None if len(vtype) > 1: @@ -277,7 +276,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): if index is None: index = VerseType.Other verse[0][u'type'] = VerseType.Tags[index] - variant = u'%s:%s' % (verse[0][u'type'], verse[0][u'label']) + variant = u'%s%s' % (verse[0][u'type'], verse[0][u'label']) item = QtGui.QTableWidgetItem(verse[1]) item.setData(QtCore.Qt.UserRole, QtCore.QVariant(variant)) self.verseListWidget.setItem(count, 0, item) @@ -318,10 +317,10 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): rowLabel = [] for row in range(0, self.verseListWidget.rowCount()): item = self.verseListWidget.item(row, 0) - data = unicode(item.data(QtCore.Qt.UserRole).toString()) - bit = data.split(u':') - bit[0] = VerseType.Translations[VerseType.from_tag(bit[0])][0] - rowTag = u'%s%s' % (bit[0], bit[1]) + versetag = unicode(item.data(QtCore.Qt.UserRole).toString()) + versetype = VerseType.TranslatedTags[ + VerseType.from_tag(versetag[0])].upper() + rowTag = u'%s%s' % (versetype, versetag[1:]) rowLabel.append(rowTag) self.verseListWidget.setVerticalHeaderLabels(rowLabel) @@ -442,10 +441,10 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): def onVerseAddButtonClicked(self): self.verse_form.setVerse(u'', True) if self.verse_form.exec_(): - afterText, verse, subVerse = self.verse_form.getVerse() - data = u'%s:%s' % (verse, subVerse) + afterText, versetype, versenum = self.verse_form.getVerse() + versetag = u'%s%s' % (versetype, versenum) item = QtGui.QTableWidgetItem(afterText) - item.setData(QtCore.Qt.UserRole, QtCore.QVariant(data)) + item.setData(QtCore.Qt.UserRole, QtCore.QVariant(versetag)) item.setText(afterText) self.verseListWidget.setRowCount( self.verseListWidget.rowCount() + 1) @@ -462,9 +461,9 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): verseId = unicode(item.data(QtCore.Qt.UserRole).toString()) self.verse_form.setVerse(tempText, True, verseId) if self.verse_form.exec_(): - afterText, verse, subVerse = self.verse_form.getVerse() - data = u'%s:%s' % (verse, subVerse) - item.setData(QtCore.Qt.UserRole, QtCore.QVariant(data)) + afterText, versetype, versenum = self.verse_form.getVerse() + versetag = u'%s%s' % (versetype, versenum) + item.setData(QtCore.Qt.UserRole, QtCore.QVariant(versetag)) item.setText(afterText) # number of lines has change so repaint the list moving the data if len(tempText.split(u'\n')) != len(afterText.split(u'\n')): @@ -489,8 +488,9 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): for row in range(0, self.verseListWidget.rowCount()): item = self.verseListWidget.item(row, 0) field = unicode(item.data(QtCore.Qt.UserRole).toString()) - versetype, versenum = field.split(u':') - versetype = VerseType.to_translated_string(versetype) + versetypeindex = VerseType.from_tag(field[0]) + versetype = VerseType.TranslatedNames[versetypeindex] + versenum = field[1:] verse_list += u'---[%s:%s]---\n' % (versetype, versenum) verse_list += item.text() verse_list += u'\n' @@ -510,15 +510,25 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): # handling carefully user inputted versetags separator = parts.find(u':') if separator >= 0: - verse = parts[0:separator].strip() - subVerse = parts[separator+1:].strip() + versetype = parts[0:separator].strip() + versenum = parts[separator+1:].strip() else: - verse = parts - verseIndex = VerseType.from_loose_input(verse) - verseType = VerseType.Tags[verseIndex] - if not len(subVerse): - subVerse = u'1' - variant = u'%s:%s' % (verseType, subVerse) + versetype = parts + versenum = u'1' + verseindex = \ + VerseType.from_loose_input(versetype) + if verseindex is None: + verseindex = VerseType.Verse + versetype = VerseType.Tags[verseindex] + # Later we need to handle v1a as well. + #regex = re.compile(r'(\d+\w.)') + regex = re.compile(r'\D*(\d+)\D*') + match = regex.match(versenum) + if match: + versenum = match.group(1) + else: + versenum = u'1' + variant = u'%s%s' % (versetype, versenum) else: if parts.endswith(u'\n'): parts = parts.rstrip(u'\n') @@ -585,7 +595,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): order.append(u'%s%s' % (versetag, versenum)) verses = [] verse_names = [] - for index in range (0, self.verseListWidget.rowCount()): + for index in range(0, self.verseListWidget.rowCount()): verse = self.verseListWidget.item(index, 0) verse = unicode(verse.data(QtCore.Qt.UserRole).toString()) if verse not in verse_names: @@ -609,9 +619,10 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): if verse not in order: self.songTabWidget.setCurrentIndex(0) self.verseOrderEdit.setFocus() - versetype, versenum = verse_names[count].split(u':') + versetype = verse_names[count][0] + versenum = verse_names[count][1:] verseindex = VerseType.from_tag(versetype) - versetype = VerseType.Translations[verseindex][0] + versetype = VerseType.TranslatedTags[verseindex].upper() versename = u'%s%s' % (versetype, versenum) answer = QtGui.QMessageBox.warning(self, translate('SongsPlugin.EditSongForm', 'Warning'), @@ -731,7 +742,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): versetag = VerseType.Tags[ VerseType.from_translated_tag(item[0])] versenum = item[1:].lower() - order.append(u'%s%s' % (versetag, versenum)) + order.append(u'%s%s' % (versetag, versenum)) self.song.verse_order = u' '.join(order) self.song.ccli_number = unicode(self.CCLNumberEdit.text()) self.song.song_number = unicode(self.songBookNumberEdit.text()) @@ -775,12 +786,14 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): for i in range(0, self.verseListWidget.rowCount()): item = self.verseListWidget.item(i, 0) verseId = unicode(item.data(QtCore.Qt.UserRole).toString()) - bits = verseId.split(u':') - sxml.add_verse_to_lyrics(bits[0], bits[1], unicode(item.text())) + versetype = verseId[0] + versenum = verseId[1:] + sxml.add_verse_to_lyrics(versetype, versenum, + unicode(item.text())) text = text + self.whitespace.sub(u' ', unicode(self.verseListWidget.item(i, 0).text())) + u' ' - if (bits[1] > u'1') and (bits[0][0] not in multiple): - multiple.append(bits[0][0]) + if (versenum > u'1') and (versetype not in multiple): + multiple.append(versetype) self.song.search_lyrics = text.lower() self.song.lyrics = unicode(sxml.extract_xml(), u'utf-8') for verse in multiple: diff --git a/openlp/plugins/songs/forms/editversedialog.py b/openlp/plugins/songs/forms/editversedialog.py index fe857e12a..64da3e89e 100644 --- a/openlp/plugins/songs/forms/editversedialog.py +++ b/openlp/plugins/songs/forms/editversedialog.py @@ -70,19 +70,19 @@ class Ui_EditVerseDialog(object): translate('SongsPlugin.EditVerseForm', 'Edit Verse')) self.verseTypeLabel.setText( translate('SongsPlugin.EditVerseForm', '&Verse type:')) - self.verseTypeComboBox.setItemText(0, - VerseType.Translations[VerseType.Verse]) - self.verseTypeComboBox.setItemText(1, - VerseType.Translations[VerseType.Chorus]) - self.verseTypeComboBox.setItemText(2, - VerseType.Translations[VerseType.Bridge]) - self.verseTypeComboBox.setItemText(3, - VerseType.Translations[VerseType.PreChorus]) - self.verseTypeComboBox.setItemText(4, - VerseType.Translations[VerseType.Intro]) - self.verseTypeComboBox.setItemText(5, - VerseType.Translations[VerseType.Ending]) - self.verseTypeComboBox.setItemText(6, - VerseType.Translations[VerseType.Other]) + self.verseTypeComboBox.setItemText(VerseType.Verse, + VerseType.TranslatedNames[VerseType.Verse]) + self.verseTypeComboBox.setItemText(VerseType.Chorus, + VerseType.TranslatedNames[VerseType.Chorus]) + self.verseTypeComboBox.setItemText(VerseType.Bridge, + VerseType.TranslatedNames[VerseType.Bridge]) + self.verseTypeComboBox.setItemText(VerseType.PreChorus, + VerseType.TranslatedNames[VerseType.PreChorus]) + self.verseTypeComboBox.setItemText(VerseType.Intro, + VerseType.TranslatedNames[VerseType.Intro]) + self.verseTypeComboBox.setItemText(VerseType.Ending, + VerseType.TranslatedNames[VerseType.Ending]) + self.verseTypeComboBox.setItemText(VerseType.Other, + VerseType.TranslatedNames[VerseType.Other]) self.insertButton.setText( translate('SongsPlugin.EditVerseForm', '&Insert')) diff --git a/openlp/plugins/songs/forms/editverseform.py b/openlp/plugins/songs/forms/editverseform.py index bb9d9e906..a8fe1302d 100644 --- a/openlp/plugins/songs/forms/editverseform.py +++ b/openlp/plugins/songs/forms/editverseform.py @@ -57,22 +57,23 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): QtCore.QObject.connect(self.verseTypeComboBox, QtCore.SIGNAL(u'currentIndexChanged(int)'), self.onVerseTypeComboBoxChanged) - self.verse_regex = re.compile(r'---\[(.+):(.+)\]---') + self.verse_regex = re.compile(r'---\[(.+):\D*(\d+)\D*\]---') def contextMenu(self, point): item = self.serviceManagerList.itemAt(point) - def insertVerse(self, title, num=1): + def insertVerse(self, versetype, num=1): if self.verseTextEdit.textCursor().columnNumber() != 0: self.verseTextEdit.insertPlainText(u'\n') - self.verseTextEdit.insertPlainText(u'---[%s:%s]---\n' % (title, num)) + versetype = VerseType.TranslatedNames[VerseTag.from_tag(versetype)] + self.verseTextEdit.insertPlainText(u'---[%s:%s]---\n' % \ + (versetype, num)) self.verseTextEdit.setFocus() def onInsertButtonClicked(self): - verse_type = self.verseTypeComboBox.currentIndex() - if VerseType.to_translated_string(verse_type) is not None: - self.insertVerse(VerseType.to_translated_string(verse_type), - self.verseNumberBox.value()) + vtypeindex = self.verseTypeComboBox.currentIndex() + self.insertVerse(VerseType.Tags[vtypeindex], + self.verseNumberBox.value()) def onVerseTypeComboBoxChanged(self): """ @@ -81,7 +82,7 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): """ position = self.verseTextEdit.textCursor().position() text = unicode(self.verseTextEdit.toPlainText()) - verse_type = VerseType.Translations[ + verse_type = VerseType.TranslatedNames[ self.verseTypeComboBox.currentIndex()] if not text: return @@ -98,11 +99,7 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): if match: verse_type = match.group(1) verse_number = int(match.group(2)) - verse_type_index = VerseType.from_translated_string(verse_type) - if verse_type_index is None: - verse_type_index = VerseType.from_string(verse_type) - if verse_type_index is None: - verse_type_index = VerseType.from_tag(verse_type) + verse_type_index = VerseType.from_loose_input(verse_type) if verse_type_index is not None: self.verseNumberBox.setValue(verse_number) @@ -128,19 +125,20 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): text = text[:position + 4] match = self.verse_regex.match(text) if match: - verse_type = match.group(1) - verse_number = int(match.group(2)) - verse_type_index = VerseType.from_loose_input(verse_type) - if verse_type_index is not None: - self.verseTypeComboBox.setCurrentIndex(verse_type_index) - self.verseNumberBox.setValue(verse_number) + versetype = match.group(1) + vtypeindex = VerseType.from_loose_input(versetype) + regex = re.compile(r'(\d+)') + versenum = int(match.group(2)) + if vtypeindex is not None: + self.verseTypeComboBox.setCurrentIndex(vtypeindex) + self.verseNumberBox.setValue(versenum) def setVerse(self, text, single=False, - tag=u'%s:1' % VerseType.tag(VerseType.Verse)): + tag=u'%s1' % VerseType.Tags[VerseType.Verse]): self.hasSingleVerse = single if single: - verse_type, verse_number = tag.split(u':') - verse_type_index = VerseType.from_tag(verse_type) + verse_type_index = VerseType.from_tag(tag[0]) + verse_number = tag[1:] if verse_type_index is not None: self.verseTypeComboBox.setCurrentIndex(verse_type_index) self.verseNumberBox.setValue(int(verse_number)) @@ -148,7 +146,7 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): else: if not text: text = u'---[%s:1]---\n' % \ - VerseType.to_translated_string(VerseType.Verse) + VerseType.TranslatedNames[VerseType.Verse] self.verseTypeComboBox.setCurrentIndex(0) self.verseNumberBox.setValue(1) self.insertButton.setVisible(True) @@ -165,7 +163,7 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): text = self.verseTextEdit.toPlainText() if not text.startsWith(u'---['): text = u'---[%s:1]---\n%s' % \ - (VerseType.to_translated_string(VerseType.Verse), text) + (VerseType.TranslatedNames[VerseType.Verse], text) return text def accept(self): diff --git a/openlp/plugins/songs/lib/__init__.py b/openlp/plugins/songs/lib/__init__.py index 7853f6c61..da3b97574 100644 --- a/openlp/plugins/songs/lib/__init__.py +++ b/openlp/plugins/songs/lib/__init__.py @@ -39,14 +39,7 @@ class VerseType(object): Intro = 4 Ending = 5 Other = 6 - Tags = [ - u'v', - u'c', - u'b', - u'p', - u'i', - u'e', - u'o'] + Names = [ u'Verse', u'Chorus', @@ -55,7 +48,11 @@ class VerseType(object): u'Intro', u'Ending', u'Other'] - Translations = [ + Tags = [] + for name in Names: + Tags.append(name[0].lower()) + + TranslatedNames = [ unicode(translate('SongsPlugin.VerseType', 'Verse')), unicode(translate('SongsPlugin.VerseType', 'Chorus')), unicode(translate('SongsPlugin.VerseType', 'Bridge')), @@ -63,60 +60,9 @@ class VerseType(object): unicode(translate('SongsPlugin.VerseType', 'Intro')), unicode(translate('SongsPlugin.VerseType', 'Ending')), unicode(translate('SongsPlugin.VerseType', 'Other'))] - - @staticmethod - def tag(verse_type): - """ - Return a string for a given VerseType tag - - ``verse_type`` - The verse type to return a string for - """ - if isinstance(verse_type, int): - try: - return VerseType.Tags[verse_type] - except: - return - elif verse_type[0].lower() in VerseType.Tags: - return verse_type[0].lower() - - @staticmethod - def to_string(verse_type): - """ - Return a string for a given VerseType Name - - ``verse_type`` - The type to return a string for - """ - if isinstance(verse_type, int): - try: - return VerseType.Names[verse_type] - except: - return - else: - verse_type = verse_type[0].lower() - for num, tag in enumerate(VerseType.Tags): - if verse_type == tag: - return VerseType.Names[num] - - @staticmethod - def to_translated_string(verse_type): - """ - Return a string for a given VerseType Name - - ``verse_type`` - The type to return a string for - """ - if isinstance(verse_type, int): - try: - return VerseType.Translations[verse_type] - except: - return - else: - verse_type = verse_type[0].lower() - for num, tag in enumerate(VerseType.Tags): - if verse_type == tag: - return VerseType.Translations[num] + TranslatedTags = [] + for name in TranslatedNames: + TranslatedTags.append(name[0].lower()) @staticmethod def from_tag(verse_type): @@ -140,9 +86,9 @@ class VerseType(object): The string to return a VerseType for """ verse_type = verse_type[0].lower() - for num, string in enumerate(VerseType.Translations): - if verse_type == string[0].lower(): - return num + for vtypeIndex, vtypeTag in enumerate(VerseType.TranslatedTags): + if verse_type == vtypeTag: + return vtypeIndex @staticmethod def from_string(verse_type): @@ -153,9 +99,9 @@ class VerseType(object): The string to return a VerseType for """ verse_type = verse_type.lower() - for num, string in enumerate(VerseType.Names): - if verse_type == string.lower(): - return num + for vtypeIndex, vtypeName in enumerate(VerseType.Names): + if verse_type == vtypeName.lower(): + return vtypeIndex @staticmethod def from_translated_string(verse_type): @@ -166,7 +112,7 @@ class VerseType(object): The string to return a VerseType for """ verse_type = verse_type.lower() - for num, translation in enumerate(VerseType.Translations): + for num, translation in enumerate(VerseType.TranslatedNames): if verse_type == translation.lower(): return num diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index e71939bb7..147450efd 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -346,8 +346,8 @@ class SongMediaItem(MediaManagerItem): # no verse list or only 1 space (in error) if not song.verse_order.strip(): for verse in verseList: - # we cannot use from_loose_input() here, because database - # is supposed to contain English lowercase singlechar tags + # We cannot use from_loose_input() here, because database + # is supposed to contain English lowercase singlechar tags. verse_type = verse[0][u'type'] verseIndex = None if len(verse_type) > 1: @@ -359,13 +359,12 @@ class SongMediaItem(MediaManagerItem): verseIndex = VerseType.from_tag(verse_type) if verseIndex is None: verseIndex = VerseType.Other - versetype = VerseType.Translations[verseIndex][0] - verseTag = u'%s:%s' % (versetype, verse[0][u'label']) + versetype = VerseType.TranslatedTags[verseIndex].upper() + verseTag = u'%s%s' % (versetype, verse[0][u'label']) service_item.add_from_text( verse[1][:30], unicode(verse[1]), verseTag) else: # Loop through the verse list and expand the song accordingly. - print song.verse_order for order in song.verse_order.lower().split(): if len(order) == 0: break @@ -373,9 +372,10 @@ class SongMediaItem(MediaManagerItem): if verse[0][u'type'][0] == order[0] and \ (verse[0][u'label'] == order[1:] or not order[1:]): verseindex = VerseType.from_tag(verse[0][u'type']) - versetype = VerseType.Translations[verseindex][0] - verseTag = u'%s:%s' % \ - (versetype, verse[0][u'label']) + versetype = VerseType.TranslatedTags[verseindex]\ + .upper() + verseTag = u'%s%s' % (versetype, + verse[0][u'label']) service_item.add_from_text( verse[1][:30], verse[1], verseTag) else: diff --git a/openlp/plugins/songs/lib/xml.py b/openlp/plugins/songs/lib/xml.py index b96e79961..bfae14db7 100644 --- a/openlp/plugins/songs/lib/xml.py +++ b/openlp/plugins/songs/lib/xml.py @@ -464,7 +464,10 @@ class OpenLyrics(object): text += u'\n' text += u'\n'.join([unicode(line) for line in lines.line]) verse_name = self._get(verse, u'name') - verse_type = unicode(VerseType.to_string(verse_name[0])) + verse_type_index = VerseType.from_tag(verse_name[0]) + if verse_type_index is None: + verse_type_index = VerseType.Other + verse_type = VerseType.Names[verse_type_index] verse_number = re.compile(u'[a-zA-Z]*').sub(u'', verse_name) verse_part = re.compile(u'[0-9]*').sub(u'', verse_name[1:]) # OpenLyrics allows e. g. "c", but we need "c1". From aac40357aee340028b83c7318b5f5e2e45456cb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Fri, 18 Feb 2011 02:48:58 +0200 Subject: [PATCH 13/16] better variable names, fixed translation issues for verse sequences --- openlp/core/ui/slidecontroller.py | 14 +- openlp/plugins/songs/forms/editsongform.py | 163 ++++++++++---------- openlp/plugins/songs/forms/editverseform.py | 38 ++--- openlp/plugins/songs/lib/__init__.py | 139 +++++++++++------ openlp/plugins/songs/lib/mediaitem.py | 51 +++--- openlp/plugins/songs/lib/xml.py | 2 - 6 files changed, 230 insertions(+), 177 deletions(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index fda151c19..ec9fe2080 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -604,14 +604,14 @@ class SlideController(QtGui.QWidget): if self.serviceItem.is_text(): if frame[u'verseTag']: # These tags are already translated. - versetag = frame[u'verseTag'] - versetag = u'%s%s' % (versetag[0].upper(), versetag[1:]) - twolineTag = u'%s\n%s' % (versetag[0], versetag[1:] ) - row = twolineTag + verse_def = frame[u'verseTag'] + verse_def = u'%s%s' % (verse_def[0].upper(), verse_def[1:]) + two_line_def = u'%s\n%s' % (verse_def[0], verse_def[1:] ) + row = two_line_def if self.isLive: - if versetag not in self.slideList: - self.slideList[versetag] = framenumber - self.songMenu.menu().addAction(versetag, + if verse_def not in self.slideList: + self.slideList[verse_def] = framenumber + self.songMenu.menu().addAction(verse_def, self.onSongBarHandler) else: row += 1 diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index 34cab3c74..a9c5bac86 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -227,17 +227,6 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.copyrightEdit.setText(u'') self.verseListWidget.clear() self.verseListWidget.setRowCount(0) - if self.song.verse_order: - # we translate verse order - translated = [] - for versetag in self.song.verse_order.split(): - verseindex = VerseType.from_tag(versetag[0]) - versetype = VerseType.TranslatedTags[verseindex] - versenum = versetag[1:] - translated.append(u'%s%s' % (versetype.upper(), versenum)) - self.verseOrderEdit.setText(u' '.join(translated)) - else: - self.verseOrderEdit.setText(u'') if self.song.comments: self.commentsEdit.setPlainText(self.song.comments) else: @@ -257,6 +246,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): # This is just because occasionally the lyrics come back as a "buffer" if isinstance(self.song.lyrics, buffer): self.song.lyrics = unicode(self.song.lyrics) + verse_tags_translated = False if self.song.lyrics.startswith(u' 1: - index = VerseType.from_translated_string(vtype) + if len(verse_tag) > 1: + index = VerseType.from_translated_string(verse_tag) if index is None: - index = VerseType.from_string(vtype) + index = VerseType.from_string(verse_tag) + else: + verse_tags_translated = True if index is None: - index = VerseType.from_tag(vtype) + index = VerseType.from_tag(verse_tag) if index is None: index = VerseType.Other verse[0][u'type'] = VerseType.Tags[index] - variant = u'%s%s' % (verse[0][u'type'], verse[0][u'label']) + verse_def = u'%s%s' % (verse[0][u'type'], verse[0][u'label']) item = QtGui.QTableWidgetItem(verse[1]) - item.setData(QtCore.Qt.UserRole, QtCore.QVariant(variant)) + item.setData(QtCore.Qt.UserRole, QtCore.QVariant(verse_def)) self.verseListWidget.setItem(count, 0, item) else: verses = self.song.lyrics.split(u'\n\n') @@ -286,10 +278,24 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.verseListWidget.setRowCount( self.verseListWidget.rowCount() + 1) item = QtGui.QTableWidgetItem(verse) - variant = u'%s:%s' % \ + verse_def = u'%s%s' % \ (VerseType.Tags[VerseType.Verse], unicode(count + 1)) - item.setData(QtCore.Qt.UserRole, QtCore.QVariant(variant)) + item.setData(QtCore.Qt.UserRole, QtCore.QVariant(verse_def)) self.verseListWidget.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]) + if verse_index is None: + verse_index = VerseType.from_tag(verse_def[0]) + verse_tag = VerseType.TranslatedTags[verse_index].upper() + translated.append(u'%s%s' % (verse_tag, verse_def[1:])) + self.verseOrderEdit.setText(u' '.join(translated)) + else: + self.verseOrderEdit.setText(u'') self.verseListWidget.resizeRowsToContents() self.tagRows() # clear the results @@ -314,15 +320,14 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): """ Tag the Song List rows based on the verse list """ - rowLabel = [] + row_label = [] for row in range(0, self.verseListWidget.rowCount()): item = self.verseListWidget.item(row, 0) - versetag = unicode(item.data(QtCore.Qt.UserRole).toString()) - versetype = VerseType.TranslatedTags[ - VerseType.from_tag(versetag[0])].upper() - rowTag = u'%s%s' % (versetype, versetag[1:]) - rowLabel.append(rowTag) - self.verseListWidget.setVerticalHeaderLabels(rowLabel) + verse_def = unicode(item.data(QtCore.Qt.UserRole).toString()) + verse_tag = VerseType.translated_tag(verse_def[0]) + row_def = u'%s%s' % (verse_tag, verse_def[1:]) + row_label.append(row_def) + self.verseListWidget.setVerticalHeaderLabels(row_label) def onAuthorAddButtonClicked(self): item = int(self.authorsComboBox.currentIndex()) @@ -441,11 +446,11 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): def onVerseAddButtonClicked(self): self.verse_form.setVerse(u'', True) if self.verse_form.exec_(): - afterText, versetype, versenum = self.verse_form.getVerse() - versetag = u'%s%s' % (versetype, versenum) + after_text, verse_tag, verse_num = self.verse_form.getVerse() + verse_def = u'%s%s' % (verse_tag, verse_num) item = QtGui.QTableWidgetItem(afterText) - item.setData(QtCore.Qt.UserRole, QtCore.QVariant(versetag)) - item.setText(afterText) + item.setData(QtCore.Qt.UserRole, QtCore.QVariant(verse_def)) + item.setText(after_text) self.verseListWidget.setRowCount( self.verseListWidget.rowCount() + 1) self.verseListWidget.setItem( @@ -461,12 +466,12 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): verseId = unicode(item.data(QtCore.Qt.UserRole).toString()) self.verse_form.setVerse(tempText, True, verseId) if self.verse_form.exec_(): - afterText, versetype, versenum = self.verse_form.getVerse() - versetag = u'%s%s' % (versetype, versenum) - item.setData(QtCore.Qt.UserRole, QtCore.QVariant(versetag)) - item.setText(afterText) + after_text, verse_tag, verse_num = self.verse_form.getVerse() + verse_def = u'%s%s' % (verse_tag, verse_num) + item.setData(QtCore.Qt.UserRole, QtCore.QVariant(verse_def)) + item.setText(after_text) # number of lines has change so repaint the list moving the data - if len(tempText.split(u'\n')) != len(afterText.split(u'\n')): + if len(tempText.split(u'\n')) != len(after_text.split(u'\n')): tempList = {} tempId = {} for row in range(0, self.verseListWidget.rowCount()): @@ -488,10 +493,9 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): for row in range(0, self.verseListWidget.rowCount()): item = self.verseListWidget.item(row, 0) field = unicode(item.data(QtCore.Qt.UserRole).toString()) - versetypeindex = VerseType.from_tag(field[0]) - versetype = VerseType.TranslatedNames[versetypeindex] - versenum = field[1:] - verse_list += u'---[%s:%s]---\n' % (versetype, versenum) + verse_tag = VerseType.translated_name(field[0]) + verse_num = field[1:] + verse_list += u'---[%s:%s]---\n' % (verse_tag, verse_num) verse_list += item.text() verse_list += u'\n' self.verse_form.setVerse(verse_list) @@ -510,31 +514,29 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): # handling carefully user inputted versetags separator = parts.find(u':') if separator >= 0: - versetype = parts[0:separator].strip() - versenum = parts[separator+1:].strip() + verse_name = parts[0:separator].strip() + verse_num = parts[separator+1:].strip() else: - versetype = parts - versenum = u'1' - verseindex = \ - VerseType.from_loose_input(versetype) - if verseindex is None: - verseindex = VerseType.Verse - versetype = VerseType.Tags[verseindex] + verse_name = parts + verse_num = u'1' + verse_index = \ + VerseType.from_loose_input(verse_name) + verse_tag = VerseType.Tags[verse_index] # Later we need to handle v1a as well. #regex = re.compile(r'(\d+\w.)') regex = re.compile(r'\D*(\d+)\D*') - match = regex.match(versenum) + match = regex.match(verse_num) if match: - versenum = match.group(1) + verse_num = match.group(1) else: - versenum = u'1' - variant = u'%s%s' % (versetype, versenum) + verse_num = u'1' + verse_def = u'%s%s' % (verse_tag, verse_num) else: if parts.endswith(u'\n'): parts = parts.rstrip(u'\n') item = QtGui.QTableWidgetItem(parts) item.setData(QtCore.Qt.UserRole, - QtCore.QVariant(variant)) + QtCore.QVariant(verse_def)) self.verseListWidget.setRowCount( self.verseListWidget.rowCount() + 1) self.verseListWidget.setItem( @@ -586,29 +588,31 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): order_names = unicode(self.verseOrderEdit.text()).split() for item in order_names: if len(item) == 1: - order.append(VerseType.Tags[VerseType.from_translated_tag( - item)] + u'1') + verse_index = VerseType.from_translated_tag(item) + if verse_index is not None: + order.append(VerseType.Tags[verse_index] + u'1') + else: + order.append(u'') # it matches no verses anyway else: - versetag = VerseType.Tags[ - VerseType.from_translated_tag(item[0])] - versenum = item[1:].lower() - order.append(u'%s%s' % (versetag, versenum)) + verse_index = VerseType.from_translated_tag(item[0]) + if verse_index is None: + order.append(u'') # same as above + else: + verse_tag = VerseType.Tags[verse_index] + verse_num = item[1:].lower() + order.append(verse_tag + verse_num) verses = [] verse_names = [] for index in range(0, self.verseListWidget.rowCount()): verse = self.verseListWidget.item(index, 0) verse = unicode(verse.data(QtCore.Qt.UserRole).toString()) if verse not in verse_names: - verses.append( - re.sub(r'(.)[^:]*:(.*)', r'\1\2', verse.lower())) - verse_names.append(verse) + verses.append(verse) + verse_names.append(u'%s%s' % ( + VerseType.translated_tag(verse[0]), verse[1:])) for count, item in enumerate(order): if item not in verses: - self.songTabWidget.setCurrentIndex(0) - self.verseOrderEdit.setFocus() - valid = verses.pop(0) - for verse in verses: - valid = valid + u', ' + verse.upper() + valid = u', '.join(verse_names) critical_error_message_box( message=unicode(translate('SongsPlugin.EditSongForm', 'The verse order is invalid. There is no verse ' @@ -619,17 +623,12 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): if verse not in order: self.songTabWidget.setCurrentIndex(0) self.verseOrderEdit.setFocus() - versetype = verse_names[count][0] - versenum = verse_names[count][1:] - verseindex = VerseType.from_tag(versetype) - versetype = VerseType.TranslatedTags[verseindex].upper() - versename = u'%s%s' % (versetype, versenum) answer = QtGui.QMessageBox.warning(self, translate('SongsPlugin.EditSongForm', 'Warning'), unicode(translate('SongsPlugin.EditSongForm', 'You have not used %s anywhere in the verse ' 'order. Are you sure you want to save the song ' - 'like this?')) % versename, + 'like this?')) % verse_names[count], QtGui.QMessageBox.Yes | QtGui.QMessageBox.No) if answer == QtGui.QMessageBox.No: return False @@ -739,10 +738,10 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): ordertext = unicode(self.verseOrderEdit.text()) order = [] for item in ordertext.split(): - versetag = VerseType.Tags[ + verse_tag = VerseType.Tags[ VerseType.from_translated_tag(item[0])] - versenum = item[1:].lower() - order.append(u'%s%s' % (versetag, versenum)) + verse_num = item[1:].lower() + order.append(u'%s%s' % (verse_tag, verse_num)) self.song.verse_order = u' '.join(order) self.song.ccli_number = unicode(self.CCLNumberEdit.text()) self.song.song_number = unicode(self.songBookNumberEdit.text()) @@ -786,14 +785,14 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): for i in range(0, self.verseListWidget.rowCount()): item = self.verseListWidget.item(i, 0) verseId = unicode(item.data(QtCore.Qt.UserRole).toString()) - versetype = verseId[0] - versenum = verseId[1:] - sxml.add_verse_to_lyrics(versetype, versenum, + verse_tag = verseId[0] + verse_num = verseId[1:] + sxml.add_verse_to_lyrics(verse_type, verse_num, unicode(item.text())) text = text + self.whitespace.sub(u' ', unicode(self.verseListWidget.item(i, 0).text())) + u' ' - if (versenum > u'1') and (versetype not in multiple): - multiple.append(versetype) + if (verse_num > u'1') and (verse_tag not in multiple): + multiple.append(verse_tag) self.song.search_lyrics = text.lower() self.song.lyrics = unicode(sxml.extract_xml(), u'utf-8') for verse in multiple: diff --git a/openlp/plugins/songs/forms/editverseform.py b/openlp/plugins/songs/forms/editverseform.py index a8fe1302d..ada612c43 100644 --- a/openlp/plugins/songs/forms/editverseform.py +++ b/openlp/plugins/songs/forms/editverseform.py @@ -57,22 +57,22 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): QtCore.QObject.connect(self.verseTypeComboBox, QtCore.SIGNAL(u'currentIndexChanged(int)'), self.onVerseTypeComboBoxChanged) - self.verse_regex = re.compile(r'---\[(.+):\D*(\d+)\D*\]---') + self.verse_regex = re.compile(r'---\[(.+):\D*(\d.)\D*\]---') def contextMenu(self, point): item = self.serviceManagerList.itemAt(point) - def insertVerse(self, versetype, num=1): + def insertVerse(self, verse_tag, verse_num=1): if self.verseTextEdit.textCursor().columnNumber() != 0: self.verseTextEdit.insertPlainText(u'\n') - versetype = VerseType.TranslatedNames[VerseTag.from_tag(versetype)] - self.verseTextEdit.insertPlainText(u'---[%s:%s]---\n' % \ - (versetype, num)) + verse_tag = VerseType.translated_name(verse_tag) + self.verseTextEdit.insertPlainText(u'---[%s:%s]---\n' % + (verse_tag, verse_num)) self.verseTextEdit.setFocus() def onInsertButtonClicked(self): - vtypeindex = self.verseTypeComboBox.currentIndex() - self.insertVerse(VerseType.Tags[vtypeindex], + verse_type_index = self.verseTypeComboBox.currentIndex() + self.insertVerse(VerseType.Tags[verse_type_index], self.verseNumberBox.value()) def onVerseTypeComboBoxChanged(self): @@ -82,11 +82,11 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): """ position = self.verseTextEdit.textCursor().position() text = unicode(self.verseTextEdit.toPlainText()) - verse_type = VerseType.TranslatedNames[ + verse_name = VerseType.TranslatedNames[ self.verseTypeComboBox.currentIndex()] if not text: return - position = text.rfind(u'---[%s' % verse_type, 0, position) + position = text.rfind(u'---[%s' % verse_name, 0, position) if position == -1: self.verseNumberBox.setValue(1) return @@ -97,11 +97,11 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): text = text[:position + 4] match = self.verse_regex.match(text) if match: - verse_type = match.group(1) - verse_number = int(match.group(2)) - verse_type_index = VerseType.from_loose_input(verse_type) + verse_tag = match.group(1) + verse_num = int(match.group(2)) + verse_type_index = VerseType.from_loose_input(verse_tag) if verse_type_index is not None: - self.verseNumberBox.setValue(verse_number) + self.verseNumberBox.setValue(verse_num) def onCursorPositionChanged(self): """ @@ -125,13 +125,13 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): text = text[:position + 4] match = self.verse_regex.match(text) if match: - versetype = match.group(1) - vtypeindex = VerseType.from_loose_input(versetype) + verse_type = match.group(1) + verse_type_index = VerseType.from_loose_input(verse_type) regex = re.compile(r'(\d+)') - versenum = int(match.group(2)) - if vtypeindex is not None: - self.verseTypeComboBox.setCurrentIndex(vtypeindex) - self.verseNumberBox.setValue(versenum) + verse_num = int(match.group(2)) + if verse_type_index is not None: + self.verseTypeComboBox.setCurrentIndex(verse_type_index) + self.verseNumberBox.setValue(verse_num) def setVerse(self, text, single=False, tag=u'%s1' % VerseType.Tags[VerseType.Verse]): diff --git a/openlp/plugins/songs/lib/__init__.py b/openlp/plugins/songs/lib/__init__.py index da3b97574..a1cc7e19d 100644 --- a/openlp/plugins/songs/lib/__init__.py +++ b/openlp/plugins/songs/lib/__init__.py @@ -48,9 +48,7 @@ class VerseType(object): u'Intro', u'Ending', u'Other'] - Tags = [] - for name in Names: - Tags.append(name[0].lower()) + Tags = [name[0].lower() for name in Names] TranslatedNames = [ unicode(translate('SongsPlugin.VerseType', 'Verse')), @@ -60,80 +58,129 @@ class VerseType(object): unicode(translate('SongsPlugin.VerseType', 'Intro')), unicode(translate('SongsPlugin.VerseType', 'Ending')), unicode(translate('SongsPlugin.VerseType', 'Other'))] - TranslatedTags = [] - for name in TranslatedNames: - TranslatedTags.append(name[0].lower()) + TranslatedTags = [name[0].lower() for name in TranslatedNames] @staticmethod - def from_tag(verse_type): + def translated_tag(verse_tag, strict=False): + """ + Return the translated UPPERCASE tag for a given tag, + used to show translated verse tags in UI + + ``verse_tag`` + The string to return a VerseType for + + ``strict`` + Determines if the default Other or None should be returned + """ + if strict: + not_found_value = None + else: + not_found_value = VerseType.TranslatedTags[VerseType.Other].upper() + verse_tag = verse_tag[0].lower() + for num, tag in enumerate(VerseType.Tags): + if verse_tag == tag: + return VerseType.TranslatedTags[num].upper() + return not_found_value + + @staticmethod + def translated_name(verse_tag, strict=False): + """ + Return the translated name for a given tag + + ``verse_tag`` + The string to return a VerseType for + + ``strict`` + Determines if the default Other or None should be returned + """ + if strict: + not_found_value = None + else: + not_found_value = VerseType.TranslatedNames[VerseType.Other] + verse_tag = verse_tag[0].lower() + for num, tag in enumerate(VerseType.Tags): + if verse_tag == tag: + return VerseType.TranslatedNames[num] + return not_found_value + + @staticmethod + def from_tag(verse_tag, strict=False): """ Return the VerseType for a given tag - ``verse_type`` + ``verse_tag`` + The string to return a VerseType for + + ``strict`` + Determines if the default Other or None should be returned + """ + if strict: + no_return_value = None + else: + no_return_value = VerseType.Other + verse_tag = verse_tag[0].lower() + for num, tag in enumerate(VerseType.Tags): + if verse_tag == tag: + return num + return no_return_value + + @staticmethod + def from_translated_tag(verse_tag): + """ + Return the VerseType for a given tag + + ``verse_tag`` The string to return a VerseType for """ - verse_type = verse_type[0].lower() - for num, string in enumerate(VerseType.Tags): - if verse_type == string: + verse_tag = verse_tag[0].lower() + for num, tag in enumerate(VerseType.TranslatedTags): + if verse_tag == tag: return num @staticmethod - def from_translated_tag(verse_type): - """ - Return the VerseType for a given tag - - ``verse_type`` - The string to return a VerseType for - """ - verse_type = verse_type[0].lower() - for vtypeIndex, vtypeTag in enumerate(VerseType.TranslatedTags): - if verse_type == vtypeTag: - return vtypeIndex - - @staticmethod - def from_string(verse_type): + def from_string(verse_name): """ Return the VerseType for a given string - ``verse_type`` + ``verse_name`` The string to return a VerseType for """ - verse_type = verse_type.lower() - for vtypeIndex, vtypeName in enumerate(VerseType.Names): - if verse_type == vtypeName.lower(): - return vtypeIndex + verse_name = verse_name.lower() + for num, name in enumerate(VerseType.Names): + if verse_name == name.lower(): + return num @staticmethod - def from_translated_string(verse_type): + def from_translated_string(verse_name): """ Return the VerseType for a given string - ``verse_type`` + ``verse_name`` The string to return a VerseType for """ - verse_type = verse_type.lower() + verse_name = verse_name.lower() for num, translation in enumerate(VerseType.TranslatedNames): - if verse_type == translation.lower(): + if verse_name == translation.lower(): return num @staticmethod - def from_loose_input(verse_type): + def from_loose_input(verse_name): """ Return the VerseType for a given string, Other if not found - ``verse_type`` + ``verse_name`` The string to return a VerseType for """ - verseIndex = None - if len(verse_type) > 1: - verseIndex = VerseType.from_translated_string(verse_type) - if verseIndex is None: - verseIndex = VerseType.from_string(verse_type) - if verseIndex is None: - verseIndex = VerseType.from_translated_tag(verse_type) - elif verseIndex is None: - verseIndex = VerseType.from_tag(verse_type) - return verseIndex + verse_index = None + if len(verse_name) > 1: + verse_index = VerseType.from_translated_string(verse_name) + if verse_index is None: + verseIndex = VerseType.from_string(verse_name) + if verse_index is None: + verse_index = VerseType.from_translated_tag(verse_name) + elif verse_index is None: + verse_index = VerseType.from_tag(verse_name) + return verse_index def retrieve_windows_encoding(recommendation=None): """ diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 147450efd..c7e9bae3b 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -344,40 +344,49 @@ class SongMediaItem(MediaManagerItem): if song.lyrics.startswith(u' 1: - verseIndex = \ - VerseType.from_translated_string(verse_type) - if verseIndex is None: - verseIndex = VerseType.from_string(verse_type) - if verseIndex is None: - verseIndex = VerseType.from_tag(verse_type) - if verseIndex is None: - verseIndex = VerseType.Other - versetype = VerseType.TranslatedTags[verseIndex].upper() - verseTag = u'%s%s' % (versetype, verse[0][u'label']) + verse_tag = verse[0][u'type'] + verse_index = None + if len(verse_tag) > 1: + verse_index = \ + VerseType.from_translated_string(verse_tag) + if verse_index is None: + verse_index = VerseType.from_string(verse_tag) + if verse_index is None: + verse_index = VerseType.from_tag(verse_tag) + verse_tag = VerseType.TranslatedTags[verse_index].upper() + verse_def = u'%s%s' % (verse_tag, verse[0][u'label']) service_item.add_from_text( - verse[1][:30], unicode(verse[1]), verseTag) + verse[1][:30], unicode(verse[1]), verse_def) else: # Loop through the verse list and expand the song accordingly. for order in song.verse_order.lower().split(): if len(order) == 0: break for verse in verseList: - if verse[0][u'type'][0] == order[0] and \ - (verse[0][u'label'] == order[1:] or not order[1:]): - verseindex = VerseType.from_tag(verse[0][u'type']) - versetype = VerseType.TranslatedTags[verseindex]\ - .upper() - verseTag = u'%s%s' % (versetype, + if verse[0][u'type'][0].lower() == order[0] and \ + (verse[0][u'label'].lower() == order[1:] or \ + not order[1:]): + if verse_tags_translated: + verse_index = VerseType.from_translated_tag( + verse[0][u'type']) + else: + verse_index = VerseType.from_tag( + verse[0][u'type']) + if verse_index is None: + verse_index = VerseType.Other + verse_tag = VerseType.TranslatedTags[verse_index] + verse_def = u'%s%s' % (verse_tag, verse[0][u'label']) service_item.add_from_text( - verse[1][:30], verse[1], verseTag) + verse[1][:30], verse[1], verse_def) else: verses = song.lyrics.split(u'\n\n') for slide in verses: diff --git a/openlp/plugins/songs/lib/xml.py b/openlp/plugins/songs/lib/xml.py index bfae14db7..e5c3963c0 100644 --- a/openlp/plugins/songs/lib/xml.py +++ b/openlp/plugins/songs/lib/xml.py @@ -465,8 +465,6 @@ class OpenLyrics(object): text += u'\n'.join([unicode(line) for line in lines.line]) verse_name = self._get(verse, u'name') verse_type_index = VerseType.from_tag(verse_name[0]) - if verse_type_index is None: - verse_type_index = VerseType.Other verse_type = VerseType.Names[verse_type_index] verse_number = re.compile(u'[a-zA-Z]*').sub(u'', verse_name) verse_part = re.compile(u'[0-9]*').sub(u'', verse_name[1:]) From 1651e42bcada1aa44b2aaa5cd2160445ae436fa3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Fri, 18 Feb 2011 09:53:40 +0200 Subject: [PATCH 14/16] more variable name changes --- openlp/plugins/songs/forms/editsongform.py | 2 +- openlp/plugins/songs/forms/editverseform.py | 5 +- openlp/plugins/songs/lib/__init__.py | 2 +- openlp/plugins/songs/lib/opensongimport.py | 116 ++++++++++---------- openlp/plugins/songs/lib/songimport.py | 64 +++++------ 5 files changed, 94 insertions(+), 95 deletions(-) diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index a9c5bac86..0470a2d32 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -787,7 +787,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): verseId = unicode(item.data(QtCore.Qt.UserRole).toString()) verse_tag = verseId[0] verse_num = verseId[1:] - sxml.add_verse_to_lyrics(verse_type, verse_num, + sxml.add_verse_to_lyrics(verse_tag, verse_num, unicode(item.text())) text = text + self.whitespace.sub(u' ', unicode(self.verseListWidget.item(i, 0).text())) + u' ' diff --git a/openlp/plugins/songs/forms/editverseform.py b/openlp/plugins/songs/forms/editverseform.py index ada612c43..a5b8e2696 100644 --- a/openlp/plugins/songs/forms/editverseform.py +++ b/openlp/plugins/songs/forms/editverseform.py @@ -127,11 +127,10 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): if match: verse_type = match.group(1) verse_type_index = VerseType.from_loose_input(verse_type) - regex = re.compile(r'(\d+)') - verse_num = int(match.group(2)) + verse_number = int(match.group(2)) if verse_type_index is not None: self.verseTypeComboBox.setCurrentIndex(verse_type_index) - self.verseNumberBox.setValue(verse_num) + self.verseNumberBox.setValue(verse_number) def setVerse(self, text, single=False, tag=u'%s1' % VerseType.Tags[VerseType.Verse]): diff --git a/openlp/plugins/songs/lib/__init__.py b/openlp/plugins/songs/lib/__init__.py index a1cc7e19d..8b64618c0 100644 --- a/openlp/plugins/songs/lib/__init__.py +++ b/openlp/plugins/songs/lib/__init__.py @@ -175,7 +175,7 @@ class VerseType(object): if len(verse_name) > 1: verse_index = VerseType.from_translated_string(verse_name) if verse_index is None: - verseIndex = VerseType.from_string(verse_name) + verse_index = VerseType.from_string(verse_name) if verse_index is None: verse_index = VerseType.from_translated_tag(verse_name) elif verse_index is None: diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index 36d46b903..00fdbf044 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -161,8 +161,8 @@ class OpenSongImport(SongImport): self.import_wizard.incrementProgressBar( unicode(translate('SongsPlugin.ImportWizardForm', 'Importing %s...')) % os.path.split(filename)[-1]) - songfile = open(filename) - if self.do_import_file(songfile) and self.commit and \ + song_file = open(filename) + if self.do_import_file(song_file) and self.commit and \ not self.stop_import_flag: self.finish() else: @@ -209,92 +209,92 @@ class OpenSongImport(SongImport): verses = {} # keep track of verses appearance order our_verse_order = [] - # default versetype - versetype = u'v' - versenum = u'1' + # default verse + verse_tag = u'v' + verse_num = u'1' # for the case where song has several sections with same marker inst = 1 lyrics = unicode(root.lyrics) - for thisline in lyrics.split(u'\n'): + for this_line in lyrics.split(u'\n'): # remove comments - semicolon = thisline.find(u';') + semicolon = this_line.find(u';') if semicolon >= 0: - thisline = thisline[:semicolon] - thisline = thisline.strip() - if not len(thisline): + this_line = this_line[:semicolon] + this_line = this_line.strip() + if not len(this_line): continue # skip guitar chords and page and column breaks - if thisline.startswith(u'.') or thisline.startswith(u'---') \ - or thisline.startswith(u'-!!'): + if this_line.startswith(u'.') or this_line.startswith(u'---') \ + or this_line.startswith(u'-!!'): continue # verse/chorus/etc. marker - if thisline.startswith(u'['): + if this_line.startswith(u'['): # drop the square brackets - right_bracket = thisline.find(u']') - content = thisline[1:right_bracket].lower() + right_bracket = this_line.find(u']') + content = this_line[1:right_bracket].lower() # have we got any digits? - # If so, versenumber is everything from the digits + # If so, verse number is everything from the digits # to the end (even if there are some alpha chars on the end) match = re.match(u'(.*)(\d+.*)', content) if match is not None: - versetype = match.group(1) - versenum = match.group(2) + verse_tag = match.group(1) + verse_num = match.group(2) else: # otherwise we assume number 1 and take the whole prefix as - # the versetype - versetype = content - versenum = u'1' + # the verse tag + verse_tag = content + verse_num = u'1' inst = 1 - if [versetype, versenum, inst] in our_verse_order \ - and verses.has_key(versetype) \ - and verses[versetype].has_key(versenum): - inst = len(verses[versetype][versenum])+1 - our_verse_order.append([versetype, versenum, inst]) + if [verse_tag, verse_num, inst] in our_verse_order \ + and verses.has_key(verse_tag) \ + and verses[verse_tag].has_key(verse_num): + inst = len(verses[verse_tag][verse_num])+1 + our_verse_order.append([verse_tag, verse_num, inst]) continue # number at start of line.. it's verse number - if thisline[0].isdigit(): - versenum = thisline[0] - thisline = thisline[1:].strip() - our_verse_order.append([versetype, versenum, inst]) - if not verses.has_key(versetype): - verses[versetype] = {} - if not verses[versetype].has_key(versenum): - verses[versetype][versenum] = {} - if not verses[versetype][versenum].has_key(inst): - verses[versetype][versenum][inst] = [] + if this_line[0].isdigit(): + verse_num = this_line[0] + this_line = this_line[1:].strip() + our_verse_order.append([verse_tag, verse_num, inst]) + if not verses.has_key(verse_tag): + verses[verse_tag] = {} + if not verses[verse_tag].has_key(verse_num): + verses[verse_tag][verse_num] = {} + if not verses[verse_tag][verse_num].has_key(inst): + verses[verse_tag][verse_num][inst] = [] # Tidy text and remove the ____s from extended words - thisline = self.tidy_text(thisline) - thisline = thisline.replace(u'_', u'') - thisline = thisline.replace(u'|', u'\n') - verses[versetype][versenum][inst].append(thisline) + this_line = self.tidy_text(this_line) + this_line = this_line.replace(u'_', u'') + this_line = this_line.replace(u'|', u'\n') + verses[verse_tag][verse_num][inst].append(this_line) # done parsing # add verses in original order - for (versetype, versenum, inst) in our_verse_order: - vtag = u'%s%s' % (versetype, versenum) - lines = u'\n'.join(verses[versetype][versenum][inst]) - self.add_verse(lines, vtag) + for (verse_tag, verse_num, inst) in our_verse_order: + verse_def = u'%s%s' % (verse_tag, verse_num) + lines = u'\n'.join(verses[verse_tag][verse_num][inst]) + self.add_verse(lines, verse_def) # figure out the presentation order, if present if u'presentation' in fields and root.presentation != u'': order = unicode(root.presentation) # We make all the tags in the lyrics lower case, so match that here # and then split into a list on the whitespace order = order.lower().split() - for tag in order: - match = re.match(u'(.*)(\d+.*)', tag) + for verse_def in order: + match = re.match(u'(.*)(\d+.*)', verse_def) if match is not None: - versetype = match.group(1) - versenum = match.group(2) - if not len(versetype): - versetype = u'v' + verse_tag = match.group(1) + verse_num = match.group(2) + if not len(verse_tag): + verse_tag = u'v' else: # Assume it's no.1 if there are no digits - versetype = tag - versenum = u'1' - vtagString = u'%s%s' % (versetype, versenum) - if verses.has_key(versetype) \ - and verses[versetype].has_key(versenum): - self.verse_order_list.append(vtagString) + verse_tag = verse_def + verse_num = u'1' + verse_def = u'%s%s' % (verse_tag, verse_num) + if verses.has_key(verse_tag) \ + and verses[verse_tag].has_key(verse_num): + self.verse_order_list.append(verse_def) else: - log.info(u'Got order %s but not in versetags, dropping' - u'this item from presentation order', vtagString) + log.info(u'Got order %s but not in verse tags, dropping' + u'this item from presentation order', verse_def) return True diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index f4a43c3b4..f1f4b4249 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -200,39 +200,38 @@ class SongImport(QtCore.QObject): return self.media_files.append(filename) - def add_verse(self, versetext, versetag=u'v', lang=None): + def add_verse(self, verse_text, verse_def=u'v', lang=None): """ Add a verse. This is the whole verse, lines split by \\n. It will also attempt to detect duplicates. In this case it will just add to the verse order. - ``versetext`` + ``verse_text`` The text of the verse. - ``versetag`` - The verse tag can be V1/C1/B etc, or 'V' and 'C' (will count the + ``verse_def`` + The verse tag can be v1/c1/b etc, or 'v' and 'c' (will count the verses/choruses itself) or None, where it will assume verse. ``lang`` The language code (ISO-639) of the verse, for example *en* or *de*. """ - for (oldversetag, oldverse, oldlang) in self.verses: - if oldverse.strip() == versetext.strip(): - # this verse is already present - self.verse_order_list_generated.append(oldversetag) + for (old_verse_def, old_verse, old_lang) in self.verses: + if old_verse.strip() == verse_text.strip(): + self.verse_order_list_generated.append(old_verse_def) self.verse_order_list_generated_useful = True return - if versetag[0] in self.versecounts: - self.versecounts[versetag[0]] += 1 + if verse_def[0] in self.verse_counts: + self.verse_counts[verse_def[0]] += 1 else: - self.versecounts[versetag[0]] = 1 - if len(versetag) == 1: - versetag += unicode(self.versecounts[versetag[0]]) - elif int(versetag[1:]) > self.versecounts[versetag[0]]: - self.versecounts[versetag[0]] = int(versetag[1:]) - self.verses.append([versetag, versetext.rstrip(), lang]) - self.verse_order_list_generated.append(versetag) + self.verse_counts[verse_def[0]] = 1 + if len(verse_def) == 1: + verse_def += unicode(self.versecounts[verse_def[0]]) + elif int(verse_def[1:]) > self.versecounts[verse_def[0]]: + self.versecounts[verse_def[0]] = int(verse_def[1:]) + self.verses.append([verse_def, versetext.rstrip(), lang]) + self.verse_order_list_generated.append(verse_def) def repeat_verse(self): """ @@ -277,28 +276,29 @@ class SongImport(QtCore.QObject): verses_changed_to_other = {} sxml = SongXML() other_count = 1 - for (versetag, versetext, lang) in self.verses: - if versetag[0].lower() in VerseType.Tags: - versetype = versetag[0].lower() + for (verse_def, verse_text, lang) in self.verses: + if verse_def[0].lower() in VerseType.Tags: + verse_def = verse_def[0].lower() else: - newversetag = u'%s%d' % (VerseType.Tags[VerseType.Other], + new_verse_def = u'%s%d' % (VerseType.Tags[VerseType.Other], other_count) - verses_changed_to_other[versetag] = newversetag + verses_changed_to_other[verse_def] = new_verse_def other_count += 1 - versetype = VerseType.Tags[VerseType.Other] - log.info(u'Versetype %s changing to %s' , versetag, newversetag) - versetag = newversetag - sxml.add_verse_to_lyrics(versetype, versetag[1:], versetext, lang) - song.search_lyrics += u' ' + self.remove_punctuation(versetext) + verse_tag = VerseType.Tags[VerseType.Other] + log.info(u'Versetype %s changing to %s' , verse_def, + new_verse_def) + verse_def = new_verse_def + sxml.add_verse_to_lyrics(verse_tag, verse_def[1:], verse_text, lang) + song.search_lyrics += u' ' + self.remove_punctuation(verse_text) song.search_lyrics = song.search_lyrics.lower() song.lyrics = unicode(sxml.extract_xml(), u'utf-8') if not len(self.verse_order_list) and \ self.verse_order_list_generated_useful: self.verse_order_list = self.verse_order_list_generated - for i, current_verse_tag in enumerate(self.verse_order_list): - if verses_changed_to_other.has_key(current_verse_tag): + for i, current_verse_def in enumerate(self.verse_order_list): + if verses_changed_to_other.has_key(current_verse_def): self.verse_order_list[i] = \ - verses_changed_to_other[current_verse_tag] + verses_changed_to_other[current_verse_def] song.verse_order = u' '.join(self.verse_order_list) song.copyright = self.copyright song.comments = self.comments @@ -343,8 +343,8 @@ class SongImport(QtCore.QObject): + u'========================================' print u'TITLE: ' + self.title print u'ALT TITLE: ' + self.alternate_title - for (versetag, versetext, lang) in self.verses: - print u'VERSE ' + versetag + u': ' + versetext + for (verse_def, verse_text, lang) in self.verses: + print u'VERSE ' + verse_def + u': ' + verse_text print u'ORDER: ' + u' '.join(self.verse_order_list) print u'GENERATED ORDER: ' + u' '.join(self.verse_order_list_generated) for author in self.authors: From 62091b92fe01f0f05c6166d1f597f80149725c94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Fri, 18 Feb 2011 10:25:43 +0200 Subject: [PATCH 15/16] These would have been left behind. 2% less typos now. --- openlp/plugins/songs/forms/editsongform.py | 2 +- openlp/plugins/songs/forms/editverseform.py | 2 +- openlp/plugins/songs/lib/__init__.py | 2 +- openlp/plugins/songs/lib/songimport.py | 20 ++++++++++---------- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index 0470a2d32..77caf012e 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -448,7 +448,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): if self.verse_form.exec_(): after_text, verse_tag, verse_num = self.verse_form.getVerse() verse_def = u'%s%s' % (verse_tag, verse_num) - item = QtGui.QTableWidgetItem(afterText) + item = QtGui.QTableWidgetItem(after_text) item.setData(QtCore.Qt.UserRole, QtCore.QVariant(verse_def)) item.setText(after_text) self.verseListWidget.setRowCount( diff --git a/openlp/plugins/songs/forms/editverseform.py b/openlp/plugins/songs/forms/editverseform.py index a5b8e2696..6156e6821 100644 --- a/openlp/plugins/songs/forms/editverseform.py +++ b/openlp/plugins/songs/forms/editverseform.py @@ -57,7 +57,7 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): QtCore.QObject.connect(self.verseTypeComboBox, QtCore.SIGNAL(u'currentIndexChanged(int)'), self.onVerseTypeComboBoxChanged) - self.verse_regex = re.compile(r'---\[(.+):\D*(\d.)\D*\]---') + self.verse_regex = re.compile(r'---\[(.+):\D*(\d*)\D*.*\]---') def contextMenu(self, point): item = self.serviceManagerList.itemAt(point) diff --git a/openlp/plugins/songs/lib/__init__.py b/openlp/plugins/songs/lib/__init__.py index 8b64618c0..95fae92a8 100644 --- a/openlp/plugins/songs/lib/__init__.py +++ b/openlp/plugins/songs/lib/__init__.py @@ -178,7 +178,7 @@ class VerseType(object): verse_index = VerseType.from_string(verse_name) if verse_index is None: verse_index = VerseType.from_translated_tag(verse_name) - elif verse_index is None: + if verse_index is None: verse_index = VerseType.from_tag(verse_name) return verse_index diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index f1f4b4249..e0e078c43 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -79,7 +79,7 @@ class SongImport(QtCore.QObject): self.verse_order_list_generated = [] self.verse_order_list = [] self.verses = [] - self.versecounts = {} + self.verse_counts = {} self.copyright_string = unicode(translate( 'SongsPlugin.SongImport', 'copyright')) self.copyright_symbol = unicode(translate( @@ -130,10 +130,10 @@ class SongImport(QtCore.QObject): return text def process_song_text(self, text): - versetexts = text.split(u'\n\n') - for versetext in versetexts: - if versetext.strip() != u'': - self.process_verse_text(versetext.strip()) + verse_texts = text.split(u'\n\n') + for verse_text in verse_texts: + if verse_text.strip() != u'': + self.process_verse_text(verse_text.strip()) def process_verse_text(self, text): lines = text.split(u'\n') @@ -227,10 +227,10 @@ class SongImport(QtCore.QObject): else: self.verse_counts[verse_def[0]] = 1 if len(verse_def) == 1: - verse_def += unicode(self.versecounts[verse_def[0]]) - elif int(verse_def[1:]) > self.versecounts[verse_def[0]]: - self.versecounts[verse_def[0]] = int(verse_def[1:]) - self.verses.append([verse_def, versetext.rstrip(), lang]) + verse_def += unicode(self.verse_counts[verse_def[0]]) + elif int(verse_def[1:]) > self.verse_counts[verse_def[0]]: + 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): @@ -278,7 +278,7 @@ class SongImport(QtCore.QObject): other_count = 1 for (verse_def, verse_text, lang) in self.verses: if verse_def[0].lower() in VerseType.Tags: - verse_def = verse_def[0].lower() + verse_tag = verse_def[0].lower() else: new_verse_def = u'%s%d' % (VerseType.Tags[VerseType.Other], other_count) From 57ffb1758b74f35e1f2714ca5077de8b58cd860c Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Fri, 18 Feb 2011 15:23:33 +0000 Subject: [PATCH 16/16] Fix mime data string --- openlp/core/lib/mediamanageritem.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index d4fdfff17..c2c2987c2 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -240,7 +240,7 @@ class MediaManagerItem(QtGui.QWidget): Creates the main widget for listing items the media item is tracking """ # Add the List widget - self.listView = ListWidgetWithDnD(self, self.title) + self.listView = ListWidgetWithDnD(self, self.plugin.name) self.listView.uniformItemSizes = True self.listView.setSpacing(1) self.listView.setSelectionMode(