forked from openlp/openlp
SongBeamer import clean ups and tweaks
This commit is contained in:
parent
d9b7dcd060
commit
66f230169d
@ -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.'))
|
||||
|
@ -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:
|
||||
self.add_verse(self.current_verse,
|
||||
# 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
|
||||
|
@ -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):
|
||||
|
Loading…
Reference in New Issue
Block a user