forked from openlp/openlp
Fixes error when trying to import openlp.org v1 bible or songs db from a file with non-ascii characters. Also some notes about error handling.
This commit is contained in:
parent
e974df4c54
commit
35665ff336
@ -27,6 +27,7 @@
|
|||||||
|
|
||||||
import logging
|
import logging
|
||||||
import sqlite
|
import sqlite
|
||||||
|
import sys
|
||||||
|
|
||||||
from openlp.core.lib import Receiver
|
from openlp.core.lib import Receiver
|
||||||
from openlp.core.ui.wizard import WizardStrings
|
from openlp.core.ui.wizard import WizardStrings
|
||||||
@ -53,9 +54,14 @@ class OpenLP1Bible(BibleDB):
|
|||||||
connection = None
|
connection = None
|
||||||
cursor = None
|
cursor = None
|
||||||
try:
|
try:
|
||||||
connection = sqlite.connect(self.filename)
|
connection = sqlite.connect(
|
||||||
|
self.filename.encode(sys.getfilesystemencoding()))
|
||||||
cursor = connection.cursor()
|
cursor = connection.cursor()
|
||||||
except:
|
except sqlite.DatabaseError:
|
||||||
|
log.exception(u'File "%s" is encrypted or not a sqlite database, '
|
||||||
|
'therefore not an openlp.org 1.x database either' % self.filename)
|
||||||
|
# Please add an user error here!
|
||||||
|
# This file is not an openlp.org 1.x bible database.
|
||||||
return False
|
return False
|
||||||
#Create the bible language
|
#Create the bible language
|
||||||
language_id = self.get_language(bible_name)
|
language_id = self.get_language(bible_name)
|
||||||
@ -63,7 +69,17 @@ class OpenLP1Bible(BibleDB):
|
|||||||
log.exception(u'Importing books from "%s" failed' % self.filename)
|
log.exception(u'Importing books from "%s" failed' % self.filename)
|
||||||
return False
|
return False
|
||||||
# Create all books.
|
# Create all books.
|
||||||
cursor.execute(u'SELECT id, testament_id, name, abbreviation FROM book')
|
try:
|
||||||
|
cursor.execute(
|
||||||
|
u'SELECT id, testament_id, name, abbreviation FROM book')
|
||||||
|
except sqlite.DatabaseError as error:
|
||||||
|
log.exception(u'DatabaseError: %s' % error)
|
||||||
|
if error == 'no such table: book':
|
||||||
|
# Please add an user error here!
|
||||||
|
# This file is not an openlp.org 1.x bible database.
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
raise sqlite.DatabaseError(error)
|
||||||
books = cursor.fetchall()
|
books = cursor.fetchall()
|
||||||
self.wizard.progressBar.setMaximum(len(books) + 1)
|
self.wizard.progressBar.setMaximum(len(books) + 1)
|
||||||
for book in books:
|
for book in books:
|
||||||
|
@ -165,7 +165,8 @@ class OpenLP1SongImport(SongImport):
|
|||||||
Detect character encoding of an openlp.org 1.x song database.
|
Detect character encoding of an openlp.org 1.x song database.
|
||||||
"""
|
"""
|
||||||
# Connect to the database.
|
# Connect to the database.
|
||||||
connection = sqlite.connect(self.importSource, mode=0444)
|
connection = sqlite.connect(self.importSource.encode(
|
||||||
|
sys.getfilesystemencoding()), mode=0444)
|
||||||
cursor = connection.cursor()
|
cursor = connection.cursor()
|
||||||
|
|
||||||
detector = UniversalDetector()
|
detector = UniversalDetector()
|
||||||
|
Loading…
Reference in New Issue
Block a user