Fix EasyWorship import issues with missing verses and traceback on unknown chars.

Fixes: https://launchpad.net/bugs/1553922, https://launchpad.net/bugs/1547234
This commit is contained in:
Tomas Groth 2016-03-12 22:25:39 +01:00
parent 4b57a2bae6
commit 1dfad12edc
1 changed files with 40 additions and 32 deletions

View File

@ -289,40 +289,45 @@ class EasyWorshipSongImport(SongImport):
for i in range(rec_count): for i in range(rec_count):
if self.stop_import_flag: if self.stop_import_flag:
break break
raw_record = db_file.read(record_size) try:
self.fields = self.record_structure.unpack(raw_record) raw_record = db_file.read(record_size)
self.set_defaults() self.fields = self.record_structure.unpack(raw_record)
self.title = self.get_field(fi_title).decode(self.encoding) self.set_defaults()
# Get remaining fields. self.title = self.get_field(fi_title).decode(self.encoding)
copy = self.get_field(fi_copy) # Get remaining fields.
admin = self.get_field(fi_admin) copy = self.get_field(fi_copy)
ccli = self.get_field(fi_ccli) admin = self.get_field(fi_admin)
authors = self.get_field(fi_author) ccli = self.get_field(fi_ccli)
words = self.get_field(fi_words) authors = self.get_field(fi_author)
if copy: words = self.get_field(fi_words)
self.copyright = copy.decode(self.encoding)
if admin:
if copy: if copy:
self.copyright += ', ' self.copyright = copy.decode(self.encoding)
self.copyright += translate('SongsPlugin.EasyWorshipSongImport', if admin:
'Administered by %s') % admin.decode(self.encoding) if copy:
if ccli: self.copyright += ', '
self.ccli_number = ccli.decode(self.encoding) self.copyright += translate('SongsPlugin.EasyWorshipSongImport',
if authors: 'Administered by %s') % admin.decode(self.encoding)
authors = authors.decode(self.encoding) if ccli:
else: self.ccli_number = ccli.decode(self.encoding)
authors = '' if authors:
# Set the SongImport object members. authors = authors.decode(self.encoding)
self.set_song_import_object(authors, words) else:
if self.stop_import_flag: authors = ''
break # Set the SongImport object members.
if self.entry_error_log: self.set_song_import_object(authors, words)
if self.stop_import_flag:
break
if self.entry_error_log:
self.log_error(self.import_source,
translate('SongsPlugin.EasyWorshipSongImport', '"%s" could not be imported. %s')
% (self.title, self.entry_error_log))
self.entry_error_log = ''
elif not self.finish():
self.log_error(self.import_source)
except Exception as e:
self.log_error(self.import_source, self.log_error(self.import_source,
translate('SongsPlugin.EasyWorshipSongImport', '"%s" could not be imported. %s') translate('SongsPlugin.EasyWorshipSongImport', '"%s" could not be imported. %s')
% (self.title, self.entry_error_log)) % (self.title, e))
self.entry_error_log = ''
elif not self.finish():
self.log_error(self.import_source)
db_file.close() db_file.close()
self.memo_file.close() self.memo_file.close()
@ -368,7 +373,7 @@ class EasyWorshipSongImport(SongImport):
first_line_is_tag = False first_line_is_tag = False
# EW tags: verse, chorus, pre-chorus, bridge, tag, # EW tags: verse, chorus, pre-chorus, bridge, tag,
# intro, ending, slide # intro, ending, slide
for tag in VerseType.tags + ['tag', 'slide']: for tag in VerseType.names + ['tag', 'slide', 'end']:
tag = tag.lower() tag = tag.lower()
ew_tag = verse_split[0].strip().lower() ew_tag = verse_split[0].strip().lower()
if ew_tag.startswith(tag): if ew_tag.startswith(tag):
@ -390,6 +395,9 @@ class EasyWorshipSongImport(SongImport):
if not number_found: if not number_found:
verse_type += '1' verse_type += '1'
break break
# If the verse only consist of the tag-line, add an empty line to create an empty slide
if first_line_is_tag and len(verse_split) == 1:
verse_split.append("")
self.add_verse(verse_split[-1].strip() if first_line_is_tag else verse, verse_type) self.add_verse(verse_split[-1].strip() if first_line_is_tag else verse, verse_type)
if len(self.comments) > 5: if len(self.comments) > 5:
self.comments += str(translate('SongsPlugin.EasyWorshipSongImport', self.comments += str(translate('SongsPlugin.EasyWorshipSongImport',