diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py
index fc6a4bf0c..84525352e 100644
--- a/openlp/core/lib/__init__.py
+++ b/openlp/core/lib/__init__.py
@@ -144,8 +144,9 @@ def resize_image(image, width, height):
The image to resize.
"""
preview = QtGui.QImage(image)
- preview = preview.scaled(width, height, QtCore.Qt.KeepAspectRatio,
- QtCore.Qt.SmoothTransformation)
+ if not preview.isNull():
+ preview = preview.scaled(width, height, QtCore.Qt.KeepAspectRatio,
+ QtCore.Qt.SmoothTransformation)
realw = preview.width()
realh = preview.height()
# and move it to the centre of the preview space
diff --git a/openlp/core/ui/themestab.py b/openlp/core/ui/themestab.py
index fff8c384c..0deca94e9 100644
--- a/openlp/core/ui/themestab.py
+++ b/openlp/core/ui/themestab.py
@@ -159,9 +159,10 @@ class ThemesTab(SettingsTab):
image = self.parent.ThemeManagerContents.getPreviewImage(
self.global_theme)
preview = QtGui.QPixmap(unicode(image))
- display = preview.scaled(300, 255, QtCore.Qt.KeepAspectRatio,
- QtCore.Qt.SmoothTransformation)
- self.DefaultListView.setPixmap(display)
+ if not preview.isNull():
+ preview = preview.scaled(300, 255, QtCore.Qt.KeepAspectRatio,
+ QtCore.Qt.SmoothTransformation)
+ self.DefaultListView.setPixmap(preview)
def updateThemeList(self, theme_list):
"""
@@ -184,6 +185,7 @@ class ThemesTab(SettingsTab):
image = self.parent.ThemeManagerContents.getPreviewImage(
self.global_theme)
preview = QtGui.QPixmap(unicode(image))
- display = preview.scaled(300, 255, QtCore.Qt.KeepAspectRatio,
- QtCore.Qt.SmoothTransformation)
- self.DefaultListView.setPixmap(display)
+ if not preview.isNull():
+ preview = preview.scaled(300, 255, QtCore.Qt.KeepAspectRatio,
+ QtCore.Qt.SmoothTransformation)
+ self.DefaultListView.setPixmap(preview)
diff --git a/openlp/migration/migratebibles.py b/openlp/migration/migratebibles.py
index cd07aa032..b73b016cf 100644
--- a/openlp/migration/migratebibles.py
+++ b/openlp/migration/migratebibles.py
@@ -23,10 +23,204 @@
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
+import os
+import sys
+import sqlite3
+
+from sqlalchemy import *
+from sqlalchemy import create_engine
+from sqlalchemy.orm import scoped_session, sessionmaker, mapper, relation
+
+from openlp.core.lib import PluginConfig
+from openlp.plugins.bibles.lib.models import *
+
+class BaseModel(object):
+ """
+ BaseModel provides a base object with a set of generic functions
+ """
+
+ @classmethod
+ def populate(cls, **kwargs):
+ """
+ Creates an instance of a class and populates it, returning the instance
+ """
+ me = cls()
+ keys = kwargs.keys()
+ for key in keys:
+ me.__setattr__(key, kwargs[key])
+ return me
+
+class TBibleMeta(BaseModel):
+ """
+ Bible Meta Data
+ """
+ pass
+
+class TTestament(BaseModel):
+ """
+ Bible Testaments
+ """
+ pass
+
+class TBook(BaseModel):
+ """
+ Song model
+ """
+ pass
+
+class TVerse(BaseModel):
+ """
+ Topic model
+ """
+ pass
+
+temp_meta_table = Table(u'metadata_temp', metadata,
+ Column(u'key', types.Unicode(255), primary_key=True),
+ Column(u'value', types.Unicode(255)),
+)
+temp_testament_table = Table(u'testament_temp', metadata,
+ Column(u'id', types.Integer, primary_key=True),
+ Column(u'name', types.Unicode(30)),
+)
+temp_book_table = Table(u'book_temp', metadata,
+ Column(u'id', types.Integer, primary_key=True),
+ Column(u'testament_id', types.Integer),
+ Column(u'name', types.Unicode(30)),
+ Column(u'abbreviation', types.Unicode(5)),
+)
+temp_verse_table = Table(u'verse_temp', metadata,
+ Column(u'id', types.Integer, primary_key=True),
+ Column(u'book_id', types.Integer),
+ Column(u'chapter', types.Integer),
+ Column(u'verse', types.Integer),
+ Column(u'text', types.UnicodeText),
+)
+
+mapper(TBibleMeta, temp_meta_table)
+mapper(TTestament, temp_testament_table)
+mapper(TBook, temp_book_table)
+mapper(TVerse, temp_verse_table)
+
+def init_models(url):
+ engine = create_engine(url)
+ metadata.bind = engine
+ session = scoped_session(sessionmaker(autoflush=False,
+ autocommit=False, bind=engine))
+ return session
+
class MigrateBibles():
def __init__(self, display):
self.display = display
+ self.config = PluginConfig(u'Bibles')
+ self.data_path = self.config.get_data_path()
+ self.database_files = self.config.get_files(u'sqlite')
+ print self.database_files
+
+ def progress(self, text):
+ print text
+ self.display.output(text)
def process(self):
- self.display.output(u'Bible process started')
- self.display.output(u'Bible process finished')
+ self.progress(u'Bibles processing started')
+ for f in self.database_files:
+ self.v_1_9_0(f)
+ self.progress(u'Bibles processing finished')
+
+ def v_1_9_0(self, database):
+ self.progress(u'Migration 1.9.0 Started for ' + database)
+ self._v1_9_0_old(database)
+ self._v1_9_0_new(database)
+ self._v1_9_0_cleanup(database)
+ self.progress(u'Migration 1.9.0 Finished for ' + database)
+
+ def _v1_9_0_old(self, database):
+ self.progress(u'Rename Tables ' + database)
+ conn = sqlite3.connect(os.path.join(self.data_path, database))
+ conn.execute(u'alter table book rename to book_temp;')
+ conn.commit()
+ conn.execute(u'alter table testament rename to testament_temp;')
+ conn.commit()
+ conn.execute(u'alter table verse rename to verse_temp;')
+ conn.commit()
+ conn.execute(u'alter table metadata rename to metadata_temp;')
+ conn.commit()
+
+ def _v1_9_0_new(self, database):
+ self.progress(u'Create new Tables ' + database)
+ self.db_url = u'sqlite:///' + self.data_path + u'/' + database
+ print self.db_url
+ self.session = init_models(self.db_url)
+ metadata.create_all(checkfirst=True)
+ self.progress(u'Create testament table')
+ results = self.session.query(TTestament).order_by(TTestament.id).all()
+ for testament_temp in results:
+ testament = Testament()
+ testament.id = testament_temp.id
+ testament.name = testament_temp.name
+ try:
+ self.session.add(testament)
+ self.session.commit()
+ except:
+ self.session.rollback()
+ print u'Error thrown = ', sys.exc_info()[1]
+ self.progress(u'Create book table')
+ results = self.session.query(TBook).order_by(TBook.id).all()
+ for book_temp in results:
+ book = Book()
+ book.id = book_temp.id
+ book.testament_id = book_temp.testament_id
+ book.name = book_temp.name
+ book.abbreviation = book_temp.abbreviation
+ try:
+ self.session.add(book)
+ self.session.commit()
+ except:
+ self.session.rollback()
+ print u'Error thrown = ', sys.exc_info()[1]
+ self.progress(u'Create verse table')
+ results = self.session.query(TVerse).order_by(TVerse.id).all()
+ for verse_temp in results:
+ verse = Verse()
+ verse.id = verse_temp.id
+ verse.book_id = verse_temp.book_id
+ verse.chapter = verse_temp.chapter
+ verse.verse = verse_temp.verse
+ verse.text = verse_temp.text
+ try:
+ self.session.add(verse)
+ except:
+ self.session.rollback()
+ print u'Error thrown = ', sys.exc_info()[1]
+ try:
+ self.session.commit()
+ except:
+ self.session.rollback()
+ print u'Error thrown = ', sys.exc_info()[1]
+ self.progress(u'Create metadata table')
+ results = self.session.query(TBibleMeta).order_by(TBibleMeta.key).all()
+ for biblemeta_temp in results:
+ biblemeta = BibleMeta()
+ biblemeta.key = biblemeta_temp.key
+ biblemeta.value = biblemeta_temp.value
+ try:
+ self.session.add(biblemeta)
+ self.session.commit()
+ except:
+ self.session.rollback()
+ print u'Error thrown = ', sys.exc_info()[1]
+
+ def _v1_9_0_cleanup(self, database):
+ self.progress(u'Update Internal Data ' + database)
+ conn = sqlite3.connect(os.path.join(self.data_path, database))
+ conn.commit()
+ conn.execute(u'drop table book_temp;')
+ conn.commit()
+ conn.execute(u'drop table testament_temp;')
+ conn.commit()
+ conn.execute(u'drop table verse_temp;')
+ conn.commit()
+ conn.execute(u'drop table metadata_temp;')
+ conn.commit()
+ conn.execute(u'vacuum;')
+ conn.commit()
+
diff --git a/openlp/plugins/bibles/lib/opensong.py b/openlp/plugins/bibles/lib/opensong.py
index 247c97672..2f7e3e451 100644
--- a/openlp/plugins/bibles/lib/opensong.py
+++ b/openlp/plugins/bibles/lib/opensong.py
@@ -63,7 +63,8 @@ class OpenSongBible(BibleDB):
Loads a Bible from file.
"""
log.debug(u'Starting OpenSong import from "%s"' % self.filename)
- self.filename = unicode(self.filename, u'utf-8')
+ if not isinstance(self.filename, unicode):
+ self.filename = unicode(self.filename, u'utf8')
self.wizard.incrementProgressBar(u'Preparing for import...')
file = None
success = True
diff --git a/openlpcnv.pyw b/openlpcnv.pyw
index 5619c6f14..5d0ff62d0 100755
--- a/openlpcnv.pyw
+++ b/openlpcnv.pyw
@@ -70,7 +70,7 @@ class Migration(object):
"""
#MigrateFiles(self.display).process()
MigrateSongs(self.display).process()
- #MigrateBibles(self.display).process()
+ MigrateBibles(self.display).process()
def move_log_file(self):
"""
@@ -101,6 +101,7 @@ class Migration(object):
writefile.close()
def convert_sqlite2_to_3(self, olddb, newdb):
+ print u'Converting sqlite2 ' + olddb + ' to sqlite3 ' + newdb
if os.name == u'nt':
# we can't make this a raw unicode string as the \U within it causes much confusion
hKey = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE, u'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\SQLite ODBC Driver')
@@ -132,19 +133,30 @@ class Migration(object):
if __name__ == u'__main__':
mig = Migration()
- config = PluginConfig(u'Songs')
- newpath = config.get_data_path()
+ songconfig = PluginConfig(u'Songs')
+ newsongpath = songconfig.get_data_path()
+ bibleconfig = PluginConfig(u'Bibles')
+ newbiblepath = bibleconfig.get_data_path()
if os.name == u'nt':
- if not os.path.isdir(newpath):
- os.makedirs(newpath)
+ if not os.path.isdir(newsongpath):
+ os.makedirs(newsongpath)
+ if not os.path.isdir(newbiblepath):
+ os.makedirs(newbiblepath)
ALL_USERS_APPLICATION_DATA = 35
shell = Dispatch(u'Shell.Application')
folder = shell.Namespace(ALL_USERS_APPLICATION_DATA)
folderitem = folder.Self
- olddb = os.path.join(folderitem.path, u'openlp.org', u'Data', u'songs.olp')
+ oldsongdb = os.path.join(folderitem.path, u'openlp.org', u'Data', u'songs.olp')
+ oldbiblepath = os.path.join(folderitem.path, u'openlp.org', u'Data', u'Bibles')
else:
- olddb = os.path.join(newpath, u'songs.olp')
- newdb = os.path.join(newpath, u'songs.sqlite')
- mig.convert_sqlite2_to_3(olddb, newdb)
+ oldsongdb = os.path.join(newsongpath, u'songs.olp')
+ newsongdb = os.path.join(newsongpath, u'songs.sqlite')
+ mig.convert_sqlite2_to_3(oldsongdb, newsongdb)
+ files = os.listdir(oldbiblepath)
+ for file in files:
+ f = os.path.splitext(os.path.basename(file))[0]
+ if f != 'kjv': #kjv bible has an autoincrement key not supported in sqlite3
+ mig.convert_sqlite2_to_3(os.path.join(oldbiblepath, file),
+ os.path.join(newbiblepath, f + u'.sqlite'))
mig.process()
#mig.move_log_file()
diff --git a/resources/images/openlp-2.qrc b/resources/images/openlp-2.qrc
index 3f2a6e843..bba088c2b 100644
--- a/resources/images/openlp-2.qrc
+++ b/resources/images/openlp-2.qrc
@@ -96,9 +96,9 @@
system_about.png
system_help_contents.png
system_add.png
- system_live.png
system_preview.png
system_mediamanager.png
+ system_live.png
system_contribute.png
system_servicemanager.png
system_thememanager.png
diff --git a/resources/images/system_live.png b/resources/images/system_live.png
index 17fd3ca9d..cb2be2258 100644
Binary files a/resources/images/system_live.png and b/resources/images/system_live.png differ
diff --git a/resources/images/system_preview.png b/resources/images/system_preview.png
index a8a4adfc0..d196792bb 100644
Binary files a/resources/images/system_preview.png and b/resources/images/system_preview.png differ