diff --git a/openlp/plugins/bibles/bibleplugin.py b/openlp/plugins/bibles/bibleplugin.py
index 912a02212..5fafac65b 100644
--- a/openlp/plugins/bibles/bibleplugin.py
+++ b/openlp/plugins/bibles/bibleplugin.py
@@ -45,7 +45,7 @@ class BiblePlugin(Plugin):
def initialise(self):
log.info(u'bibles Initialising')
if self.biblemanager is None:
- self.biblemanager = BibleManager(self.config)
+ self.biblemanager = BibleManager(self, self.config)
Plugin.initialise(self)
self.insert_toolbox_item()
self.ImportBibleItem.setVisible(True)
@@ -90,4 +90,4 @@ class BiblePlugin(Plugin):
about_text = self.trUtf8('Bible Plugin
This '
'plugin allows bible verses from different sources to be '
'displayed on the screen during the service.')
- return about_text
\ No newline at end of file
+ return about_text
diff --git a/openlp/plugins/bibles/forms/bibleimportwizard.py b/openlp/plugins/bibles/forms/bibleimportwizard.py
index ec190182a..59e38e39a 100644
--- a/openlp/plugins/bibles/forms/bibleimportwizard.py
+++ b/openlp/plugins/bibles/forms/bibleimportwizard.py
@@ -91,15 +91,6 @@ class Ui_BibleImportWizard(object):
self.OsisLayout.setMargin(0)
self.OsisLayout.setSpacing(8)
self.OsisLayout.setObjectName(u'OsisLayout')
- self.OsisBibleNameLabel = QtGui.QLabel(self.OsisPage)
- self.OsisBibleNameLabel.setIndent(0)
- self.OsisBibleNameLabel.setObjectName(u'OsisBibleNameLabel')
- self.OsisLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
- self.OsisBibleNameLabel)
- self.OsisBibleNameEdit = QtGui.QLineEdit(self.OsisPage)
- self.OsisBibleNameEdit.setObjectName(u'OsisBibleNameEdit')
- self.OsisLayout.setWidget(0, QtGui.QFormLayout.FieldRole,
- self.OsisBibleNameEdit)
self.OsisLocationLabel = QtGui.QLabel(self.OsisPage)
self.OsisLocationLabel.setObjectName(u'OsisLocationLabel')
self.OsisLayout.setWidget(1, QtGui.QFormLayout.LabelRole,
@@ -307,7 +298,6 @@ class Ui_BibleImportWizard(object):
self.ImportLayout.addWidget(self.ImportProgressBar)
BibleImportWizard.addPage(self.ImportPage)
-
self.retranslateUi(BibleImportWizard)
self.FormatWidget.setCurrentIndex(0)
self.WebDownloadTabWidget.setCurrentIndex(0)
@@ -333,7 +323,6 @@ class Ui_BibleImportWizard(object):
self.FormatComboBox.setItemText(1, self.trUtf8('CSV'))
self.FormatComboBox.setItemText(2, self.trUtf8('OpenSong'))
self.FormatComboBox.setItemText(3, self.trUtf8('Web Download'))
- self.OsisBibleNameLabel.setText(self.trUtf8('Bible Name:'))
self.OsisLocationLabel.setText(self.trUtf8('File Location:'))
self.BooksLocationLabel.setText(self.trUtf8('Books Location:'))
self.VerseLocationLabel.setText(self.trUtf8('Verse Location:'))
@@ -361,4 +350,4 @@ class Ui_BibleImportWizard(object):
self.ImportPage.setSubTitle(
self.trUtf8('Please wait while your Bible is imported.'))
self.ImportProgressLabel.setText(self.trUtf8('Ready.'))
- #self.ImportProgressBar.setFormat(u'%p')
+ self.ImportProgressBar.setFormat(u'%p%')
diff --git a/openlp/plugins/bibles/forms/importwizardform.py b/openlp/plugins/bibles/forms/importwizardform.py
index 4fcb18ad4..8be453db0 100644
--- a/openlp/plugins/bibles/forms/importwizardform.py
+++ b/openlp/plugins/bibles/forms/importwizardform.py
@@ -27,6 +27,7 @@ import logging
import os
import os.path
from time import sleep
+import csv
from PyQt4 import QtCore, QtGui
@@ -107,14 +108,6 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard):
elif self.currentId() == 1:
# Select page
if self.field(u'source_format').toInt()[0] == BibleFormat.OSIS:
- if self.field(u'osis_biblename').toString() == u'':
- QtGui.QMessageBox.critical(self,
- self.trUtf8('Invalid Bible Name'),
- self.trUtf8('You need to specify a name for your '
- 'Bible!'),
- QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
- self.OsisBibleNameEdit.setFocus()
- return False
if self.field(u'osis_location').toString() == u'':
QtGui.QMessageBox.critical(self,
self.trUtf8('Invalid Bible Location'),
@@ -218,8 +211,6 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard):
def registerFields(self):
self.SelectPage.registerField(
u'source_format', self.FormatComboBox)
- self.SelectPage.registerField(
- u'osis_biblename', self.OsisBibleNameEdit)
self.SelectPage.registerField(
u'osis_location', self.OSISLocationEdit)
self.SelectPage.registerField(
@@ -247,7 +238,6 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard):
def setDefaults(self):
self.setField(u'source_format', 0)
- self.setField(u'osis_biblename', u'')
self.setField(u'osis_location', u'')
self.setField(u'csv_booksfile', u'')
self.setField(u'csv_versefile', u'')
@@ -276,29 +266,33 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard):
fbibles = None
try:
self.web_bible_list[DownloadLocation.Crosswalk] = {}
- fbibles = open(os.path.join(filepath, u'crosswalkbooks.csv'), 'r')
- for line in fbibles:
- parts = line.split(u',')
- self.web_bible_list[DownloadLocation.Crosswalk][parts[0]] = \
- parts[1].rstrip()
+ books_file = open(os.path.join(filepath, u'crosswalkbooks.csv'), 'r')
+ dialect = csv.Sniffer().sniff(books_file.read(1024))
+ books_file.seek(0)
+ books_reader = csv.reader(books_file, dialect)
+ for line in books_reader:
+ self.web_bible_list[DownloadLocation.Crosswalk][line[0]] = \
+ unicode(line[1], u'utf-8').strip()
except:
log.exception(u'Crosswalk resources missing')
finally:
- if fbibles:
- fbibles.close()
+ if books_file:
+ books_file.close()
#Load and store BibleGateway Bibles
try:
self.web_bible_list[DownloadLocation.BibleGateway] = {}
- fbibles = open(os.path.join(filepath, u'biblegateway.csv'), 'r')
- for line in fbibles:
- parts = line.split(u',')
- self.web_bible_list[DownloadLocation.BibleGateway][parts[0]] = \
- parts[1].rstrip()
+ books_file = open(os.path.join(filepath, u'biblegateway.csv'), 'r')
+ dialect = csv.Sniffer().sniff(books_file.read(1024))
+ books_file.seek(0)
+ books_reader = csv.reader(books_file, dialect)
+ for line in books_reader:
+ self.web_bible_list[DownloadLocation.BibleGateway][line[0]] = \
+ unicode(line[1], u'utf-8').strip()
except:
log.exception(u'Biblegateway resources missing')
finally:
- if fbibles:
- fbibles.close()
+ if books_file:
+ books_file.close()
def getFileName(self, title, editbox):
filename = QtGui.QFileDialog.getOpenFileName(self, title,
diff --git a/openlp/plugins/bibles/lib/csvbible.py b/openlp/plugins/bibles/lib/csvbible.py
index f98ef0c86..d0db5159d 100644
--- a/openlp/plugins/bibles/lib/csvbible.py
+++ b/openlp/plugins/bibles/lib/csvbible.py
@@ -37,13 +37,13 @@ class CSVBible(BibleDB):
This class provides a specialisation for importing of CSV Bibles.
"""
- def __init__(self, **kwargs):
+ def __init__(self, parent, **kwargs):
"""
Loads a Bible from a pair of CVS files passed in
This class assumes the files contain all the information and
a clean bible is being loaded.
"""
- BibleDB.__init__(self, **kwargs)
+ BibleDB.__init__(self, parent, **kwargs)
log.info(self.__class__.__name__)
if u'booksfile' not in kwargs:
raise KeyError(u'You have to supply a file to import books from.')
diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py
index 2131737fd..5c7229f4a 100644
--- a/openlp/plugins/bibles/lib/db.py
+++ b/openlp/plugins/bibles/lib/db.py
@@ -42,7 +42,7 @@ class BibleDB(QtCore.QObject):
rather than depending on yet another object.
"""
- def __init__(self, **kwargs):
+ def __init__(self, parent, **kwargs):
"""
The constructor loads up the database and creates and initialises the
tables if the database doesn't exist.
@@ -60,6 +60,7 @@ class BibleDB(QtCore.QObject):
The configuration object, passed in from the plugin.
"""
log.info(u'BibleDBimpl loaded')
+ QtCore.QObject.__init__(self)
if u'path' not in kwargs:
raise KeyError(u'Missing keyword argument "path".')
if u'name' not in kwargs:
diff --git a/openlp/plugins/bibles/lib/http.py b/openlp/plugins/bibles/lib/http.py
index 5b75407be..4472000d5 100644
--- a/openlp/plugins/bibles/lib/http.py
+++ b/openlp/plugins/bibles/lib/http.py
@@ -142,7 +142,7 @@ class CWExtract(BibleCommon):
class HTTPBible(BibleDB):
log.info(u'%s loaded', __name__)
- def __init__(self, **kwargs):
+ def __init__(self, parent, **kwargs):
"""
Finds all the bibles defined for the system
Creates an Interface Object for each bible containing connection
@@ -152,7 +152,7 @@ class HTTPBible(BibleDB):
Init confirms the bible exists and stores the database path.
"""
- BibleDB.__init__(self, **kwargs)
+ BibleDB.__init__(self, parent, **kwargs)
if u'download_source' not in kwargs:
raise KeyError(u'Missing keyword argument "download_source"')
if u'download_name' not in kwargs:
@@ -267,13 +267,10 @@ class HTTPBible(BibleDB):
def set_books(self, books):
self.books = books
- def lookup_book(self, book):
- log.debug('Looking up "%s" in %s', (book, self.books))
- if book in self.books:
- return self.books[book]
- else:
- for details in self.books:
- if self.books[details][u'abbr'] == book:
- return self.books[details]
- return None
+ def lookup_book(self, name):
+ log.debug('Looking up "%s" in %s', (name, self.books))
+ for book in self.books:
+ if book[u'name'] == name or book[u'abbr'] == name:
+ return book
+ return None
diff --git a/openlp/plugins/bibles/lib/manager.py b/openlp/plugins/bibles/lib/manager.py
index 88982a8bf..3ca76bbab 100644
--- a/openlp/plugins/bibles/lib/manager.py
+++ b/openlp/plugins/bibles/lib/manager.py
@@ -90,7 +90,7 @@ class BibleManager(object):
log = logging.getLogger(u'BibleManager')
log.info(u'Bible manager loaded')
- def __init__(self, config):
+ def __init__(self, parent, config):
"""
Finds all the bibles defined for the system and creates an interface
object for each bible containing connection information. Throws
@@ -101,8 +101,9 @@ class BibleManager(object):
``config``
The plugin's configuration object.
"""
- self.config = config
log.debug(u'Bible Initialising')
+ self.config = config
+ self.parent = parent
self.web = u'Web'
self.db_cache = None
self.http_cache = None
@@ -120,18 +121,19 @@ class BibleManager(object):
filepath, u'..', u'resources', u'httpbooks.csv'))
books_file = None
try:
- self.http_books = {}
+ self.http_books = []
books_file = open(filepath, u'r')
dialect = csv.Sniffer().sniff(books_file.read(1024))
books_file.seek(0)
books_reader = csv.reader(books_file, dialect)
for line in books_reader:
- self.http_books[line[0]] = {
- u'name': line[0],
- u'abbr': line[1],
+ self.http_books.append({
+ u'name': unicode(line[0]),
+ u'abbr': unicode(line[1]),
u'test': line[2],
- u'chap': line[3]
- }
+ u'chap': line[3],
+ u'ordr': order
+ })
except:
log.exception(u'Failed to load http books.')
finally:
@@ -148,13 +150,13 @@ class BibleManager(object):
self.web_bibles_present = False
for filename in files:
name, extension = os.path.splitext(filename)
- self.db_cache[name] = BibleDB(path=self.path, name=name, config=self.config)
+ self.db_cache[name] = BibleDB(self.parent, path=self.path, name=name, config=self.config)
# look to see if lazy load bible exists and get create getter.
source = self.db_cache[name].get_meta(u'download source')
if source:
self.web_bibles_present = True
download_name = self.db_cache[name].get_meta(u'download name').value
- web_bible = HTTPBible(path=self.path, name=name,
+ web_bible = HTTPBible(self.parent, path=self.path, name=name,
config=self.config, download_source=source.value,
download_name=download_name)
meta_proxy = self.db_cache[name].get_meta(u'proxy url')
@@ -187,7 +189,7 @@ class BibleManager(object):
class_ = BibleFormat.get_class(type)
kwargs['path'] = self.path
kwargs['config'] = self.config
- importer = class_(**kwargs)
+ importer = class_(self.parent, **kwargs)
name = importer.register(self.import_wizard)
self.db_cache[name] = importer
return importer.do_import()
@@ -381,8 +383,12 @@ class BibleManager(object):
"""
Check cache to see if new bible
"""
+ if not isinstance(name, unicode):
+ name = unicode(name, u'utf8')
for bible, db_object in self.db_cache.iteritems():
log.debug(u'Bible from cache in is_new_bible %s', bible)
+ if not isinstance(bible, unicode):
+ bible = unicode(bible, u'utf8')
if bible == name:
return True
return False
diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py
index 341d36c6f..213c79c54 100644
--- a/openlp/plugins/bibles/lib/mediaitem.py
+++ b/openlp/plugins/bibles/lib/mediaitem.py
@@ -357,7 +357,7 @@ class BibleMediaItem(MediaManagerItem):
def onNoBookFound(self):
QtGui.QMessageBox.critical(self,
self.trUtf8('No Book Found'),
- self.trUtf8('No matching Book could be found in this Bible.'),
+ self.trUtf8('No matching book could be found in this Bible.'),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok),
QtGui.QMessageBox.Ok
)
diff --git a/openlp/plugins/bibles/lib/opensong.py b/openlp/plugins/bibles/lib/opensong.py
index 64eeeb0f9..9e0c77b13 100644
--- a/openlp/plugins/bibles/lib/opensong.py
+++ b/openlp/plugins/bibles/lib/opensong.py
@@ -42,18 +42,18 @@ class OpenSongBible(BibleDB):
OpenSong Bible format importer class.
"""
- def __init__(self, **kwargs):
+ def __init__(self, parent, **kwargs):
"""
Constructor to create and set up an instance of the OpenSongBible
class. This class is used to import Bibles from OpenSong's XML format.
"""
log.debug(__name__)
- BibleDB.__init__(self, **kwargs)
+ BibleDB.__init__(self, parent, **kwargs)
if 'filename' not in kwargs:
raise KeyError(u'You have to supply a file name to import from.')
self.filename = kwargs['filename']
- #QtCore.QObject.connect(Receiver.get_receiver(),
- # QtCore.SIGNAL(u'openlpstopimport'), self.stop_import)
+ QtCore.QObject.connect(Receiver.get_receiver(),
+ QtCore.SIGNAL(u'openlpstopimport'), self.stop_import)
def stop_import(self):
"""
@@ -69,27 +69,20 @@ class OpenSongBible(BibleDB):
log.debug(u'Starting OpenSong import from "%s"' % self.filename)
self.filename = unicode(self.filename, u'utf-8')
self.wizard.incrementProgressBar(u'Preparing for import...')
- detect_file = None
- try:
- detect_file = open(self.filename, u'r')
- details = chardet.detect(detect_file.read())
- except:
- log.exception(u'Failed to detect OpenSong file encoding')
- return False
- finally:
- if detect_file:
- detect_file.close()
file = None
success = True
try:
- file = codecs.open(self.filename, u'r', details['encoding'])
+ # NOTE: We don't need to do any of the normal encoding detection
+ # here, because lxml does it's own encoding detection, and the two
+ # mechanisms together interfere with each other.
+ file = open(self.filename, u'r')
opensong = objectify.parse(file)
bible = opensong.getroot()
for book in bible.b:
if self.stop_import:
break
- db_book = self.create_book(book.attrib[u'n'],
- book.attrib[u'n'][:4])
+ db_book = self.create_book(unicode(book.attrib[u'n']),
+ unicode(book.attrib[u'n'][:4]))
for chapter in book.c:
if self.stop_import:
break
@@ -100,12 +93,12 @@ class OpenSongBible(BibleDB):
db_book.id,
int(chapter.attrib[u'n']),
int(verse.attrib[u'n']),
- verse.text
+ unicode(verse.text)
)
Receiver.send_message(u'process_events')
self.wizard.incrementProgressBar(
- QtCore.QString('Importing %s %s' % \
- (db_book.name, chapter.attrib[u'n'])))
+ QtCore.QString('%s %s %s' % (self.trUtf8('Importing'),\
+ db_book.name, chapter.attrib[u'n'])))
self.commit()
except:
log.exception(u'Loading bible from OpenSong file failed')
diff --git a/openlp/plugins/bibles/lib/osis.py b/openlp/plugins/bibles/lib/osis.py
index a7e4ba374..b68bd5ff5 100644
--- a/openlp/plugins/bibles/lib/osis.py
+++ b/openlp/plugins/bibles/lib/osis.py
@@ -43,13 +43,13 @@ class OSISBible(BibleDB):
log = logging.getLogger(u'BibleOSISImpl')
log.info(u'BibleOSISImpl loaded')
- def __init__(self, **kwargs):
+ def __init__(self, parent, **kwargs):
"""
Constructor to create and set up an instance of the OpenSongBible
class. This class is used to import Bibles from OpenSong's XML format.
"""
log.debug(__name__)
- BibleDB.__init__(self, **kwargs)
+ BibleDB.__init__(self, parent, **kwargs)
if u'filename' not in kwargs:
raise KeyError(u'You have to supply a file name to import from.')
self.filename = kwargs[u'filename']
diff --git a/openlp/plugins/custom/forms/editcustomform.py b/openlp/plugins/custom/forms/editcustomform.py
index 98eb5598a..e701c0938 100644
--- a/openlp/plugins/custom/forms/editcustomform.py
+++ b/openlp/plugins/custom/forms/editcustomform.py
@@ -153,10 +153,10 @@ class EditCustomForm(QtGui.QDialog, Ui_customEditDialog):
sxml.add_verse_to_lyrics(u'custom', unicode(count),
unicode(self.VerseListView.item(i).text()))
count += 1
- self.customSlide.title = unicode(self.TitleEdit.displayText())
- self.customSlide.text = unicode(sxml.extract_xml())
- self.customSlide.credits = unicode(self.CreditEdit.displayText())
- self.customSlide.theme_name = unicode(self.ThemeComboBox.currentText())
+ self.customSlide.title = unicode(self.TitleEdit.displayText(), u'utf-8')
+ self.customSlide.text = unicode(sxml.extract_xml(), u'utf-8')
+ self.customSlide.credits = unicode(self.CreditEdit.displayText(), u'utf-8')
+ self.customSlide.theme_name = unicode(self.ThemeComboBox.currentText(), u'utf-8')
self.custommanager.save_slide(self.customSlide)
return True
@@ -257,4 +257,4 @@ class EditCustomForm(QtGui.QDialog, Ui_customEditDialog):
if len(self.VerseTextEdit.toPlainText()) > 0:
self.VerseTextEdit.setFocus()
return False, self.trUtf8('You have unsaved data')
- return True, u''
\ No newline at end of file
+ return True, u''
diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py
index 9aef321e5..f5fe0686b 100644
--- a/openlp/plugins/songs/lib/mediaitem.py
+++ b/openlp/plugins/songs/lib/mediaitem.py
@@ -185,8 +185,13 @@ class SongMediaItem(MediaManagerItem):
if author_list != u'':
author_list = author_list + u', '
author_list = author_list + author.display_name
- song_detail = unicode(self.trUtf8('%s (%s)' % \
- (unicode(song.title), unicode(author_list))))
+ if not isinstance(author_list, unicode):
+ author_list = unicode(author_list, u'utf8')
+ if isinstance(song.title, unicode):
+ song_title = song.title
+ else:
+ song_title = unicode(song.title, u'utf8')
+ song_detail = u'%s (%s)' % (song_title, author_list)
song_name = QtGui.QListWidgetItem(song_detail)
song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id))
self.ListView.addItem(song_name)
@@ -339,4 +344,4 @@ class SongMediaItem(MediaManagerItem):
service_item.audit = [
song.title, author_audit, song.copyright, song.ccli_number
]
- return True
\ No newline at end of file
+ return True