SongBeamer import clean ups and tweaks

This commit is contained in:
Andreas Preikschat 2010-11-26 15:23:48 +01:00
parent d9b7dcd060
commit 66f230169d
3 changed files with 98 additions and 77 deletions

View File

@ -507,8 +507,7 @@ class SongImportForm(QtGui.QWizard, Ui_SongImportWizard):
filenames=self.getListOfFiles(
self.songBeamerFileListWidget)
)
success = importer.do_import()
if success:
if importer.do_import():
# reload songs
self.importProgressLabel.setText(
translate('SongsPlugin.SongImportForm', 'Finished import.'))

View File

@ -57,6 +57,7 @@ class SongBeamerTypes(object):
u'Unknown': u'O'
}
class SongBeamerImport(SongImport):
"""
Import Song Beamer files(s)
@ -66,6 +67,7 @@ class SongBeamerImport(SongImport):
def __init__(self, master_manager, **kwargs):
"""
Initialise the import.
``master_manager``
The song manager for the running OpenLP installation.
"""
@ -88,6 +90,7 @@ class SongBeamerImport(SongImport):
# TODO: check that it is a valid SongBeamer file
self.current_verse = u''
self.current_verse_type = u'V'
read_verses = False
self.file_name = os.path.split(file)[1]
self.import_wizard.incrementProgressBar(
"Importing %s" % (self.file_name), 0)
@ -100,27 +103,26 @@ class SongBeamerImport(SongImport):
else:
return False
for line in self.songData:
line = line.strip()
if line.startswith('#'):
log.debug(u'find tag: %s' % line)
if not self.parse_tags(line):
return False
elif line.startswith('---'):
log.debug(u'find ---')
if len(self.current_verse) > 0:
# Just make sure that the line is of the type 'Unicode'.
line = unicode(line).strip()
if line.startswith(u'#') and not read_verses:
self.parse_tags(line)
elif line.startswith(u'---'):
if self.current_verse:
self.add_verse(self.current_verse,
self.current_verse_type)
self.current_verse = u''
self.current_verse_type = u'V'
self.read_verse = True
self.verse_start = True
elif self.read_verse:
if self.verse_start:
self.check_verse_marks(line)
self.verse_start = False
read_verses = True
verse_start = True
elif read_verses:
if verse_start:
verse_start = False
if not self.check_verse_marks(line):
self.current_verse = u'%s\n' % line
else:
self.current_verse += u'%s\n' % line
if len(self.current_verse) > 0:
if self.current_verse:
self.add_verse(self.current_verse, self.current_verse_type)
self.finish()
self.import_wizard.incrementProgressBar(
@ -128,106 +130,125 @@ class SongBeamerImport(SongImport):
return True
def parse_tags(self, line):
tag_val = line.split('=')
if len(tag_val[0]) == 0 or len(tag_val[1]) == 0:
return True
if tag_val[0] == '#(c)':
"""
Parses a meta data line.
``line``
The line in the file. It should consist of a tag and a value
for this tag. (unicode)
u'#Title=Nearer my God to Thee'
"""
tag_val = line.split(u'=', 1)
if len(tag_val) == 1:
return
if not tag_val[0] or not tag_val[1]:
return
if tag_val[0] == u'#(c)':
self.add_copyright(tag_val[1])
elif tag_val[0] == '#AddCopyrightInfo':
elif tag_val[0] == u'#AddCopyrightInfo':
pass
elif tag_val[0] == '#Author':
#TODO split Authors
self.add_author(tag_val[1])
elif tag_val[0] == '#BackgroundImage':
elif tag_val[0] == u'#Author':
self.parse_author(tag_val[1])
elif tag_val[0] == u'#BackgroundImage':
pass
elif tag_val[0] == '#Bible':
elif tag_val[0] == u'#Bible':
pass
elif tag_val[0] == '#Categories':
elif tag_val[0] == u'#Categories':
self.topics = line.split(',')
elif tag_val[0] == '#CCLI':
elif tag_val[0] == u'#CCLI':
self.ccli_number = tag_val[1]
elif tag_val[0] == '#Chords':
elif tag_val[0] == u'#Chords':
pass
elif tag_val[0] == '#ChurchSongID':
elif tag_val[0] == u'#ChurchSongID':
pass
elif tag_val[0] == '#ColorChords':
elif tag_val[0] == u'#ColorChords':
pass
elif tag_val[0] == '#Comments':
elif tag_val[0] == u'#Comments':
self.comments = tag_val[1]
elif tag_val[0] == '#Editor':
elif tag_val[0] == u'#Editor':
pass
elif tag_val[0] == '#Font':
elif tag_val[0] == u'#Font':
pass
elif tag_val[0] == '#FontLang2':
elif tag_val[0] == u'#FontLang2':
pass
elif tag_val[0] == '#FontSize':
elif tag_val[0] == u'#FontSize':
pass
elif tag_val[0] == '#Format':
elif tag_val[0] == u'#Format':
pass
elif tag_val[0] == '#Format_PreLine':
elif tag_val[0] == u'#Format_PreLine':
pass
elif tag_val[0] == '#Format_PrePage':
elif tag_val[0] == u'#Format_PrePage':
pass
elif tag_val[0] == '#ID':
elif tag_val[0] == u'#ID':
pass
elif tag_val[0] == '#Key':
elif tag_val[0] == u'#Key':
pass
elif tag_val[0] == '#Keywords':
elif tag_val[0] == u'#Keywords':
pass
elif tag_val[0] == '#LangCount':
elif tag_val[0] == u'#LangCount':
pass
elif tag_val[0] == '#Melody':
#TODO split Authors
self.add_author(tag_val[1])
elif tag_val[0] == '#NatCopyright':
elif tag_val[0] == u'#Melody':
self.parse_author(tag_val[1])
elif tag_val[0] == u'#NatCopyright':
pass
elif tag_val[0] == '#OTitle':
elif tag_val[0] == u'#OTitle':
pass
elif tag_val[0] == '#OutlineColor':
elif tag_val[0] == u'#OutlineColor':
pass
elif tag_val[0] == '#OutlinedFont':
elif tag_val[0] == u'#OutlinedFont':
pass
elif tag_val[0] == '#QuickFind':
elif tag_val[0] == u'#QuickFind':
pass
elif tag_val[0] == '#Rights':
elif tag_val[0] == u'#Rights':
song_book_pub = tag_val[1]
elif tag_val[0] == '#Songbook':
elif tag_val[0] == u'#Songbook':
book_num = tag_val[1].split(' / ')
self.song_book_name = book_num[0]
if len(book_num) == book_num[1]:
self.song_number = u''
elif tag_val[0] == '#Speed':
elif tag_val[0] == u'#Speed':
pass
elif tag_val[0] == '#TextAlign':
elif tag_val[0] == u'#TextAlign':
pass
elif tag_val[0] == '#Title':
elif tag_val[0] == u'#Title':
self.title = u'%s' % tag_val[1]
elif tag_val[0] == '#TitleAlign':
elif tag_val[0] == u'#TitleAlign':
pass
elif tag_val[0] == '#TitleFontSize':
elif tag_val[0] == u'#TitleFontSize':
pass
elif tag_val[0] == '#TitleLang2':
elif tag_val[0] == u'#TitleLang2':
pass
elif tag_val[0] == '#TitleLang3':
elif tag_val[0] == u'#TitleLang3':
pass
elif tag_val[0] == '#TitleLang4':
elif tag_val[0] == u'#TitleLang4':
pass
elif tag_val[0] == '#Translation':
elif tag_val[0] == u'#Translation':
pass
elif tag_val[0] == '#Transpose':
elif tag_val[0] == u'#Transpose':
pass
elif tag_val[0] == '#TransposeAccidental':
elif tag_val[0] == u'#TransposeAccidental':
pass
elif tag_val[0] == '#Version':
elif tag_val[0] == u'#Version':
pass
else:
pass
return True
def check_verse_marks(self, line):
marks = line.split(' ')
"""
Check and add the verse's MarkType. Returns ``True`` if the given mark
is correct otherwise ``False``.
``line``
The line to check for marks (unicode).
"""
marks = line.split(u' ')
if len(marks) <= 2 and marks[0] in SongBeamerTypes.MarkTypes:
self.current_verse_type = SongBeamerTypes.MarkTypes[marks[0]]
if len(marks) == 2:
#TODO: may check, because of only digits are allowed
self.current_verse_type += marks[1]
# If we have a digit, we append it to current_verse_type.
try:
self.current_verse_type += u'%s' % int(marks[1])
except ValueError:
pass
return True
else:
return False

View File

@ -254,7 +254,8 @@ class SongImport(QtCore.QObject):
All fields have been set to this song. Write it away
"""
if not self.authors:
self.authors.append(u'Author unknown')
self.authors.append(unicode(translate('SongsPlugin.SongImport',
'Author unknown')))
self.commit_song()
def commit_song(self):