Merged in OpenSong/Bible importer branch.

bzr-revno: 692
This commit is contained in:
Raoul Snyman 2009-12-24 21:20:55 +02:00
commit 0d5d6ae436
15 changed files with 1599 additions and 753 deletions

View File

@ -23,6 +23,6 @@
# Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Temple Place, Suite 330, Boston, MA 02111-1307 USA #
############################################################################### ###############################################################################
from bibleimportform import BibleImportForm from importwizardform import ImportWizardForm
__all__ = ['BibleImportForm'] __all__ = ['ImportWizardForm']

View File

@ -1,259 +0,0 @@
# -*- coding: utf-8 -*-
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2009 Raoul Snyman #
# Portions copyright (c) 2008-2009 Tim Bentley, Jonathan Corwin, Michael #
# Gorven, Scott Guerrieri, Maikel Stuivenberg, Martin Thompson, Jon Tibble, #
# Carsten Tinggaard #
# --------------------------------------------------------------------------- #
# This program is free software; you can redistribute it and/or modify it #
# under the terms of the GNU General Public License as published by the Free #
# Software Foundation; version 2 of the License. #
# #
# This program is distributed in the hope that it will be useful, but WITHOUT #
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
# more details. #
# #
# You should have received a copy of the GNU General Public License along #
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
from PyQt4 import QtCore, QtGui
from openlp.core.lib import build_icon
class Ui_BibleImportDialog(object):
def setupUi(self, BibleImportDialog):
BibleImportDialog.setObjectName(u'BibleImportDialog')
BibleImportDialog.resize(500, 686)
icon = build_icon(u':/icon/openlp.org-icon-32.bmp')
BibleImportDialog.setWindowIcon(icon)
self.LicenceDetailsGroupBox = QtGui.QGroupBox(BibleImportDialog)
self.LicenceDetailsGroupBox.setGeometry(QtCore.QRect(10, 400, 480, 151))
self.LicenceDetailsGroupBox.setMinimumSize(QtCore.QSize(0, 123))
self.LicenceDetailsGroupBox.setObjectName(u'LicenceDetailsGroupBox')
self.formLayout = QtGui.QFormLayout(self.LicenceDetailsGroupBox)
self.formLayout.setMargin(8)
self.formLayout.setHorizontalSpacing(8)
self.formLayout.setObjectName(u'formLayout')
self.VersionNameLabel = QtGui.QLabel(self.LicenceDetailsGroupBox)
self.VersionNameLabel.setObjectName(u'VersionNameLabel')
self.formLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.VersionNameLabel)
self.VersionNameEdit = QtGui.QLineEdit(self.LicenceDetailsGroupBox)
self.VersionNameEdit.setObjectName(u'VersionNameEdit')
self.formLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.VersionNameEdit)
self.CopyrightLabel = QtGui.QLabel(self.LicenceDetailsGroupBox)
self.CopyrightLabel.setObjectName(u'CopyrightLabel')
self.formLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.CopyrightLabel)
self.CopyrightEdit = QtGui.QLineEdit(self.LicenceDetailsGroupBox)
self.CopyrightEdit.setObjectName(u'CopyrightEdit')
self.formLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.CopyrightEdit)
self.PermisionLabel = QtGui.QLabel(self.LicenceDetailsGroupBox)
self.PermisionLabel.setObjectName(u'PermisionLabel')
self.formLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.PermisionLabel)
self.PermisionEdit = QtGui.QLineEdit(self.LicenceDetailsGroupBox)
self.PermisionEdit.setObjectName(u'PermisionEdit')
self.formLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.PermisionEdit)
self.MessageLabel = QtGui.QLabel(BibleImportDialog)
self.MessageLabel.setGeometry(QtCore.QRect(20, 670, 271, 17))
self.MessageLabel.setObjectName(u'MessageLabel')
self.ProgressGroupBox = QtGui.QGroupBox(BibleImportDialog)
self.ProgressGroupBox.setGeometry(QtCore.QRect(10, 550, 480, 70))
self.ProgressGroupBox.setObjectName(u'ProgressGroupBox')
self.gridLayout_3 = QtGui.QGridLayout(self.ProgressGroupBox)
self.gridLayout_3.setObjectName(u'gridLayout_3')
self.ProgressBar = QtGui.QProgressBar(self.ProgressGroupBox)
self.ProgressBar.setProperty(u'value', QtCore.QVariant(0))
self.ProgressBar.setInvertedAppearance(False)
self.ProgressBar.setObjectName(u'ProgressBar')
self.gridLayout_3.addWidget(self.ProgressBar, 0, 0, 1, 1)
self.layoutWidget = QtGui.QWidget(BibleImportDialog)
self.layoutWidget.setGeometry(QtCore.QRect(310, 630, 180, 38))
self.layoutWidget.setObjectName(u'layoutWidget')
self.horizontalLayout = QtGui.QHBoxLayout(self.layoutWidget)
self.horizontalLayout.setMargin(6)
self.horizontalLayout.setObjectName(u'horizontalLayout')
self.ImportButton = QtGui.QPushButton(self.layoutWidget)
self.ImportButton.setObjectName(u'ImportButton')
self.horizontalLayout.addWidget(self.ImportButton)
self.CancelButton = QtGui.QPushButton(self.layoutWidget)
self.CancelButton.setObjectName(u'CancelButton')
self.horizontalLayout.addWidget(self.CancelButton)
self.tabWidget = QtGui.QTabWidget(BibleImportDialog)
self.tabWidget.setGeometry(QtCore.QRect(10, 30, 480, 361))
self.tabWidget.setObjectName(u'tabWidget')
self.OsisTab = QtGui.QWidget()
self.OsisTab.setObjectName(u'OsisTab')
self.OSISGroupBox = QtGui.QGroupBox(self.OsisTab)
self.OSISGroupBox.setGeometry(QtCore.QRect(10, 10, 460, 141))
self.OSISGroupBox.setObjectName(u'OSISGroupBox')
self.gridLayout_2 = QtGui.QGridLayout(self.OSISGroupBox)
self.gridLayout_2.setObjectName(u'gridLayout_2')
self.horizontalLayout_2 = QtGui.QHBoxLayout()
self.horizontalLayout_2.setObjectName(u'horizontalLayout_2')
self.BibleNameLabel = QtGui.QLabel(self.OSISGroupBox)
self.BibleNameLabel.setObjectName(u'BibleNameLabel')
self.horizontalLayout_2.addWidget(self.BibleNameLabel)
self.BibleNameEdit = QtGui.QLineEdit(self.OSISGroupBox)
self.BibleNameEdit.setObjectName(u'BibleNameEdit')
self.horizontalLayout_2.addWidget(self.BibleNameEdit)
self.gridLayout_2.addLayout(self.horizontalLayout_2, 0, 0, 1, 1)
self.horizontalLayout_3 = QtGui.QHBoxLayout()
self.horizontalLayout_3.setObjectName(u'horizontalLayout_3')
self.LocatioLabel = QtGui.QLabel(self.OSISGroupBox)
self.LocatioLabel.setObjectName(u'LocatioLabel')
self.horizontalLayout_3.addWidget(self.LocatioLabel)
self.OSISLocationEdit = QtGui.QLineEdit(self.OSISGroupBox)
self.OSISLocationEdit.setObjectName(u'OSISLocationEdit')
self.horizontalLayout_3.addWidget(self.OSISLocationEdit)
self.OsisFileButton = QtGui.QPushButton(self.OSISGroupBox)
icon1 = build_icon(u':/imports/import_load.png')
self.OsisFileButton.setIcon(icon1)
self.OsisFileButton.setObjectName(u'OsisFileButton')
self.horizontalLayout_3.addWidget(self.OsisFileButton)
self.gridLayout_2.addLayout(self.horizontalLayout_3, 1, 0, 1, 1)
self.tabWidget.addTab(self.OsisTab, u'')
self.CsvTab = QtGui.QWidget()
self.CsvTab.setObjectName(u'CsvTab')
self.CVSGroupBox = QtGui.QGroupBox(self.CsvTab)
self.CVSGroupBox.setGeometry(QtCore.QRect(10, 10, 460, 191))
self.CVSGroupBox.setObjectName(u'CVSGroupBox')
self.gridLayout = QtGui.QGridLayout(self.CVSGroupBox)
self.gridLayout.setMargin(8)
self.gridLayout.setSpacing(8)
self.gridLayout.setObjectName(u'gridLayout')
self.BooksLocationLabel = QtGui.QLabel(self.CVSGroupBox)
self.BooksLocationLabel.setObjectName(u'BooksLocationLabel')
self.gridLayout.addWidget(self.BooksLocationLabel, 0, 0, 1, 1)
self.VerseLocationLabel = QtGui.QLabel(self.CVSGroupBox)
self.VerseLocationLabel.setObjectName(u'VerseLocationLabel')
self.gridLayout.addWidget(self.VerseLocationLabel, 4, 0, 1, 1)
self.VerseLocationEdit = QtGui.QLineEdit(self.CVSGroupBox)
self.VerseLocationEdit.setObjectName(u'VerseLocationEdit')
self.gridLayout.addWidget(self.VerseLocationEdit, 4, 1, 1, 1)
self.BooksLocationEdit = QtGui.QLineEdit(self.CVSGroupBox)
self.BooksLocationEdit.setObjectName(u'BooksLocationEdit')
self.gridLayout.addWidget(self.BooksLocationEdit, 0, 1, 1, 1)
self.BooksFileButton = QtGui.QPushButton(self.CVSGroupBox)
self.BooksFileButton.setIcon(icon1)
self.BooksFileButton.setObjectName(u'BooksFileButton')
self.gridLayout.addWidget(self.BooksFileButton, 0, 2, 1, 1)
self.VersesFileButton = QtGui.QPushButton(self.CVSGroupBox)
self.VersesFileButton.setIcon(icon1)
self.VersesFileButton.setObjectName(u'VersesFileButton')
self.gridLayout.addWidget(self.VersesFileButton, 4, 2, 1, 1)
self.tabWidget.addTab(self.CsvTab, u'')
self.HttpTab = QtGui.QWidget()
self.HttpTab.setObjectName(u'HttpTab')
self.OptionsGroupBox = QtGui.QGroupBox(self.HttpTab)
self.OptionsGroupBox.setGeometry(QtCore.QRect(10, 10, 460, 141))
self.OptionsGroupBox.setObjectName(u'OptionsGroupBox')
self.verticalLayout = QtGui.QVBoxLayout(self.OptionsGroupBox)
self.verticalLayout.setObjectName(u'verticalLayout')
self.horizontalLayout_4 = QtGui.QHBoxLayout()
self.horizontalLayout_4.setObjectName(u'horizontalLayout_4')
self.LocationLabel = QtGui.QLabel(self.OptionsGroupBox)
self.LocationLabel.setObjectName(u'LocationLabel')
self.horizontalLayout_4.addWidget(self.LocationLabel)
self.LocationComboBox = QtGui.QComboBox(self.OptionsGroupBox)
self.LocationComboBox.setObjectName(u'LocationComboBox')
self.LocationComboBox.addItem(QtCore.QString())
self.LocationComboBox.addItem(QtCore.QString())
self.horizontalLayout_4.addWidget(self.LocationComboBox)
self.verticalLayout.addLayout(self.horizontalLayout_4)
self.horizontalLayout_5 = QtGui.QHBoxLayout()
self.horizontalLayout_5.setObjectName(u'horizontalLayout_5')
self.BibleLabel = QtGui.QLabel(self.OptionsGroupBox)
self.BibleLabel.setObjectName(u'BibleLabel')
self.horizontalLayout_5.addWidget(self.BibleLabel)
self.BibleComboBox = QtGui.QComboBox(self.OptionsGroupBox)
self.BibleComboBox.setObjectName(u'BibleComboBox')
self.BibleComboBox.addItem(QtCore.QString())
self.BibleComboBox.setItemText(0, u'')
self.BibleComboBox.setItemText(1, u'')
self.BibleComboBox.addItem(QtCore.QString())
self.BibleComboBox.addItem(QtCore.QString())
self.horizontalLayout_5.addWidget(self.BibleComboBox)
self.verticalLayout.addLayout(self.horizontalLayout_5)
self.ProxyGroupBox = QtGui.QGroupBox(self.HttpTab)
self.ProxyGroupBox.setGeometry(QtCore.QRect(10, 160, 460, 161))
self.ProxyGroupBox.setObjectName(u'ProxyGroupBox')
self.ProxySettingsLayout = QtGui.QFormLayout(self.ProxyGroupBox)
self.ProxySettingsLayout.setFieldGrowthPolicy(QtGui.QFormLayout.AllNonFixedFieldsGrow)
self.ProxySettingsLayout.setMargin(8)
self.ProxySettingsLayout.setSpacing(8)
self.ProxySettingsLayout.setObjectName(u'ProxySettingsLayout')
self.AddressLabel = QtGui.QLabel(self.ProxyGroupBox)
self.AddressLabel.setObjectName(u'AddressLabel')
self.ProxySettingsLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.AddressLabel)
self.AddressEdit = QtGui.QLineEdit(self.ProxyGroupBox)
self.AddressEdit.setObjectName(u'AddressEdit')
self.ProxySettingsLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.AddressEdit)
self.UsernameLabel = QtGui.QLabel(self.ProxyGroupBox)
self.UsernameLabel.setObjectName(u'UsernameLabel')
self.ProxySettingsLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.UsernameLabel)
self.UsernameEdit = QtGui.QLineEdit(self.ProxyGroupBox)
self.UsernameEdit.setObjectName(u'UsernameEdit')
self.ProxySettingsLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.UsernameEdit)
self.PasswordLabel = QtGui.QLabel(self.ProxyGroupBox)
self.PasswordLabel.setObjectName(u'PasswordLabel')
self.ProxySettingsLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.PasswordLabel)
self.PasswordEdit = QtGui.QLineEdit(self.ProxyGroupBox)
self.PasswordEdit.setObjectName(u'PasswordEdit')
self.ProxySettingsLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.PasswordEdit)
self.tabWidget.addTab(self.HttpTab, u'')
self.retranslateUi(BibleImportDialog)
self.tabWidget.setCurrentIndex(2)
QtCore.QMetaObject.connectSlotsByName(BibleImportDialog)
BibleImportDialog.setTabOrder(self.BibleNameEdit, self.OSISLocationEdit)
BibleImportDialog.setTabOrder(self.OSISLocationEdit, self.OsisFileButton)
BibleImportDialog.setTabOrder(self.OsisFileButton, self.BooksLocationEdit)
BibleImportDialog.setTabOrder(self.BooksLocationEdit, self.BooksFileButton)
BibleImportDialog.setTabOrder(self.BooksFileButton, self.VerseLocationEdit)
BibleImportDialog.setTabOrder(self.VerseLocationEdit, self.VersesFileButton)
BibleImportDialog.setTabOrder(self.VersesFileButton, self.LocationComboBox)
BibleImportDialog.setTabOrder(self.LocationComboBox, self.BibleComboBox)
BibleImportDialog.setTabOrder(self.BibleComboBox, self.AddressEdit)
BibleImportDialog.setTabOrder(self.AddressEdit, self.UsernameEdit)
BibleImportDialog.setTabOrder(self.UsernameEdit, self.PasswordEdit)
BibleImportDialog.setTabOrder(self.PasswordEdit, self.VersionNameEdit)
BibleImportDialog.setTabOrder(self.VersionNameEdit, self.CopyrightEdit)
BibleImportDialog.setTabOrder(self.CopyrightEdit, self.PermisionEdit)
def retranslateUi(self, BibleImportDialog):
BibleImportDialog.setWindowTitle(self.trUtf8('Bible Registration'))
self.LicenceDetailsGroupBox.setTitle(self.trUtf8('Licence Details'))
self.VersionNameLabel.setText(self.trUtf8('Version Name:'))
self.CopyrightLabel.setText(self.trUtf8('Copyright:'))
self.PermisionLabel.setText(self.trUtf8('Permission:'))
self.ProgressGroupBox.setTitle(self.trUtf8('Import Progress'))
self.ProgressBar.setFormat(self.trUtf8('%p'))
self.ImportButton.setText(self.trUtf8('Import'))
self.CancelButton.setText(self.trUtf8('Cancel'))
self.OSISGroupBox.setTitle(self.trUtf8('OSIS Bible'))
self.BibleNameLabel.setText(self.trUtf8('Bible Name:'))
self.LocatioLabel.setText(self.trUtf8('File Location:'))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.OsisTab),
self.trUtf8('Osis (Sword) Imports'))
self.CVSGroupBox.setTitle(self.trUtf8('CVS Bible'))
self.BooksLocationLabel.setText(self.trUtf8('Books Location:'))
self.VerseLocationLabel.setText(self.trUtf8('Verse Location:'))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.CsvTab),
self.trUtf8('CSV File Imports'))
self.OptionsGroupBox.setTitle(self.trUtf8('Download Options'))
self.LocationLabel.setText(self.trUtf8('Location:'))
self.LocationComboBox.setItemText(0, self.trUtf8('Crosswalk'))
self.LocationComboBox.setItemText(1, self.trUtf8('BibleGateway'))
self.BibleLabel.setText(self.trUtf8('Bible:'))
self.ProxyGroupBox.setTitle(self.trUtf8('Proxy Settings (Optional)'))
self.AddressLabel.setText(self.trUtf8('Proxy Address:'))
self.UsernameLabel.setText(self.trUtf8('Username:'))
self.PasswordLabel.setText(self.trUtf8('Password:'))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.HttpTab),
self.trUtf8('Web Downloads'))

View File

@ -1,355 +0,0 @@
# -*- coding: utf-8 -*-
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2009 Raoul Snyman #
# Portions copyright (c) 2008-2009 Tim Bentley, Jonathan Corwin, Michael #
# Gorven, Scott Guerrieri, Maikel Stuivenberg, Martin Thompson, Jon Tibble, #
# Carsten Tinggaard #
# --------------------------------------------------------------------------- #
# This program is free software; you can redistribute it and/or modify it #
# under the terms of the GNU General Public License as published by the Free #
# Software Foundation; version 2 of the License. #
# #
# This program is distributed in the hope that it will be useful, but WITHOUT #
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
# more details. #
# #
# You should have received a copy of the GNU General Public License along #
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
import logging
import os
import os.path
from PyQt4 import QtCore, QtGui
from bibleimportdialog import Ui_BibleImportDialog
from openlp.core.lib import Receiver
class BibleImportForm(QtGui.QDialog, Ui_BibleImportDialog):
global log
log = logging.getLogger(u'BibleImportForm')
log.info(u'BibleImportForm loaded')
"""
Class documentation goes here.
"""
def __init__(self, config, biblemanager, bibleplugin, parent=None):
'''
Constructor
'''
QtGui.QDialog.__init__(self, parent)
self.setupUi(self)
self.biblemanager = biblemanager
self.config = config
self.bibleplugin = bibleplugin
self.bible_type = None
self.barmax = 0
self.tabWidget.setCurrentIndex(0)
self.cwBibleVersions = {}
self.bgBibleVersions = {}
self.AddressEdit.setText(self.config.get_config(u'proxy address', u''))
self.UsernameEdit.setText(self.config.get_config(u'proxy username',u''))
self.PasswordEdit.setText(self.config.get_config(u'proxy password',u''))
#Load and store Crosswalk Bibles
filepath = os.path.split(os.path.abspath(__file__))[0]
filepath = os.path.abspath(os.path.join(filepath, u'..',
u'resources', u'crosswalkbooks.csv'))
fbibles = None
try:
fbibles = open(filepath, 'r')
for line in fbibles:
p = line.split(u',')
self.cwBibleVersions[p[0]] = p[1].replace(u'\n', u'')
except:
log.exception(u'Crosswalk resources missing')
finally:
if fbibles:
fbibles.close()
#Load and store BibleGateway Bibles
filepath = os.path.split(os.path.abspath(__file__))[0]
filepath = os.path.abspath(os.path.join(filepath, u'..',
u'resources', u'biblegateway.csv'))
try:
fbibles = open(filepath, 'r')
for line in fbibles:
p = line.split(u',')
self.bgBibleVersions[p[0]] = p[1].replace(u'\n', u'')
except:
log.exception(u'Biblegateway resources missing')
finally:
if fbibles:
fbibles.close()
self.loadBibleCombo(self.cwBibleVersions)
self.cwActive = True
def loadBibleCombo(self, biblesList):
self.BibleComboBox.clear()
self.BibleComboBox.addItem(u'')
for bible in biblesList:
row = self.BibleComboBox.count()
self.BibleComboBox.addItem(unicode(self.trUtf8(bible)))
self.BibleComboBox.setItemData(row, QtCore.QVariant(bible))
#Combo Boxes
QtCore.QObject.connect(self.LocationComboBox,
QtCore.SIGNAL(u'activated(int)'), self.onLocationComboBoxSelected)
QtCore.QObject.connect(self.BibleComboBox,
QtCore.SIGNAL(u'activated(int)'), self.onBibleComboBoxSelected)
#Buttons
QtCore.QObject.connect(self.ImportButton,
QtCore.SIGNAL(u'pressed()'), self.onImportButtonClicked)
QtCore.QObject.connect(self.CancelButton,
QtCore.SIGNAL(u'pressed()'), self.onCancelButtonClicked)
QtCore.QObject.connect(self.VersesFileButton,
QtCore.SIGNAL(u'pressed()'), self.onVersesFileButtonClicked)
QtCore.QObject.connect(self.BooksFileButton,
QtCore.SIGNAL(u'pressed()'), self.onBooksFileButtonClicked)
QtCore.QObject.connect(self.OsisFileButton,
QtCore.SIGNAL(u'pressed()'), self.onOsisFileButtonClicked)
#Lost Focus
QtCore.QObject.connect(self.OSISLocationEdit,
QtCore.SIGNAL(u'lostFocus()'), self.onOSISLocationEditLostFocus)
QtCore.QObject.connect(self.BooksLocationEdit,
QtCore.SIGNAL(u'lostFocus()'),self.onBooksLocationEditLostFocus)
QtCore.QObject.connect(self.VerseLocationEdit,
QtCore.SIGNAL(u'lostFocus()'), self.onVerseLocationEditLostFocus)
QtCore.QObject.connect(self.AddressEdit,
QtCore.SIGNAL(u'lostFocus()'), self.onProxyAddressEditLostFocus)
QtCore.QObject.connect(self.UsernameEdit,
QtCore.SIGNAL(u'lostFocus()'), self.onProxyUsernameEditLostFocus)
QtCore.QObject.connect(self.PasswordEdit,
QtCore.SIGNAL(u'lostFocus()'), self.onProxyPasswordEditLostFocus)
def onVersesFileButtonClicked(self):
filename = QtGui.QFileDialog.getOpenFileName(
self, self.trUtf8('Open Bible Verses file'),
self.config.get_last_dir(1))
if filename:
self.VerseLocationEdit.setText(filename)
self.config.set_last_dir(filename, 1)
self.setCsv()
def onBooksFileButtonClicked(self):
filename = QtGui.QFileDialog.getOpenFileName(
self, self.trUtf8('Open Bible Books file'),
self.config.get_last_dir(2))
if filename:
self.BooksLocationEdit.setText(filename)
self.config.set_last_dir(filename, 2)
self.setCsv()
def onOsisFileButtonClicked(self):
filename = QtGui.QFileDialog.getOpenFileName(
self, self.trUtf8('Open OSIS import file'),
self.config.get_last_dir(3))
if filename:
self.OSISLocationEdit.setText(filename)
self.config.set_last_dir(filename, 3)
self.setOsis()
def onOSISLocationEditLostFocus(self):
if len(self.OSISLocationEdit.displayText() ) > 0:
self.setOsis()
else:
# Was OSIS and is not any more stops lostFocus running mad
if self.bible_type == u'OSIS':
self.bible_type = None
self.resetScreenFieldStates()
def onBooksLocationEditLostFocus(self):
self.checkOsis()
def onVerseLocationEditLostFocus(self):
self.checkOsis()
def onProxyAddressEditLostFocus(self):
self.config.set_config(
u'proxy address', unicode(self.AddressEdit.displayText()))
def onProxyUsernameEditLostFocus(self):
self.config.set_config(
u'proxy username', unicode(self.UsernameEdit.displayText()))
def onProxyPasswordEditLostFocus(self):
self.config.set_config(
u'proxy password', unicode(self.PasswordEdit.displayText()))
def onLocationComboBoxSelected(self, value):
if value == 0:
self.loadBibleCombo(self.cwBibleVersions)
self.cwActive = True
else:
self.loadBibleCombo(self.bgBibleVersions)
self.cwActive = False
self.checkHttp()
def onBibleComboBoxSelected(self, value):
self.checkHttp()
self.BibleNameEdit.setText(unicode(self.BibleComboBox.currentText()))
self.VersionNameEdit.setText(unicode(self.BibleComboBox.currentText()))
def onCancelButtonClicked(self):
# tell import to stop
self.message = self.trUtf8('Bible import stopped')
Receiver.send_message(u'stop_import')
# tell bibleplugin to reload the bibles
Receiver.send_message(u'pre_load_bibles')
self.close()
def onImportButtonClicked(self):
message = self.trUtf8('Bible import completed')
if self.biblemanager:
if not self.bible_type is None and \
len(self.BibleNameEdit.displayText()) > 0:
self.MessageLabel.setText(self.trUtf8('Import Started'))
self.ProgressBar.setMinimum(0)
self.setMax(65)
self.ProgressBar.setValue(0)
self.biblemanager.process_dialog(self)
status, msg = self.importBible()
if msg:
message = msg
self.MessageLabel.setText(message)
self.ProgressBar.setValue(self.barmax)
# tell bibleplugin to reload the bibles
Receiver.send_message(u'pre_load_bibles')
QtGui.QMessageBox.information(self,
self.trUtf8('Information'), self.trUtf8(message))
def setMax(self, max):
log.debug(u'set Max %s', max)
self.barmax = max
self.ProgressBar.setMaximum(max)
def incrementProgressBar(self, text ):
log.debug(u'IncrementBar %s', text)
self.MessageLabel.setText(unicode(self.trUtf8('Import processing')) + ' - %s' % text)
self.ProgressBar.setValue(self.ProgressBar.value() + 1)
def importBible(self):
log.debug(u'Import Bible %s' % self.bible_type)
message = None
if self.bible_type == u'OSIS':
loaded = self.biblemanager.register_osis_file_bible(
unicode(self.BibleNameEdit.displayText()),
self.OSISLocationEdit.displayText())
elif self.bible_type == u'CSV':
loaded = self.biblemanager.register_csv_file_bible(
unicode(self.BibleNameEdit.displayText()),
self.BooksLocationEdit.displayText(),
self.VerseLocationEdit.displayText())
else:
# set a value as it will not be needed
self.setMax(1)
if self.cwActive:
bible = self.cwBibleVersions[
unicode(self.BibleComboBox.currentText())]
else:
bible = self.bgBibleVersions[
unicode(self.BibleComboBox.currentText())]
loaded = self.biblemanager.register_http_bible(
unicode(self.BibleComboBox.currentText()),
unicode(self.LocationComboBox.currentText()),
unicode(bible), unicode(self.AddressEdit.displayText()),
unicode(self.UsernameEdit .displayText()),
unicode(self.PasswordEdit.displayText()))
if loaded:
self.biblemanager.save_meta_data(
unicode(self.BibleNameEdit.displayText()),
unicode(self.VersionNameEdit.displayText()),
unicode(self.CopyrightEdit.displayText()),
unicode(self.PermisionEdit.displayText()))
else:
message = self.trUtf8('Bible import failed as name is already in use')
self.bible_type = None
# free the screen state restrictions
self.resetScreenFieldStates()
# reset all the screen fields
self.resetEntryFields()
return loaded, message
def checkOsis(self):
if len(self.BooksLocationEdit.displayText()) > 0 or \
len(self.VerseLocationEdit.displayText()) > 0:
self.setCsv()
else:
# Was CSV and is not any more stops lostFocus running mad
if self.bible_type == u'CSV':
self.bible_type = None
self.resetScreenFieldStates()
def checkHttp(self):
if self.BibleComboBox.currentIndex() != 0 :
# First slot is blank so no bible
self.setHttp()
else:
# Was HTTP and is not any more stops lostFocus running mad
if self.bible_type == u'HTTP':
self.bible_type = None
self.resetScreenFieldStates()
def blockCsv(self):
self.BooksLocationEdit.setReadOnly(True)
self.VerseLocationEdit.setReadOnly(True)
self.BooksFileButton.setEnabled(False)
self.VersesFileButton.setEnabled(False)
def setCsv(self):
self.bible_type = u'CSV'
self.BooksLocationEdit.setReadOnly(False)
self.VerseLocationEdit.setReadOnly(False)
self.BooksFileButton.setEnabled(True)
self.VersesFileButton.setEnabled(True)
self.blockOsis()
self.blockHttp()
def setOsis(self):
self.bible_type = u'OSIS'
self.OSISLocationEdit.setReadOnly(False)
self.OsisFileButton.setEnabled(True)
self.blockCsv()
self.blockHttp()
def blockOsis(self):
self.OSISLocationEdit.setReadOnly(True)
self.OsisFileButton.setEnabled(False)
def setHttp(self):
self.bible_type = u'HTTP'
self.LocationComboBox.setEnabled(True)
self.BibleComboBox.setEnabled(True)
self.blockCsv()
self.blockOsis()
def blockHttp(self):
self.LocationComboBox.setEnabled(False)
self.BibleComboBox.setEnabled(False)
def resetScreenFieldStates(self):
# only reset if no bible type set.
if self.bible_type is None:
self.BooksLocationEdit.setReadOnly(False)
self.VerseLocationEdit.setReadOnly(False)
self.BooksFileButton.setEnabled(True)
self.VersesFileButton.setEnabled(True)
self.OSISLocationEdit.setReadOnly(False)
self.OsisFileButton.setEnabled(True)
self.LocationComboBox.setEnabled(True)
self.BibleComboBox.setEnabled(True)
def resetEntryFields(self):
self.BooksLocationEdit.setText(u'')
self.VerseLocationEdit.setText(u'')
self.OSISLocationEdit.setText(u'')
self.BibleNameEdit.setText(u'')
self.LocationComboBox.setCurrentIndex(0)
self.BibleComboBox.setCurrentIndex(0)

View File

@ -0,0 +1,366 @@
# -*- coding: utf-8 -*-
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2009 Raoul Snyman #
# Portions copyright (c) 2008-2009 Tim Bentley, Jonathan Corwin, Michael #
# Gorven, Scott Guerrieri, Maikel Stuivenberg, Martin Thompson, Jon Tibble, #
# Carsten Tinggaard #
# --------------------------------------------------------------------------- #
# This program is free software; you can redistribute it and/or modify it #
# under the terms of the GNU General Public License as published by the Free #
# Software Foundation; version 2 of the License. #
# #
# This program is distributed in the hope that it will be useful, but WITHOUT #
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
# more details. #
# #
# You should have received a copy of the GNU General Public License along #
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
from PyQt4 import QtCore, QtGui
class Ui_BibleImportWizard(object):
def setupUi(self, BibleImportWizard):
BibleImportWizard.setObjectName(u'BibleImportWizard')
BibleImportWizard.resize(550, 386)
BibleImportWizard.setModal(True)
BibleImportWizard.setWizardStyle(QtGui.QWizard.ModernStyle)
BibleImportWizard.setOptions(
QtGui.QWizard.IndependentPages | \
QtGui.QWizard.NoBackButtonOnStartPage | \
QtGui.QWizard.NoBackButtonOnLastPage)
self.WelcomePage = QtGui.QWizardPage()
self.WelcomePage.setPixmap(QtGui.QWizard.WatermarkPixmap,
QtGui.QPixmap(u':/wizards/wizard_importbible.bmp'))
self.WelcomePage.setObjectName(u'WelcomePage')
self.WelcomeLayout = QtGui.QVBoxLayout(self.WelcomePage)
self.WelcomeLayout.setSpacing(8)
self.WelcomeLayout.setMargin(0)
self.WelcomeLayout.setObjectName(u'WelcomeLayout')
self.TitleLabel = QtGui.QLabel(self.WelcomePage)
self.TitleLabel.setObjectName(u'TitleLabel')
self.WelcomeLayout.addWidget(self.TitleLabel)
spacerItem = QtGui.QSpacerItem(20, 40,
QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
self.WelcomeLayout.addItem(spacerItem)
self.InformationLabel = QtGui.QLabel(self.WelcomePage)
self.InformationLabel.setWordWrap(True)
self.InformationLabel.setMargin(10)
self.InformationLabel.setObjectName(u'InformationLabel')
self.WelcomeLayout.addWidget(self.InformationLabel)
spacerItem1 = QtGui.QSpacerItem(20, 40,
QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.WelcomeLayout.addItem(spacerItem1)
BibleImportWizard.addPage(self.WelcomePage)
self.SelectPage = QtGui.QWizardPage()
self.SelectPage.setObjectName(u'SelectPage')
self.SelectPageLayout = QtGui.QVBoxLayout(self.SelectPage)
self.SelectPageLayout.setSpacing(8)
self.SelectPageLayout.setMargin(20)
self.SelectPageLayout.setObjectName(u'SelectPageLayout')
self.FormatSelectLayout = QtGui.QHBoxLayout()
self.FormatSelectLayout.setSpacing(8)
self.FormatSelectLayout.setObjectName(u'FormatSelectLayout')
self.FormatLabel = QtGui.QLabel(self.SelectPage)
self.FormatLabel.setObjectName(u'FormatLabel')
self.FormatSelectLayout.addWidget(self.FormatLabel)
self.FormatComboBox = QtGui.QComboBox(self.SelectPage)
self.FormatComboBox.setObjectName(u'FormatComboBox')
self.FormatComboBox.addItem(u'')
self.FormatComboBox.addItem(u'')
self.FormatComboBox.addItem(u'')
self.FormatComboBox.addItem(u'')
self.FormatSelectLayout.addWidget(self.FormatComboBox)
spacerItem2 = QtGui.QSpacerItem(40, 20,
QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.FormatSelectLayout.addItem(spacerItem2)
self.SelectPageLayout.addLayout(self.FormatSelectLayout)
self.FormatWidget = QtGui.QStackedWidget(self.SelectPage)
self.FormatWidget.setObjectName(u'FormatWidget')
self.OsisPage = QtGui.QWidget()
self.OsisPage.setObjectName(u'OsisPage')
self.OsisLayout = QtGui.QFormLayout(self.OsisPage)
self.OsisLayout.setFieldGrowthPolicy(
QtGui.QFormLayout.ExpandingFieldsGrow)
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,
self.OsisLocationLabel)
self.OsisLocationLayout = QtGui.QHBoxLayout()
self.OsisLocationLayout.setSpacing(8)
self.OsisLocationLayout.setObjectName(u'OsisLocationLayout')
self.OSISLocationEdit = QtGui.QLineEdit(self.OsisPage)
self.OSISLocationEdit.setObjectName(u'OSISLocationEdit')
self.OsisLocationLayout.addWidget(self.OSISLocationEdit)
self.OsisFileButton = QtGui.QToolButton(self.OsisPage)
self.OsisFileButton.setMaximumSize(QtCore.QSize(32, 16777215))
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(u':/imports/import_load.png'),
QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.OsisFileButton.setIcon(icon)
self.OsisFileButton.setObjectName(u'OsisFileButton')
self.OsisLocationLayout.addWidget(self.OsisFileButton)
self.OsisLayout.setLayout(1, QtGui.QFormLayout.FieldRole,
self.OsisLocationLayout)
self.FormatWidget.addWidget(self.OsisPage)
self.CsvPage = QtGui.QWidget()
self.CsvPage.setObjectName(u'CsvPage')
self.CsvSourceLayout = QtGui.QFormLayout(self.CsvPage)
self.CsvSourceLayout.setFieldGrowthPolicy(
QtGui.QFormLayout.ExpandingFieldsGrow)
self.CsvSourceLayout.setLabelAlignment(QtCore.Qt.AlignBottom |
QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing)
self.CsvSourceLayout.setFormAlignment(QtCore.Qt.AlignLeading |
QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop)
self.CsvSourceLayout.setMargin(0)
self.CsvSourceLayout.setSpacing(8)
self.CsvSourceLayout.setObjectName(u'CsvSourceLayout')
self.BooksLocationLabel = QtGui.QLabel(self.CsvPage)
self.BooksLocationLabel.setObjectName(u'BooksLocationLabel')
self.CsvSourceLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
self.BooksLocationLabel)
self.CsvBooksLayout = QtGui.QHBoxLayout()
self.CsvBooksLayout.setSpacing(8)
self.CsvBooksLayout.setObjectName(u'CsvBooksLayout')
self.BooksLocationEdit = QtGui.QLineEdit(self.CsvPage)
self.BooksLocationEdit.setObjectName(u'BooksLocationEdit')
self.CsvBooksLayout.addWidget(self.BooksLocationEdit)
self.BooksFileButton = QtGui.QToolButton(self.CsvPage)
self.BooksFileButton.setMaximumSize(QtCore.QSize(32, 16777215))
self.BooksFileButton.setIcon(icon)
self.BooksFileButton.setObjectName(u'BooksFileButton')
self.CsvBooksLayout.addWidget(self.BooksFileButton)
self.CsvSourceLayout.setLayout(0, QtGui.QFormLayout.FieldRole,
self.CsvBooksLayout)
self.VerseLocationLabel = QtGui.QLabel(self.CsvPage)
self.VerseLocationLabel.setObjectName(u'VerseLocationLabel')
self.CsvSourceLayout.setWidget(1, QtGui.QFormLayout.LabelRole,
self.VerseLocationLabel)
self.CsvVerseLayout = QtGui.QHBoxLayout()
self.CsvVerseLayout.setSpacing(8)
self.CsvVerseLayout.setObjectName(u'CsvVerseLayout')
self.CsvVerseLocationEdit = QtGui.QLineEdit(self.CsvPage)
self.CsvVerseLocationEdit.setObjectName(u'CsvVerseLocationEdit')
self.CsvVerseLayout.addWidget(self.CsvVerseLocationEdit)
self.CsvVersesFileButton = QtGui.QToolButton(self.CsvPage)
self.CsvVersesFileButton.setMaximumSize(QtCore.QSize(32, 16777215))
self.CsvVersesFileButton.setIcon(icon)
self.CsvVersesFileButton.setObjectName(u'CsvVersesFileButton')
self.CsvVerseLayout.addWidget(self.CsvVersesFileButton)
self.CsvSourceLayout.setLayout(1, QtGui.QFormLayout.FieldRole,
self.CsvVerseLayout)
self.FormatWidget.addWidget(self.CsvPage)
self.OpenSongPage = QtGui.QWidget()
self.OpenSongPage.setObjectName(u'OpenSongPage')
self.OpenSongLayout = QtGui.QFormLayout(self.OpenSongPage)
self.OpenSongLayout.setMargin(0)
self.OpenSongLayout.setSpacing(8)
self.OpenSongLayout.setObjectName(u'OpenSongLayout')
self.OpenSongFileLabel = QtGui.QLabel(self.OpenSongPage)
self.OpenSongFileLabel.setObjectName(u'OpenSongFileLabel')
self.OpenSongLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
self.OpenSongFileLabel)
self.OpenSongFileLayout = QtGui.QHBoxLayout()
self.OpenSongFileLayout.setSpacing(8)
self.OpenSongFileLayout.setObjectName(u'OpenSongFileLayout')
self.OpenSongFileEdit = QtGui.QLineEdit(self.OpenSongPage)
self.OpenSongFileEdit.setObjectName(u'OpenSongFileEdit')
self.OpenSongFileLayout.addWidget(self.OpenSongFileEdit)
self.OpenSongBrowseButton = QtGui.QToolButton(self.OpenSongPage)
self.OpenSongBrowseButton.setIcon(icon)
self.OpenSongBrowseButton.setObjectName(u'OpenSongBrowseButton')
self.OpenSongFileLayout.addWidget(self.OpenSongBrowseButton)
self.OpenSongLayout.setLayout(0, QtGui.QFormLayout.FieldRole,
self.OpenSongFileLayout)
self.FormatWidget.addWidget(self.OpenSongPage)
self.WebDownloadPage = QtGui.QWidget()
self.WebDownloadPage.setObjectName(u'WebDownloadPage')
self.WebDownloadLayout = QtGui.QVBoxLayout(self.WebDownloadPage)
self.WebDownloadLayout.setSpacing(8)
self.WebDownloadLayout.setMargin(0)
self.WebDownloadLayout.setObjectName(u'WebDownloadLayout')
self.WebDownloadTabWidget = QtGui.QTabWidget(self.WebDownloadPage)
self.WebDownloadTabWidget.setObjectName(u'WebDownloadTabWidget')
self.DownloadOptionsTab = QtGui.QWidget()
self.DownloadOptionsTab.setObjectName(u'DownloadOptionsTab')
self.DownloadOptionsLayout = QtGui.QFormLayout(self.DownloadOptionsTab)
self.DownloadOptionsLayout.setMargin(8)
self.DownloadOptionsLayout.setSpacing(8)
self.DownloadOptionsLayout.setObjectName(u'DownloadOptionsLayout')
self.LocationLabel = QtGui.QLabel(self.DownloadOptionsTab)
self.LocationLabel.setObjectName(u'LocationLabel')
self.DownloadOptionsLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
self.LocationLabel)
self.LocationComboBox = QtGui.QComboBox(self.DownloadOptionsTab)
self.LocationComboBox.setObjectName(u'LocationComboBox')
self.LocationComboBox.addItem(u'')
self.LocationComboBox.addItem(u'')
self.DownloadOptionsLayout.setWidget(0, QtGui.QFormLayout.FieldRole,
self.LocationComboBox)
self.BibleLabel = QtGui.QLabel(self.DownloadOptionsTab)
self.BibleLabel.setObjectName(u'BibleLabel')
self.DownloadOptionsLayout.setWidget(1, QtGui.QFormLayout.LabelRole,
self.BibleLabel)
self.BibleComboBox = QtGui.QComboBox(self.DownloadOptionsTab)
self.BibleComboBox.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents)
self.BibleComboBox.setObjectName(u'BibleComboBox')
self.BibleComboBox.addItem(u'')
self.BibleComboBox.addItem(u'')
self.BibleComboBox.addItem(u'')
self.DownloadOptionsLayout.setWidget(1, QtGui.QFormLayout.FieldRole,
self.BibleComboBox)
self.WebDownloadTabWidget.addTab(self.DownloadOptionsTab, u'')
self.ProxyServerTab = QtGui.QWidget()
self.ProxyServerTab.setObjectName(u'ProxyServerTab')
self.ProxyServerLayout = QtGui.QFormLayout(self.ProxyServerTab)
self.ProxyServerLayout.setObjectName(u'ProxyServerLayout')
self.AddressLabel = QtGui.QLabel(self.ProxyServerTab)
self.AddressLabel.setObjectName(u'AddressLabel')
self.ProxyServerLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
self.AddressLabel)
self.AddressEdit = QtGui.QLineEdit(self.ProxyServerTab)
self.AddressEdit.setObjectName(u'AddressEdit')
self.ProxyServerLayout.setWidget(0, QtGui.QFormLayout.FieldRole,
self.AddressEdit)
self.UsernameLabel = QtGui.QLabel(self.ProxyServerTab)
self.UsernameLabel.setObjectName(u'UsernameLabel')
self.ProxyServerLayout.setWidget(1, QtGui.QFormLayout.LabelRole,
self.UsernameLabel)
self.UsernameEdit = QtGui.QLineEdit(self.ProxyServerTab)
self.UsernameEdit.setObjectName(u'UsernameEdit')
self.ProxyServerLayout.setWidget(1, QtGui.QFormLayout.FieldRole,
self.UsernameEdit)
self.PasswordLabel = QtGui.QLabel(self.ProxyServerTab)
self.PasswordLabel.setObjectName(u'PasswordLabel')
self.ProxyServerLayout.setWidget(2, QtGui.QFormLayout.LabelRole,
self.PasswordLabel)
self.PasswordEdit = QtGui.QLineEdit(self.ProxyServerTab)
self.PasswordEdit.setObjectName(u'PasswordEdit')
self.ProxyServerLayout.setWidget(2, QtGui.QFormLayout.FieldRole,
self.PasswordEdit)
self.WebDownloadTabWidget.addTab(self.ProxyServerTab, u'')
self.WebDownloadLayout.addWidget(self.WebDownloadTabWidget)
self.FormatWidget.addWidget(self.WebDownloadPage)
self.SelectPageLayout.addWidget(self.FormatWidget)
BibleImportWizard.addPage(self.SelectPage)
self.LicenseDetailsPage = QtGui.QWizardPage()
self.LicenseDetailsPage.setObjectName(u'LicenseDetailsPage')
self.LicenseDetailsLayout = QtGui.QFormLayout(self.LicenseDetailsPage)
self.LicenseDetailsLayout.setMargin(20)
self.LicenseDetailsLayout.setSpacing(8)
self.LicenseDetailsLayout.setObjectName(u'LicenseDetailsLayout')
self.VersionNameLabel = QtGui.QLabel(self.LicenseDetailsPage)
self.VersionNameLabel.setObjectName(u'VersionNameLabel')
self.LicenseDetailsLayout.setWidget(0, QtGui.QFormLayout.LabelRole,
self.VersionNameLabel)
self.VersionNameEdit = QtGui.QLineEdit(self.LicenseDetailsPage)
self.VersionNameEdit.setObjectName(u'VersionNameEdit')
self.LicenseDetailsLayout.setWidget(0, QtGui.QFormLayout.FieldRole,
self.VersionNameEdit)
self.CopyrightLabel = QtGui.QLabel(self.LicenseDetailsPage)
self.CopyrightLabel.setObjectName(u'CopyrightLabel')
self.LicenseDetailsLayout.setWidget(1, QtGui.QFormLayout.LabelRole,
self.CopyrightLabel)
self.CopyrightEdit = QtGui.QLineEdit(self.LicenseDetailsPage)
self.CopyrightEdit.setObjectName(u'CopyrightEdit')
self.LicenseDetailsLayout.setWidget(1, QtGui.QFormLayout.FieldRole,
self.CopyrightEdit)
self.PermissionLabel = QtGui.QLabel(self.LicenseDetailsPage)
self.PermissionLabel.setObjectName(u'PermissionLabel')
self.LicenseDetailsLayout.setWidget(2, QtGui.QFormLayout.LabelRole,\
self.PermissionLabel)
self.PermissionEdit = QtGui.QLineEdit(self.LicenseDetailsPage)
self.PermissionEdit.setObjectName(u'PermissionEdit')
self.LicenseDetailsLayout.setWidget(2, QtGui.QFormLayout.FieldRole,
self.PermissionEdit)
BibleImportWizard.addPage(self.LicenseDetailsPage)
self.ImportPage = QtGui.QWizardPage()
self.ImportPage.setObjectName(u'ImportPage')
self.ImportLayout = QtGui.QVBoxLayout(self.ImportPage)
self.ImportLayout.setSpacing(8)
self.ImportLayout.setMargin(50)
self.ImportLayout.setObjectName(u'ImportLayout')
self.ImportProgressLabel = QtGui.QLabel(self.ImportPage)
self.ImportProgressLabel.setObjectName(u'ImportProgressLabel')
self.ImportLayout.addWidget(self.ImportProgressLabel)
self.ImportProgressBar = QtGui.QProgressBar(self.ImportPage)
self.ImportProgressBar.setProperty(u'value', 0)
self.ImportProgressBar.setInvertedAppearance(False)
self.ImportProgressBar.setObjectName(u'ImportProgressBar')
self.ImportLayout.addWidget(self.ImportProgressBar)
BibleImportWizard.addPage(self.ImportPage)
self.retranslateUi(BibleImportWizard)
self.FormatWidget.setCurrentIndex(0)
self.WebDownloadTabWidget.setCurrentIndex(0)
QtCore.QObject.connect(self.FormatComboBox,
QtCore.SIGNAL(u'currentIndexChanged(int)'),
self.FormatWidget.setCurrentIndex)
QtCore.QMetaObject.connectSlotsByName(BibleImportWizard)
def retranslateUi(self, BibleImportWizard):
BibleImportWizard.setWindowTitle(self.trUtf8('Bible Import Wizard'))
self.TitleLabel.setText(
u'<span style=\" font-size:14pt; font-weight:600;\">' + \
self.trUtf8('Welcome to the Bible Import Wizard') + u'</span>')
self.InformationLabel.setText(
self.trUtf8('This wizard will help you to import Bibles from a '
'variety of formats. Click the next button below to start the '
'process by selecting a format to import from.'))
self.SelectPage.setTitle(self.trUtf8('Select Import Source'))
self.SelectPage.setSubTitle(
self.trUtf8('Select the import format, and where to import from.'))
self.FormatLabel.setText(self.trUtf8('Format:'))
self.FormatComboBox.setItemText(0, self.trUtf8('OSIS'))
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:'))
self.OpenSongFileLabel.setText(self.trUtf8('Bible Filename:'))
self.LocationLabel.setText(self.trUtf8('Location:'))
self.LocationComboBox.setItemText(0, self.trUtf8('Crosswalk'))
self.LocationComboBox.setItemText(1, self.trUtf8('BibleGateway'))
self.BibleLabel.setText(self.trUtf8('Bible:'))
self.WebDownloadTabWidget.setTabText(
self.WebDownloadTabWidget.indexOf(self.DownloadOptionsTab),
self.trUtf8('Download Options'))
self.AddressLabel.setText(self.trUtf8('Server:'))
self.UsernameLabel.setText(self.trUtf8('Username:'))
self.PasswordLabel.setText(self.trUtf8('Password:'))
self.WebDownloadTabWidget.setTabText(
self.WebDownloadTabWidget.indexOf(self.ProxyServerTab),
self.trUtf8('Proxy Server (Optional)'))
self.LicenseDetailsPage.setTitle(self.trUtf8('License Details'))
self.LicenseDetailsPage.setSubTitle(
self.trUtf8('Set up the Bible\'s license details.'))
self.VersionNameLabel.setText(self.trUtf8('Version Name:'))
self.CopyrightLabel.setText(self.trUtf8('Copyright:'))
self.PermissionLabel.setText(self.trUtf8('Permission:'))
self.ImportPage.setTitle(self.trUtf8('Importing'))
self.ImportPage.setSubTitle(
self.trUtf8('Please wait while your Bible is imported.'))
self.ImportProgressLabel.setText(self.trUtf8('Ready.'))
#self.ImportProgressBar.setFormat(u'%p')

View File

@ -0,0 +1,364 @@
# -*- coding: utf-8 -*-
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2009 Raoul Snyman #
# Portions copyright (c) 2008-2009 Tim Bentley, Jonathan Corwin, Michael #
# Gorven, Scott Guerrieri, Maikel Stuivenberg, Martin Thompson, Jon Tibble, #
# Carsten Tinggaard #
# --------------------------------------------------------------------------- #
# This program is free software; you can redistribute it and/or modify it #
# under the terms of the GNU General Public License as published by the Free #
# Software Foundation; version 2 of the License. #
# #
# This program is distributed in the hope that it will be useful, but WITHOUT #
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
# more details. #
# #
# You should have received a copy of the GNU General Public License along #
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
import logging
import os
import os.path
from time import sleep
from PyQt4 import QtCore, QtGui
from bibleimportwizard import Ui_BibleImportWizard
from openlp.core.lib import Receiver
from openlp.plugins.bibles.lib.manager import BibleFormat
class DownloadLocation(object):
Unknown = -1
Crosswalk = 0
BibleGateway = 1
Names = {
0: u'Crosswalk',
1: u'BibleGateway'
}
@classmethod
def get_name(class_, id):
return class_.Names[id]
class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard):
"""
This is the Bible Import Wizard, which allows easy importing of Bibles
into OpenLP from other formats like OSIS, CSV and OpenSong.
"""
global log
log = logging.getLogger(u'BibleImportForm')
log.info(u'BibleImportForm loaded')
def __init__(self, parent, config, biblemanager, bibleplugin):
'''
Constructor
'''
QtGui.QWizard.__init__(self, parent)
self.setupUi(self)
self.registerFields()
self.web_bible_list = {}
self.finishButton = self.button(QtGui.QWizard.FinishButton)
self.cancelButton = self.button(QtGui.QWizard.CancelButton)
self.biblemanager = biblemanager
self.config = config
self.bibleplugin = bibleplugin
self.biblemanager.process_dialog(self)
self.loadWebBibles()
QtCore.QObject.connect(self.LocationComboBox,
QtCore.SIGNAL(u'currentIndexChanged(int)'),
self.onLocationComboBoxChanged)
QtCore.QObject.connect(self.OsisFileButton,
QtCore.SIGNAL(u'clicked()'),
self.onOsisFileButtonClicked)
QtCore.QObject.connect(self.BooksFileButton,
QtCore.SIGNAL(u'clicked()'),
self.onBooksFileButtonClicked)
QtCore.QObject.connect(self.CsvVersesFileButton,
QtCore.SIGNAL(u'clicked()'),
self.onCsvVersesFileButtonClicked)
QtCore.QObject.connect(self.OpenSongBrowseButton,
QtCore.SIGNAL(u'clicked()'),
self.onOpenSongBrowseButtonClicked)
QtCore.QObject.connect(self,
QtCore.SIGNAL(u'currentIdChanged(int)'),
self.onCurrentIdChanged)
def show(self):
self.setDefaults()
return QtGui.QWizard.show()
def validateCurrentPage(self):
if self.currentId() == 0:
# Welcome page
return True
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'),
self.trUtf8('You need to specify a file to import your '
'Bible from!'),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
self.OSISLocationEdit.setFocus()
return False
elif self.field(u'source_format').toInt()[0] == BibleFormat.CSV:
if self.field(u'csv_booksfile').toString() == u'':
QtGui.QMessageBox.critical(self,
self.trUtf8('Invalid Books File'),
self.trUtf8('You need to specify a file with books of '
'the Bible to use in the import!'),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
self.BooksLocationEdit.setFocus()
return False
elif self.field(u'csv_versefile').toString() == u'':
QtGui.QMessageBox.critical(self,
self.trUtf8('Invalid Verse File'),
self.trUtf8('You need to specify a file of Bible '
'verses to import!'),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
self.CsvVerseLocationEdit.setFocus()
return False
elif self.field(u'source_format').toInt()[0] == BibleFormat.OpenSong:
if self.field(u'opensong_file').toString() == u'':
QtGui.QMessageBox.critical(self,
self.trUtf8('Invalid OpenSong Bible'),
self.trUtf8('You need to specify an OpenSong Bible '
'file to import!'),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
self.OpenSongFileEdit.setFocus()
return False
return True
elif self.currentId() == 2:
# License details
if self.field(u'license_version').toString() == u'':
QtGui.QMessageBox.critical(self,
self.trUtf8('Empty Version Name'),
self.trUtf8('You need to specify a version name for your '
'Bible!'),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
self.VersionNameEdit.setFocus()
return False
elif self.field(u'license_copyright').toString() == u'':
QtGui.QMessageBox.critical(self,
self.trUtf8('Empty Copyright'),
self.trUtf8('You need to set a copyright for your Bible! '
'Bibles in the Public Domain need to be marked as '
'such.'),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
self.CopyrightEdit.setFocus()
return False
return True
if self.currentId() == 3:
# Progress page
return True
def onLocationComboBoxChanged(self, index):
self.BibleComboBox.clear()
for bible, abbreviation in self.web_bible_list[index].iteritems():
self.BibleComboBox.addItem(unicode(self.trUtf8(bible)))
def onOsisFileButtonClicked(self):
self.getFileName(self.trUtf8('Open OSIS file'),
self.OSISLocationEdit)
def onBooksFileButtonClicked(self):
self.getFileName(self.trUtf8('Open Books CSV file'),
self.BooksLocationEdit)
def onCsvVersesFileButtonClicked(self):
self.getFileName(self.trUtf8('Open Verses CSV file'),
self.CsvVerseLocationEdit)
def onOpenSongBrowseButtonClicked(self):
self.getFileName(self.trUtf8('Open OpenSong Bible'),
self.OpenSongFileEdit)
def onCurrentIdChanged(self, id):
if id == 3:
self.preImport()
self.performImport()
self.postImport()
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(
u'csv_booksfile', self.BooksLocationEdit)
self.SelectPage.registerField(
u'csv_versefile', self.CsvVerseLocationEdit)
self.SelectPage.registerField(
u'opensong_file', self.OpenSongFileEdit)
self.SelectPage.registerField(
u'web_location', self.LocationComboBox)
self.SelectPage.registerField(
u'web_biblename', self.BibleComboBox)
self.SelectPage.registerField(
u'proxy_server', self.AddressEdit)
self.SelectPage.registerField(
u'proxy_username', self.UsernameEdit)
self.SelectPage.registerField(
u'proxy_password', self.PasswordEdit)
self.LicenseDetailsPage.registerField(
u'license_version', self.VersionNameEdit)
self.LicenseDetailsPage.registerField(
u'license_copyright', self.CopyrightEdit)
self.LicenseDetailsPage.registerField(
u'license_permission', self.PermissionEdit)
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'')
self.setField(u'opensong_file', u'')
self.setField(u'web_location', 0)
self.setField(u'web_biblename', self.BibleComboBox)
self.setField(u'proxy_server',
self.config.get_config(u'proxy address', u''))
self.setField(u'proxy_username',
self.config.get_config(u'proxy username',u''))
self.setField(u'proxy_password',
self.config.get_config(u'proxy password',u''))
self.setField(u'license_version', self.VersionNameEdit)
self.setField(u'license_copyright', self.CopyrightEdit)
self.setField(u'license_permission', self.PermissionEdit)
self.onLocationComboBoxChanged(0)
def loadWebBibles(self):
"""
Load the list of Crosswalk and BibleGateway bibles.
"""
#Load and store Crosswalk Bibles
filepath = os.path.abspath(os.path.join(
os.path.split(os.path.abspath(__file__))[0],
u'..', u'resources'))
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()
except:
log.exception(u'Crosswalk resources missing')
finally:
if fbibles:
fbibles.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()
except:
log.exception(u'Biblegateway resources missing')
finally:
if fbibles:
fbibles.close()
def getFileName(self, title, editbox):
filename = QtGui.QFileDialog.getOpenFileName(self, title,
self.config.get_last_dir(1))
if filename:
editbox.setText(filename)
self.config.set_last_dir(filename, 1)
def incrementProgressBar(self, status_text):
log.debug(u'IncrementBar %s', status_text)
self.ImportProgressLabel.setText(status_text)
self.ImportProgressBar.setValue(self.ImportProgressBar.value() + 1)
Receiver.send_message(u'process_events')
def preImport(self):
self.finishButton.setEnabled(False)
self.cancelButton.setVisible(False)
self.ImportProgressBar.setMinimum(0)
self.ImportProgressBar.setMaximum(1188)
self.ImportProgressBar.setValue(0)
self.ImportProgressLabel.setText(self.trUtf8('Starting import...'))
Receiver.send_message(u'process_events')
def performImport(self):
bible_type = self.field(u'source_format').toInt()[0]
success = False
if bible_type == BibleFormat.OSIS:
# Import an OSIS bible
success = self.biblemanager.register_osis_file_bible(
unicode(self.field(u'license_version').toString()),
unicode(self.field(u'osis_location').toString())
)
elif bible_type == BibleFormat.CSV:
# Import a CSV bible
success = self.biblemanager.register_csv_file_bible(
unicode(self.field(u'license_version').toString()),
self.field(u'csv_booksfile').toString(),
self.field(u'csv_versefile').toString()
)
elif bible_type == BibleFormat.OpenSong:
# Import an OpenSong bible
success = self.biblemanager.register_opensong_bible(
unicode(self.field(u'license_version').toString()),
self.field(u'opensong_file').toString()
)
elif bible_type == BibleFormat.WebDownload:
# Import a bible from the web
self.ImportProgressBar.setMaximum(1)
download_location = self.field(u'web_location').toInt()[0]
if download_location == DownloadLocation.Crosswalk:
bible = self.web_bible_list[DownloadLocation.Crosswalk][
unicode(self.BibleComboBox.currentText())]
elif download_location == DownloadLocation.BibleGateway:
bible = self.web_bible_list[DownloadLocation.BibleGateway][
unicode(self.BibleComboBox.currentText())]
success = self.biblemanager.register_http_bible(
unicode(self.field(u'license_version').toString()),
unicode(DownloadLocation.get_name(download_location)),
unicode(bible),
unicode(self.field(u'proxy_server').toString()),
unicode(self.field(u'proxy_username').toString()),
unicode(self.field(u'proxy_password').toString())
)
if success:
self.biblemanager.save_meta_data(
unicode(self.field(u'license_version').toString()),
unicode(self.field(u'license_version').toString()),
unicode(self.field(u'license_copyright').toString()),
unicode(self.field(u'license_permission').toString())
)
else:
self.ImportProgressLabel.setText(
self.trUtf8('Your Bible import failed.'))
self.ImportProgressBar.setValue(self.ImportProgressBar.maximum())
def postImport(self):
self.ImportProgressLabel.setText(self.trUtf8('Finished import.'))
self.finishButton.setEnabled(True)
Receiver.send_message(u'process_events')

View File

@ -88,18 +88,20 @@ class BibleCSVImpl(BibleCommon):
# split into 3 units and leave the rest as a single field # split into 3 units and leave the rest as a single field
p = line.split(u',', 3) p = line.split(u',', 3)
p0 = p[0].replace(u'"', u'') p0 = p[0].replace(u'"', u'')
p3 = p[3].replace(u'"',u'') p3 = p[3].replace(u'"', u'')
if book_ptr is not p0: if book_ptr is not p0:
book = self.bibledb.get_bible_book(p0) book = self.bibledb.get_bible_book(p0)
book_ptr = book.name book_ptr = book.name
# increament the progress bar # increament the progress bar
dialogobject.incrementProgressBar(book.name) dialogobject.incrementProgressBar(u'Importing %s %s' % \
book.name)
self.bibledb.add_verse(book.id, p[1], p[2], p3) self.bibledb.add_verse(book.id, p[1], p[2], p3)
count += 1 count += 1
#Every x verses repaint the screen #Every x verses repaint the screen
if count % 3 == 0: if count % 3 == 0:
Receiver.send_message(u'process_events') Receiver.send_message(u'process_events')
count = 0 count = 0
self.bibledb.save_verses()
except: except:
log.exception(u'Loading verses from file failed') log.exception(u'Loading verses from file failed')
finally: finally:

View File

@ -53,20 +53,23 @@ class BibleDBImpl(BibleCommon):
self.metadata.create_all(checkfirst=True) self.metadata.create_all(checkfirst=True)
def create_tables(self): def create_tables(self):
log.debug( u'createTables') log.debug(u'createTables')
self.save_meta(u'dbversion', u'2') self.save_meta(u'dbversion', u'2')
self._load_testament(u'Old Testament') self._load_testament(u'Old Testament')
self._load_testament(u'New Testament') self._load_testament(u'New Testament')
self._load_testament(u'Apocrypha') self._load_testament(u'Apocrypha')
def add_verse(self, bookid, chap, vse, text): def add_verse(self, bookid, chap, vse, text):
#log.debug(u'add_verse %s,%s,%s", bookid, chap, vse)
verse = Verse() verse = Verse()
verse.book_id = bookid verse.book_id = bookid
verse.chapter = chap verse.chapter = chap
verse.verse = vse verse.verse = vse
verse.text = text verse.text = text
self.session.add(verse) self.session.add(verse)
return verse
def save_verses(self):
log.debug('Saving verses...')
self.session.commit() self.session.commit()
def create_chapter(self, bookid, chap, textlist): def create_chapter(self, bookid, chap, textlist):

View File

@ -28,7 +28,7 @@ import os.path
import logging import logging
import chardet import chardet
import codecs import codecs
import time import re
from PyQt4 import QtCore from PyQt4 import QtCore
@ -54,22 +54,31 @@ class BibleOSISImpl():
A reference to a Bible database object. A reference to a Bible database object.
""" """
log.info(u'BibleOSISImpl Initialising') log.info(u'BibleOSISImpl Initialising')
self.verse_regex = re.compile(
r'<verse osisID="([a-zA-Z0-9 ]*).([0-9]*).([0-9]*)">(.*?)</verse>')
self.note_regex = re.compile(r'<note(.*?)>(.*?)</note>')
self.title_regex = re.compile(r'<title(.*?)>(.*?)</title>')
self.milestone_regex = re.compile(r'<milestone(.*?)/>')
self.fi_regex = re.compile(r'<FI>(.*?)<Fi>')
self.rf_regex = re.compile(r'<RF>(.*?)<Rf>')
self.lb_regex = re.compile(r'<lb(.*?)>')
self.l_regex = re.compile(r'<l (.*?)>')
self.w_regex = re.compile(r'<w (.*?)>')
self.q_regex = re.compile(r'<q (.*?)>')
self.spaces_regex = re.compile(r'([ ]{2,})')
self.bibledb = bibledb self.bibledb = bibledb
# books of the bible linked to bibleid {osis , name} self.books = {}
self.booksOfBible = {}
# books of the bible linked to bibleid {osis ,Abbrev }
self.abbrevOfBible = {}
filepath = os.path.split(os.path.abspath(__file__))[0] filepath = os.path.split(os.path.abspath(__file__))[0]
filepath = os.path.abspath(os.path.join( filepath = os.path.abspath(os.path.join(
filepath, u'..', u'resources',u'osisbooks.csv')) filepath, u'..', u'resources', u'osisbooks.csv'))
fbibles = None fbibles = None
self.loadbible = True self.loadbible = True
try: try:
fbibles = open(filepath, u'r') fbibles = open(filepath, u'r')
for line in fbibles: for line in fbibles:
p = line.split(u',') book = line.split(u',')
self.booksOfBible[p[0]] = p[1].replace(u'\n', u'') self.books[book[0]] = (book[1].lstrip().rstrip(),
self.abbrevOfBible[p[0]] = p[2].replace(u'\n', u'') book[2].lstrip().rstrip())
except: except:
log.exception(u'OSIS bible import failed') log.exception(u'OSIS bible import failed')
finally: finally:
@ -99,7 +108,7 @@ class BibleOSISImpl():
detect_file = None detect_file = None
try: try:
detect_file = open(osisfile_record, u'r') detect_file = open(osisfile_record, u'r')
details = chardet.detect(detect_file.read(2048)) details = chardet.detect(detect_file.read(3000))
except: except:
log.exception(u'Failed to detect OSIS file encoding') log.exception(u'Failed to detect OSIS file encoding')
return return
@ -109,130 +118,59 @@ class BibleOSISImpl():
osis = None osis = None
try: try:
osis = codecs.open(osisfile_record, u'r', details['encoding']) osis = codecs.open(osisfile_record, u'r', details['encoding'])
book_ptr = None last_chapter = 0
count = 0
verseText = u'<verse osisID='
testament = 1 testament = 1
for file_record in osis.readlines(): db_book = None
# cancel pressed on UI for file_record in osis:
if not self.loadbible: match = self.verse_regex.search(file_record)
break if match:
pos = file_record.find(verseText) book = match.group(1)
# we have a verse chapter = int(match.group(2))
if pos > -1: verse = int(match.group(3))
epos = file_record.find(u'>', pos) verse_text = match.group(4)
# Book Reference if not db_book or db_book.name != book:
ref = file_record[pos+15:epos-1] if book == u'Matt':
#lets find the bible text only
# find start of text
pos = epos + 1
# end of text
epos = file_record.find(u'</verse>', pos)
text = file_record[pos : epos]
#remove tags of extra information
text = self.remove_block(u'<title', u'</title>', text)
text = self.remove_block(u'<note', u'</note>', text)
text = self.remove_block(
u'<divineName', u'</divineName>', text)
text = self.remove_tag(u'<lb', text)
text = self.remove_tag(u'<q', text)
text = self.remove_tag(u'<l', text)
text = self.remove_tag(u'<lg', text)
# Strange tags where the end is not the same as the start
# The must be in this order as at least one bible has them
# crossing and the removal does not work.
pos = text.find(u'<FI>')
while pos > -1:
epos = text.find(u'<Fi>', pos)
if epos == -1: # TODO
pos = -1
else:
text = text[:pos] + text[epos + 4: ]
pos = text.find(u'<FI>')
pos = text.find(u'<RF>')
while pos > -1:
epos = text.find(u'<Rf>', pos)
text = text[:pos] + text[epos + 4: ]
pos = text.find(u'<RF>')
# split up the reference
p = ref.split(u'.', 3)
if book_ptr != p[0]:
# first time through
if book_ptr is None:
# set the max book size depending
# on the first book read
if p[0] == u'Gen':
dialogobject.setMax(65)
else:
dialogobject.setMax(27)
# First book of NT
if p[0] == u'Matt':
testament += 1 testament += 1
book_ptr = p[0] db_book = self.bibledb.create_book(
book = self.bibledb.create_book( unicode(self.books[book][0]),
unicode(self.booksOfBible[p[0]]), unicode(self.books[book][1]),
unicode(self.abbrevOfBible[p[0]]),
testament) testament)
if last_chapter == 0:
if book == u'Gen':
dialogobject.ImportProgressBar.setMaximum(1188)
else:
dialogobject.ImportProgressBar.setMaximum(260)
if last_chapter != chapter:
if last_chapter != 0:
self.bibledb.save_verses()
dialogobject.incrementProgressBar( dialogobject.incrementProgressBar(
self.booksOfBible[p[0]]) u'Importing %s %s...' % \
Receiver.send_message(u'process_events') (self.books[match.group(1)][0], chapter))
#minor delay to get the events processed last_chapter = chapter
time.sleep(0.1) # All of this rigmarol below is because the mod2osis
count = 0 # tool from the Sword library embeds XML in the OSIS
self.bibledb.add_verse(book.id, p[1], p[2], text) # but neglects to enclose the verse text (with XML) in
count += 1 # <[CDATA[ ]]> tags.
#Every 3 verses repaint the screen verse_text = self.note_regex.sub(u'', verse_text)
if count % 30 == 0: verse_text = self.title_regex.sub(u'', verse_text)
Receiver.send_message(u'process_events') verse_text = self.milestone_regex.sub(u'', verse_text)
#minor delay to get the events processed verse_text = self.fi_regex.sub(u'', verse_text)
time.sleep(0.1) verse_text = self.rf_regex.sub(u'', verse_text)
count = 0 verse_text = self.lb_regex.sub(u'', verse_text)
verse_text = self.l_regex.sub(u'', verse_text)
verse_text = self.w_regex.sub(u'', verse_text)
verse_text = self.q_regex.sub(u'', verse_text)
verse_text = verse_text.replace(u'</lb>', u'')\
.replace(u'</l>', u'').replace(u'<lg>', u'')\
.replace(u'</lg>', u'').replace(u'</q>', u'')\
.replace(u'</div>', u'')
verse_text = self.spaces_regex.sub(u' ', verse_text)
self.bibledb.add_verse(db_book.id, chapter, verse, verse_text)
self.bibledb.save_verses()
dialogobject.incrementProgressBar(u'Finishing import...')
except: except:
log.exception(u'Loading bible from OSIS file failed') log.exception(u'Loading bible from OSIS file failed')
finally: finally:
if osis: if osis:
osis.close() osis.close()
def remove_block(self, start_tag, end_tag, text):
"""
Removes a block of text between two tags::
<tag attrib="xvf">Some not wanted text</tag>
``start_tag``
The XML tag to look for.
``end_tag``
The ending XML tag.
``text``
The string of XML to search.
"""
pos = text.find(start_tag)
while pos > -1:
epos = text.find(end_tag, pos)
if epos == -1:
pos = -1
else:
text = text[:pos] + text[epos + len(end_tag): ]
pos = text.find(start_tag)
return text
def remove_tag(self, start_tag, text):
"""
Removes a single tag::
<tag attrib1="fajkdf" attrib2="fajkdf" attrib3="fajkdf" />
``start_tag``
The XML tag to remove.
``text``
The string of XML to search.
"""
pos = text.find(start_tag)
while pos > -1:
epos = text.find(u'/>', pos)
text = text[:pos] + text[epos + 2: ]
pos = text.find(start_tag)
return text

View File

@ -0,0 +1,112 @@
# -*- coding: utf-8 -*-
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2009 Raoul Snyman #
# Portions copyright (c) 2008-2009 Tim Bentley, Jonathan Corwin, Michael #
# Gorven, Scott Guerrieri, Maikel Stuivenberg, Martin Thompson, Jon Tibble, #
# Carsten Tinggaard #
# --------------------------------------------------------------------------- #
# This program is free software; you can redistribute it and/or modify it #
# under the terms of the GNU General Public License as published by the Free #
# Software Foundation; version 2 of the License. #
# #
# This program is distributed in the hope that it will be useful, but WITHOUT #
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
# more details. #
# #
# You should have received a copy of the GNU General Public License along #
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
import os
import os.path
import logging
import chardet
import codecs
from lxml import objectify
from PyQt4 import QtCore
from openlp.core.lib import Receiver
class BibleOpenSongImpl():
"""
OSIS Bible format importer class.
"""
global log
log = logging.getLogger(__name__)
log.info(u'BibleOpenSongImpl loaded')
def __init__(self, biblepath, bibledb):
"""
Constructor to create and set up an instance of the
BibleOpenSongImpl class.
``biblepath``
This does not seem to be used.
``bibledb``
A reference to a Bible database object.
"""
log.info(u'BibleOpenSongImpl Initialising')
self.bibledb = bibledb
self.loadbible = True
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'openlpstopimport'), self.stop_import)
def stop_import(self):
"""
Stops the import of the Bible.
"""
self.loadbible = False
def load_data(self, bible_file, dialogobject=None):
"""
Loads a Bible from file.
``bible_file``
The file to import from.
``dialogobject``
The Import dialog, so that we can increase the counter on
the progress bar.
"""
log.info(u'Load data for %s' % bible_file)
bible_file = unicode(bible_file)
detect_file = None
try:
detect_file = open(bible_file, u'r')
details = chardet.detect(detect_file.read(2048))
except:
log.exception(u'Failed to detect OpenSong file encoding')
return
finally:
if detect_file:
detect_file.close()
opensong_bible = None
try:
opensong_bible = codecs.open(bible_file, u'r', details['encoding'])
opensong = objectify.parse(opensong_bible)
bible = opensong.getroot()
for book in bible.b:
dbbook = self.bibledb.create_book(book.attrib[u'n'],
book.attrib[u'n'][:4])
for chapter in book.c:
for verse in chapter.v:
self.bibledb.add_verse(dbbook.id, chapter.attrib[u'n'],
verse.attrib[u'n'], verse.text)
Receiver.send_message(u'process_events')
dialogobject.incrementProgressBar(u'Importing %s %s' % \
(dbbook.name, str(chapter.attrib[u'n'])))
self.bibledb.save_verses()
except:
log.exception(u'Loading bible from OpenSong file failed')
finally:
if opensong_bible:
opensong_bible.close()

View File

@ -26,6 +26,7 @@
import logging import logging
import os import os
from bibleOpenSongimpl import BibleOpenSongImpl
from bibleOSISimpl import BibleOSISImpl from bibleOSISimpl import BibleOSISImpl
from bibleCSVimpl import BibleCSVImpl from bibleCSVimpl import BibleCSVImpl
from bibleDBimpl import BibleDBImpl from bibleDBimpl import BibleDBImpl
@ -35,6 +36,28 @@ class BibleMode(object):
Full = 1 Full = 1
Partial = 2 Partial = 2
class BibleFormat(object):
Unknown = -1
OSIS = 0
CSV = 1
OpenSong = 2
WebDownload = 3
@classmethod
def get_handler(class_, id):
if id == class_.OSIS:
return BibleOSISImpl
elif id == class_.CSV:
return BibleCSVImpl
elif id == class_.OpenSong:
return BibleOpenSongImpl
elif id == class_.WebDownload:
return BibleHTTPImpl
else:
return None
class BibleManager(object): class BibleManager(object):
""" """
The Bible manager which holds and manages all the Bibles. The Bible manager which holds and manages all the Bibles.
@ -141,6 +164,15 @@ class BibleManager(object):
""" """
self.dialogobject = dialogobject self.dialogobject = dialogobject
def import_bible(self, type, **kwargs):
"""
Register a bible in the bible cache, and then import the verses.
``type``
What type of Bible,
"""
pass
def register_http_bible(self, biblename, biblesource, bibleid, def register_http_bible(self, biblename, biblesource, bibleid,
proxyurl=None, proxyid=None, proxypass=None): proxyurl=None, proxyid=None, proxypass=None):
""" """
@ -176,7 +208,7 @@ class BibleManager(object):
self.bible_db_cache[biblename] = nbible self.bible_db_cache[biblename] = nbible
nhttp = BibleHTTPImpl() nhttp = BibleHTTPImpl()
nhttp.set_bible_source(biblesource) nhttp.set_bible_source(biblesource)
self.bible_http_cache [biblename] = nhttp self.bible_http_cache[biblename] = nhttp
# register a lazy loading interest # register a lazy loading interest
nbible.save_meta(u'WEB', biblesource) nbible.save_meta(u'WEB', biblesource)
# store the web id of the bible # store the web id of the bible
@ -245,6 +277,28 @@ class BibleManager(object):
biblename, osisfile) biblename, osisfile)
return False return False
def register_opensong_bible(self, biblename, opensongfile):
"""
Method to load a bible from an OpenSong xml file. If the database
exists it is deleted and the database is reloaded from scratch.
"""
log.debug(u'register_opensong_file_bible %s, %s', biblename, opensongfile)
if self._is_new_bible(biblename):
# Create new Bible
nbible = BibleDBImpl(self.biblePath, biblename, self.config)
# Create Database
nbible.create_tables()
# Cache the database for use later
self.bible_db_cache[biblename] = nbible
# Create the loader and pass in the database
bcsv = BibleOpenSongImpl(self.biblePath, nbible)
bcsv.load_data(opensongfile, self.dialogobject)
return True
else:
log.debug(u'register_opensong_file_bible %s, %s not created '
u'already exists', biblename, opensongfile)
return False
def get_bibles(self, mode=BibleMode.Full): def get_bibles(self, mode=BibleMode.Full):
""" """
Returns a list of Books of the bible. When ``mode`` is set to Returns a list of Books of the bible. When ``mode`` is set to

View File

@ -30,7 +30,7 @@ from PyQt4 import QtCore, QtGui
from openlp.core.lib import MediaManagerItem, Receiver, str_to_bool, \ from openlp.core.lib import MediaManagerItem, Receiver, str_to_bool, \
BaseListWithDnD BaseListWithDnD
from openlp.plugins.bibles.forms import BibleImportForm from openlp.plugins.bibles.forms import ImportWizardForm
from openlp.plugins.bibles.lib.manager import BibleMode from openlp.plugins.bibles.lib.manager import BibleMode
class BibleListView(BaseListWithDnD): class BibleListView(BaseListWithDnD):
@ -326,8 +326,11 @@ class BibleMediaItem(MediaManagerItem):
self.AdvancedBookComboBox.itemData(item).toInt()[0]) self.AdvancedBookComboBox.itemData(item).toInt()[0])
def onNewClick(self): def onNewClick(self):
self.bibleimportform = BibleImportForm( #self.bibleimportform = BibleImportForm(
self.parent.config, self.parent.biblemanager, self) # self.parent.config, self.parent.biblemanager, self)
#self.bibleimportform.exec_()
self.bibleimportform = ImportWizardForm(self, self.parent.config,
self.parent.biblemanager, self.parent)
self.bibleimportform.exec_() self.bibleimportform.exec_()
self.reloadBibles() self.reloadBibles()

View File

@ -113,7 +113,6 @@ class EditCustomForm(QtGui.QDialog, Ui_customEditDialog):
self.customSlide = self.custommanager.get_custom(id) self.customSlide = self.custommanager.get_custom(id)
self.TitleEdit.setText(self.customSlide.title) self.TitleEdit.setText(self.customSlide.title)
self.CreditEdit.setText(self.customSlide.credits) self.CreditEdit.setText(self.customSlide.credits)
songXML = SongXMLParser(self.customSlide.text) songXML = SongXMLParser(self.customSlide.text)
verseList = songXML.get_verses() verseList = songXML.get_verses()
for verse in verseList: for verse in verseList:

View File

@ -0,0 +1,619 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Wizard</class>
<widget class="QWizard" name="Wizard">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>550</width>
<height>386</height>
</rect>
</property>
<property name="windowTitle">
<string>Bible Import Wizard</string>
</property>
<property name="modal">
<bool>true</bool>
</property>
<property name="wizardStyle">
<enum>QWizard::ModernStyle</enum>
</property>
<property name="options">
<set>QWizard::NoBackButtonOnLastPage|QWizard::NoBackButtonOnStartPage</set>
</property>
<widget class="QWizardPage" name="WelcomePage">
<property name="title">
<string/>
</property>
<property name="subTitle">
<string/>
</property>
<layout class="QHBoxLayout" name="WelcomeLayout">
<property name="spacing">
<number>8</number>
</property>
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="ImportBibleImage">
<property name="minimumSize">
<size>
<width>163</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>163</width>
<height>16777215</height>
</size>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../images/openlp-2.qrc">:/wizards/wizard_importbible.bmp</pixmap>
</property>
<property name="indent">
<number>0</number>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="WelcomePageLayout">
<property name="spacing">
<number>8</number>
</property>
<item>
<widget class="QLabel" name="TitleLabel">
<property name="text">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body &gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:14pt; font-weight:600;&quot;&gt;Welcome to the Bible Import Wizard&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item>
<spacer name="WelcomeTopSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="InformationLabel">
<property name="text">
<string>This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
<property name="margin">
<number>10</number>
</property>
</widget>
</item>
<item>
<spacer name="WelcomeBottomSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QWizardPage" name="SelectPage">
<property name="title">
<string>Select Import Source</string>
</property>
<property name="subTitle">
<string>Select the import format, and where to import from.</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>8</number>
</property>
<property name="margin">
<number>20</number>
</property>
<item>
<layout class="QHBoxLayout" name="FormatSelectLayout">
<property name="spacing">
<number>8</number>
</property>
<item>
<widget class="QLabel" name="FormatLabel">
<property name="text">
<string>Format:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="FormatComboBox">
<item>
<property name="text">
<string>OSIS</string>
</property>
</item>
<item>
<property name="text">
<string>CSV</string>
</property>
</item>
<item>
<property name="text">
<string>OpenSong</string>
</property>
</item>
<item>
<property name="text">
<string>Web Download</string>
</property>
</item>
</widget>
</item>
<item>
<spacer name="SourceTypeSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<widget class="QStackedWidget" name="FormatWidget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="OsisPage">
<layout class="QFormLayout" name="formLayout_2">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::ExpandingFieldsGrow</enum>
</property>
<property name="horizontalSpacing">
<number>8</number>
</property>
<property name="verticalSpacing">
<number>8</number>
</property>
<property name="margin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="OsisBibleNameLabel">
<property name="text">
<string>Bible Name:</string>
</property>
<property name="indent">
<number>0</number>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="OsisBibleNameEdit"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="OsisLocationLabel">
<property name="text">
<string>File Location:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<layout class="QHBoxLayout" name="OsisLocationLayout">
<property name="spacing">
<number>8</number>
</property>
<item>
<widget class="QLineEdit" name="OSISLocationEdit"/>
</item>
<item>
<widget class="QToolButton" name="OsisFileButton">
<property name="maximumSize">
<size>
<width>32</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../images/openlp-2.qrc">
<normaloff>:/imports/import_load.png</normaloff>:/imports/import_load.png</iconset>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QWidget" name="CsvPage">
<layout class="QFormLayout" name="CsvSourceLayout">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::ExpandingFieldsGrow</enum>
</property>
<property name="labelAlignment">
<set>Qt::AlignBottom|Qt::AlignRight|Qt::AlignTrailing</set>
</property>
<property name="formAlignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
<property name="horizontalSpacing">
<number>8</number>
</property>
<property name="verticalSpacing">
<number>8</number>
</property>
<property name="margin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="BooksLocationLabel">
<property name="text">
<string>Books Location:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<layout class="QHBoxLayout" name="CsvBooksLayout">
<property name="spacing">
<number>8</number>
</property>
<item>
<widget class="QLineEdit" name="BooksLocationEdit"/>
</item>
<item>
<widget class="QToolButton" name="BooksFileButton">
<property name="maximumSize">
<size>
<width>32</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../images/openlp-2.qrc">
<normaloff>:/imports/import_load.png</normaloff>:/imports/import_load.png</iconset>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QLabel" name="VerseLocationLabel">
<property name="text">
<string>Verse Location:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<layout class="QHBoxLayout" name="CsvVerseLayout">
<property name="spacing">
<number>8</number>
</property>
<item>
<widget class="QLineEdit" name="CsvVerseLocationEdit"/>
</item>
<item>
<widget class="QToolButton" name="CsvVersesFileButton">
<property name="maximumSize">
<size>
<width>32</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../images/openlp-2.qrc">
<normaloff>:/imports/import_load.png</normaloff>:/imports/import_load.png</iconset>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QWidget" name="OpenSongPage">
<layout class="QFormLayout" name="formLayout_3">
<property name="horizontalSpacing">
<number>8</number>
</property>
<property name="verticalSpacing">
<number>8</number>
</property>
<property name="margin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="OpenSongFileLabel">
<property name="text">
<string>Bible Filename:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<layout class="QHBoxLayout" name="OpenSongFileLayout">
<property name="spacing">
<number>8</number>
</property>
<item>
<widget class="QLineEdit" name="OpenSongFileEdit"/>
</item>
<item>
<widget class="QToolButton" name="OpenSongBrowseButton">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../images/openlp-2.qrc">
<normaloff>:/imports/import_load.png</normaloff>:/imports/import_load.png</iconset>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QWidget" name="WebDownloadPage">
<layout class="QVBoxLayout" name="WebDownloadLayout">
<property name="spacing">
<number>8</number>
</property>
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="QTabWidget" name="WebDownloadTabWidget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="DownloadOptionsTab">
<attribute name="title">
<string>Download Options</string>
</attribute>
<layout class="QFormLayout" name="DownloadOptionsLayout">
<property name="horizontalSpacing">
<number>8</number>
</property>
<property name="verticalSpacing">
<number>8</number>
</property>
<property name="margin">
<number>8</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="LocationLabel">
<property name="text">
<string>Location:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="LocationComboBox">
<item>
<property name="text">
<string>Crosswalk</string>
</property>
</item>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="BibleLabel">
<property name="text">
<string>Bible:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="BibleComboBox">
<property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToContents</enum>
</property>
<item>
<property name="text">
<string>English Standard Version</string>
</property>
</item>
<item>
<property name="text">
<string>King James Version</string>
</property>
</item>
<item>
<property name="text">
<string>New International Version</string>
</property>
</item>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="ProxyServerTab">
<attribute name="title">
<string>Proxy Server (Optional)</string>
</attribute>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="AddressLabel">
<property name="text">
<string>Server:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="AddressEdit"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="UsernameLabel">
<property name="text">
<string>Username:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="UsernameEdit"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="PasswordLabel">
<property name="text">
<string>Password:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="PasswordEdit"/>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<widget class="QWizardPage" name="LicenseDetailsPage">
<property name="title">
<string>License Details</string>
</property>
<property name="subTitle">
<string>Set up the Bible's license details.</string>
</property>
<layout class="QFormLayout" name="formLayout_5">
<property name="horizontalSpacing">
<number>8</number>
</property>
<property name="verticalSpacing">
<number>8</number>
</property>
<property name="margin">
<number>20</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="VersionNameLabel">
<property name="text">
<string>Version Name:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="VersionNameEdit"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="CopyrightLabel">
<property name="text">
<string>Copyright:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="CopyrightEdit"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="PermisionLabel">
<property name="text">
<string>Permission:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="PermisionEdit"/>
</item>
</layout>
</widget>
<widget class="QWizardPage" name="ImportPage">
<property name="title">
<string>Importing</string>
</property>
<property name="subTitle">
<string>Please wait while your Bible is imported.</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<property name="spacing">
<number>8</number>
</property>
<property name="margin">
<number>50</number>
</property>
<item>
<widget class="QLabel" name="ImportProgressLabel">
<property name="text">
<string>Ready.</string>
</property>
</widget>
</item>
<item>
<widget class="QProgressBar" name="ImportProgressBar">
<property name="value">
<number>0</number>
</property>
<property name="invertedAppearance">
<bool>false</bool>
</property>
<property name="format">
<string>%p</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
<resources>
<include location="../images/openlp-2.qrc"/>
</resources>
<connections>
<connection>
<sender>FormatComboBox</sender>
<signal>currentIndexChanged(int)</signal>
<receiver>FormatWidget</receiver>
<slot>setCurrentIndex(int)</slot>
<hints>
<hint type="sourcelabel">
<x>106</x>
<y>76</y>
</hint>
<hint type="destinationlabel">
<x>296</x>
<y>147</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -1 +1 @@
1.9.0-691 1.9.0-692