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,15 +57,17 @@ class SongBeamerTypes(object):
u'Unknown': u'O'
}
class SongBeamerImport(SongImport):
"""
Import Song Beamer files(s)
Song Beamer file format is text based
in the beginning are one or more control tags written
Import Song Beamer files(s)
Song Beamer file format is text based
in the beginning are one or more control tags written
"""
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):