From 2f840944e9b3a3a7b8361799723a63084ddb1beb Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Sun, 21 Mar 2010 15:55:45 +0000 Subject: [PATCH 01/16] Unused variable fixes --- openlp/plugins/songs/forms/editsongform.py | 2 -- openlp/plugins/songs/lib/mediaitem.py | 2 +- scripts/bible-1to2-converter.py | 1 - 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index 183af6a44..fedd18759 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -498,7 +498,6 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): sxml = SongXMLBuilder() sxml.new_document() sxml.add_lyrics_to_song() - count = 1 text = u' ' for i in range (0, self.VerseListWidget.count()): item = self.VerseListWidget.item(i) @@ -506,7 +505,6 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): bits = verseId.split(u':') sxml.add_verse_to_lyrics(bits[0], bits[1], unicode(item.text())) text = text + unicode(self.VerseListWidget.item(i).text()) + u' ' - count += 1 text = text.replace(u'\'', u'') text = text.replace(u',', u'') text = text.replace(u';', u'') diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index cd440e54f..5090b845c 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -282,7 +282,7 @@ class SongMediaItem(MediaManagerItem): raw_footer = [] author_list = u'' author_audit = [] - ccl = u'' + ccli = u'' if self.remoteTriggered is None: item = self.ListView.currentItem() if item is None: diff --git a/scripts/bible-1to2-converter.py b/scripts/bible-1to2-converter.py index b1e9b6897..19d8ec9e8 100755 --- a/scripts/bible-1to2-converter.py +++ b/scripts/bible-1to2-converter.py @@ -206,7 +206,6 @@ def import_bible(): rows = old_cursor.fetchall() if debug or verbose: print 'done.' - song_map = {} for row in rows: book_id = int(row[1]) chapter = int(row[2]) From 35001679078c4f8a7af2cb0bd2e1af6217f2353e Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Sun, 21 Mar 2010 22:54:26 +0000 Subject: [PATCH 02/16] Bible migration --- openlp/migration/migratebibles.py | 207 +++++++++++++++++++++++++++++- openlpcnv.pyw | 34 +++-- 2 files changed, 228 insertions(+), 13 deletions(-) diff --git a/openlp/migration/migratebibles.py b/openlp/migration/migratebibles.py index f9e10b756..6f3552099 100644 --- a/openlp/migration/migratebibles.py +++ b/openlp/migration/migratebibles.py @@ -23,10 +23,213 @@ # 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') \ No newline at end of file + 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(self.data_path + os.sep + 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) + # self.session.commit() + # except: + # self.session.rollback() + # print u'Error thrown = ', sys.exc_info()[1] + # + # The above is too slow, took hours to not finish one bible + # For now, just do it the old fashioned way + #--- + try: + conn = sqlite3.connect(self.data_path + os.sep + database) + conn.execute(u'insert into verse select * from verse_temp;') + conn.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(self.data_path + os.sep + 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/openlpcnv.pyw b/openlpcnv.pyw index 8c3a8bcf5..802bc7a27 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') @@ -127,24 +128,35 @@ class Migration(object): subprocess.call(cmd, stdin=open(u'sqlite3.dmp', u'r')) else: subprocess.call(cmd, stdin=open(u'sqlite3.dmp', u'r'), shell=True) - os.remove(u'sqlite.dmp') - os.remove(u'sqlite3.dmp') +# os.remove(u'sqlite.dmp') +# os.remove(u'sqlite3.dmp') 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() From 5f2a637b6390edcaabb162ebd87bcdbce0b81c17 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Mon, 22 Mar 2010 08:45:45 +0000 Subject: [PATCH 04/16] Commit verses at end --- openlp/migration/migratebibles.py | 41 ++++++++++++------------------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/openlp/migration/migratebibles.py b/openlp/migration/migratebibles.py index 6f3552099..93f2765c0 100644 --- a/openlp/migration/migratebibles.py +++ b/openlp/migration/migratebibles.py @@ -135,7 +135,7 @@ class MigrateBibles(): def _v1_9_0_old(self, database): self.progress(u'Rename Tables ' + database) - conn = sqlite3.connect(self.data_path + os.sep + 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;') @@ -178,33 +178,24 @@ class MigrateBibles(): 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) - # self.session.commit() - # except: - # self.session.rollback() - # print u'Error thrown = ', sys.exc_info()[1] - # - # The above is too slow, took hours to not finish one bible - # For now, just do it the old fashioned way - #--- + 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: - conn = sqlite3.connect(self.data_path + os.sep + database) - conn.execute(u'insert into verse select * from verse_temp;') - conn.commit() + 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: @@ -220,7 +211,7 @@ class MigrateBibles(): def _v1_9_0_cleanup(self, database): self.progress(u'Update Internal Data ' + database) - conn = sqlite3.connect(self.data_path + os.sep + database) + conn = sqlite3.connect(os.path.join(self.data_path, database)) conn.commit() conn.execute(u'drop table book_temp;') conn.commit() From ca62429bad1e2f556ca857ab69c004fd75ede50f Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Mon, 22 Mar 2010 19:57:24 +0000 Subject: [PATCH 05/16] Commented out two lines without realising it. I blame Noah --- openlpcnv.pyw | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openlpcnv.pyw b/openlpcnv.pyw index 01d0a7db9..5d0ff62d0 100755 --- a/openlpcnv.pyw +++ b/openlpcnv.pyw @@ -128,8 +128,8 @@ class Migration(object): subprocess.call(cmd, stdin=open(u'sqlite3.dmp', u'r')) else: subprocess.call(cmd, stdin=open(u'sqlite3.dmp', u'r'), shell=True) -# os.remove(u'sqlite.dmp') -# os.remove(u'sqlite3.dmp') + os.remove(u'sqlite.dmp') + os.remove(u'sqlite3.dmp') if __name__ == u'__main__': mig = Migration() From c196d258072aed39a95c7ed8dc44f5b6c6f4c934 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Mon, 22 Mar 2010 22:38:50 +0200 Subject: [PATCH 06/16] Replaced "live" icon with a projector icon. Replaced "preview" with a screen icon. --- resources/images/openlp-2.qrc | 2 +- resources/images/system_live.png | Bin 688 -> 720 bytes resources/images/system_preview.png | Bin 608 -> 815 bytes 3 files changed, 1 insertion(+), 1 deletion(-) 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 17fd3ca9dfb1f929a3d9ae17242a99a8c1c67d34..cb2be2258ad636e049e7903049b6f0a662191bd4 100644 GIT binary patch delta 696 zcmV;p0!RI@1<(bMB!32COGiWi{{a60|De66lK=n!32;bRa{vGvuK)lWuK`{fksJU3 z00(qQO+^RS2^(vN&o-?T}ebiRCwCOQcG(SQ560%ck*gFO(IB>*rsW;CatzX zU5FsqE_{I%9|+<<5Ujt${sHM)uwA)yqb?LdVh{>KW0R54=6}&P>6m2NyeG}|+`*J= zT#6rj+?jjs`ObIFz4-62^gkkz2wPo!eRXtnbir3vmbs>t`0j3j zt7_`o%F4?z5Pu{PCMQErm0{(w)oL9u$HBQ^@7S!xVu38nP!#3T`1ts!2H(^H;uxm>6AihDkp$!CUKLroIRFfoZ$NO*@5)nqdHovP;m)GhcsB%+Pj eBN{}Ge}Uhla5FU+K$&>}0000B!2{RLP=Bz2nYy#2xN!=000SaNLh0L00FxI00FxJI_%@(0000P zbVXQnQ*UN;cVTj60C#tHE@^ISb7Ns}WiD@WXPfRk8UO$SElET{R5*>LlRHloQ51l` zJ9Bq-c6OKd@{pir3zfvmio(Lugy280w4mn?_%A5jhR%-OXnzQe4b2)GA4EuiEE!mL zcHXahEyPto6Qid&$vG$Ac?+#I|05Eh+wJOpzmMZM*tU(75-BB>N(Cw9DELRRIF7L_ zi*~y$M&5;8m+6@qApCA96l4Wt*@Z43FCZ<62YqRjDfl@IOMeX4!{Z7-m_x8jSnEL}f`b5F^}vXrNI+&_C@2+zWYo^6g>0(FsjU#l zF|C^mh(-eH43rPnkf0WDo`(okkk}Q>Uxx^=<$j?aRSCL74E+(ECjmHKcV?>_?3gB2;YwhgMWyuC_xxhq)A$c%WDL9f7qwz zd9)Wx6eV%4_|!89(kfC;kQEutW|KlnT;IJ8XfEEt9uu5PMWRwXv%sDelu3=MhjG+Bckf-3X(|lcqeZ+V+tu)xIA_@1Cqa-ns+;*xA{U@Kz5#uh9uaDShdpEf00000b000McNliru+5-#^A0rlKXixwE01e&Qo^Ld7>ubNRsdK4RaGI3F}Mmo8A3aSvkClg31pxp2e_`w_ro*1#3A`* zf}vlciz(?S=HezLic``g#!v+f1Co4#za;JfH#ax@c=0Rq4}2CEOy+x<-_Az-@n^~; zo{}aRg{lz3z_Ly9Lf~c@TI*X6%ChA5vuj?B#=N^wQR|9nS@ZJJAe9cL)um7colXbK zvKUT=gnwmuZ=zC)&cb`RZwMl*M%FoFQ{m1DD%r$owW#YF(=;(nlWuDcrPM7TP19(3 zc{%9!`?Ojut_DpK*TsL+<%1Om!!Rg{;x0f^O0rC|xVT7`Ws%t3-F>pOwDhdk>-qc- z#c_OndV2bq_>Z}E09#vI@2{_~e{C4XW7l;% zZnujN0^7FHTDPMp z`ba7D9C-1s9{|Gl{ReAnYmZk}R^DD+UF|xKBaV-cM~8=pe;phg9E?VzA)sdqe*@Z{ WUlGQJEb#&W0000r)4^&KK@fo9 zzk7OiCcD`&I*ADiA}ERy^Z^3ieFHDvdg!JfCG5&kcE3AZl5%huO#xqf z?%(c_CxJ&V7pNwH3e~V;d$**WM#N%CY{ODoQHK#7mVc%|H*Wa4)8lBV#F5jnHN$=% zKd#7=l+ve|G{d&eU=T#0)Xo$THLR{LBku#%@PKkKz&DCF+ From 1c7504cbb43162e3bcf551e6dc70809dc8b3bd2e Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Mon, 22 Mar 2010 22:54:38 +0200 Subject: [PATCH 07/16] A small unicode conversion fix. --- openlp/plugins/bibles/lib/opensong.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 From 8524bf9174c4aa3550269d288cc436bc0ce07cf8 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Mon, 22 Mar 2010 23:50:32 +0000 Subject: [PATCH 08/16] Remove transparent error: QImage::scaled: Image is a null image --- openlp/core/lib/__init__.py | 5 +++-- openlp/core/ui/themestab.py | 14 ++++++++------ 2 files changed, 11 insertions(+), 8 deletions(-) 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) From c4b49a15116a6c33aa4949b8d0e8d42e59978a19 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Tue, 23 Mar 2010 16:00:52 +0000 Subject: [PATCH 09/16] Import fixes --- openlp/migration/migratebibles.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/openlp/migration/migratebibles.py b/openlp/migration/migratebibles.py index b73b016cf..c0d47fdb8 100644 --- a/openlp/migration/migratebibles.py +++ b/openlp/migration/migratebibles.py @@ -27,9 +27,9 @@ import os import sys import sqlite3 -from sqlalchemy import * +from sqlalchemy import * from sqlalchemy import create_engine -from sqlalchemy.orm import scoped_session, sessionmaker, mapper, relation +from sqlalchemy.orm import scoped_session, sessionmaker, mapper from openlp.core.lib import PluginConfig from openlp.plugins.bibles.lib.models import * @@ -223,4 +223,3 @@ class MigrateBibles(): conn.commit() conn.execute(u'vacuum;') conn.commit() - From 00cb0d1277dd9a067fdd7d244a8802b22f4475f1 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Tue, 23 Mar 2010 19:41:54 +0000 Subject: [PATCH 10/16] Close down presentation apps at end correctly --- .../presentations/lib/impresscontroller.py | 5 +++-- openlp/plugins/presentations/lib/mediaitem.py | 4 ++-- .../presentations/lib/powerpointcontroller.py | 18 ++++++++++-------- .../presentations/lib/pptviewcontroller.py | 8 +++++--- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/openlp/plugins/presentations/lib/impresscontroller.py b/openlp/plugins/presentations/lib/impresscontroller.py index dd0f86840..637e629c0 100644 --- a/openlp/plugins/presentations/lib/impresscontroller.py +++ b/openlp/plugins/presentations/lib/impresscontroller.py @@ -147,8 +147,9 @@ class ImpressController(PresentationController): Called at system exit to clean up any running presentations """ log.debug(u'Kill OpenOffice') - for doc in self.docs: - doc.close_presentation() + for i in range(len(self.docs)): + self.docs[0].close_presentation() # Yes, always the zeroth one + # as close removes item from array if os.name != u'nt': desktop = self.get_uno_desktop() else: diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index 35ec1721b..6e9bbfaed 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -143,7 +143,7 @@ class PresentationMediaItem(MediaManagerItem): for cidx in self.controllers: doc = self.controllers[cidx].add_doc(filepath) doc.presentation_deleted() - self.controllers[cidx].remove_doc(doc) + doc.close_presentation() def generateSlideData(self, service_item): items = self.ListView.selectedIndexes() @@ -171,7 +171,7 @@ class PresentationMediaItem(MediaManagerItem): service_item.add_from_command(path, name, img) i = i + 1 img = doc.get_slide_preview_file(i) - controller.remove_doc(doc) + doc.close_presentation() return True def findControllerByType(self, filename): diff --git a/openlp/plugins/presentations/lib/powerpointcontroller.py b/openlp/plugins/presentations/lib/powerpointcontroller.py index 45d040b45..3dedcec75 100644 --- a/openlp/plugins/presentations/lib/powerpointcontroller.py +++ b/openlp/plugins/presentations/lib/powerpointcontroller.py @@ -81,8 +81,10 @@ class PowerpointController(PresentationController): """ Called at system exit to clean up any running presentations """ - for doc in self.docs: - doc.close_presentation() + log.debug(u'Kill powerpoint') + for i in range(len(self.docs)): + self.docs[0].close_presentation() # Yes, always the zeroth one + # as close removes item from array if self.process is None: return if self.process.Presentations.Count > 0: @@ -149,12 +151,12 @@ class PowerpointDocument(PresentationDocument): Triggerent by new object being added to SlideController orOpenLP being shut down """ - if self.presentation is None: - return - try: - self.presentation.Close() - except: - pass + log.debug(u'ClosePresentation') + if self.presentation: + try: + self.presentation.Close() + except: + pass self.presentation = None self.controller.remove_doc(self) diff --git a/openlp/plugins/presentations/lib/pptviewcontroller.py b/openlp/plugins/presentations/lib/pptviewcontroller.py index 574441850..5646c7258 100644 --- a/openlp/plugins/presentations/lib/pptviewcontroller.py +++ b/openlp/plugins/presentations/lib/pptviewcontroller.py @@ -88,9 +88,10 @@ class PptviewController(PresentationController): """ Called at system exit to clean up any running presentations """ - log.debug(u'Kill') - for doc in self.docs: - doc.close_presentation() + log.debug(u'Kill pptviewer') + for i in range(len(self.docs)): + self.docs[0].close_presentation() # Yes, always the zeroth one + # as close removes item from array def add_doc(self, name): log.debug(u'Add Doc PPTView') @@ -137,6 +138,7 @@ class PptviewDocument(PresentationDocument): Triggerent by new object being added to SlideController orOpenLP being shut down """ + log.debug(u'ClosePresentation') self.controller.process.ClosePPT(self.pptid) self.pptid = -1 self.controller.remove_doc(self) From 6578fb529e46d9baf166677fe672ebb02fff6751 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Tue, 23 Mar 2010 21:51:20 +0000 Subject: [PATCH 11/16] Test tweaks and remove unused variables --- openlp/plugins/presentations/lib/impresscontroller.py | 5 ++--- openlp/plugins/presentations/lib/powerpointcontroller.py | 5 ++--- openlp/plugins/presentations/lib/pptviewcontroller.py | 5 ++--- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/openlp/plugins/presentations/lib/impresscontroller.py b/openlp/plugins/presentations/lib/impresscontroller.py index 637e629c0..14e98273e 100644 --- a/openlp/plugins/presentations/lib/impresscontroller.py +++ b/openlp/plugins/presentations/lib/impresscontroller.py @@ -147,9 +147,8 @@ class ImpressController(PresentationController): Called at system exit to clean up any running presentations """ log.debug(u'Kill OpenOffice') - for i in range(len(self.docs)): - self.docs[0].close_presentation() # Yes, always the zeroth one - # as close removes item from array + while self.docs: + self.docs[0].close_presentation() if os.name != u'nt': desktop = self.get_uno_desktop() else: diff --git a/openlp/plugins/presentations/lib/powerpointcontroller.py b/openlp/plugins/presentations/lib/powerpointcontroller.py index 3dedcec75..67870574d 100644 --- a/openlp/plugins/presentations/lib/powerpointcontroller.py +++ b/openlp/plugins/presentations/lib/powerpointcontroller.py @@ -82,9 +82,8 @@ class PowerpointController(PresentationController): Called at system exit to clean up any running presentations """ log.debug(u'Kill powerpoint') - for i in range(len(self.docs)): - self.docs[0].close_presentation() # Yes, always the zeroth one - # as close removes item from array + while self.docs: + self.docs[0].close_presentation() if self.process is None: return if self.process.Presentations.Count > 0: diff --git a/openlp/plugins/presentations/lib/pptviewcontroller.py b/openlp/plugins/presentations/lib/pptviewcontroller.py index 5646c7258..455e1c601 100644 --- a/openlp/plugins/presentations/lib/pptviewcontroller.py +++ b/openlp/plugins/presentations/lib/pptviewcontroller.py @@ -89,9 +89,8 @@ class PptviewController(PresentationController): Called at system exit to clean up any running presentations """ log.debug(u'Kill pptviewer') - for i in range(len(self.docs)): - self.docs[0].close_presentation() # Yes, always the zeroth one - # as close removes item from array + while self.docs: + self.docs[0].close_presentation() def add_doc(self, name): log.debug(u'Add Doc PPTView') From a091c8f3b665a313ea6128ab2d9401366a7901cb Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Wed, 24 Mar 2010 19:15:25 +0000 Subject: [PATCH 12/16] Fix Quick bible enter --- openlp/plugins/bibles/lib/mediaitem.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 9b286eb1a..3bcc0b426 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -253,6 +253,8 @@ class BibleMediaItem(MediaManagerItem): QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'config_updated'), self.configUpdated) # Other stuff + QtCore.QObject.connect(self.QuickSearchEdit, + QtCore.SIGNAL(u'returnPressed()'), self.onQuickSearchButton) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'bible_showprogress'), self.onSearchProgressShow) QtCore.QObject.connect(Receiver.get_receiver(), From 2eaadffea0034fc4bba0e81e3c481b4a2f335653 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Wed, 24 Mar 2010 23:00:43 +0200 Subject: [PATCH 13/16] Fixed two bugs in the web downloads import dealing with non-latin characters. --- .../plugins/bibles/forms/importwizardform.py | 36 +++++++++++-------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/openlp/plugins/bibles/forms/importwizardform.py b/openlp/plugins/bibles/forms/importwizardform.py index 2efbcdf1e..22fea28f4 100644 --- a/openlp/plugins/bibles/forms/importwizardform.py +++ b/openlp/plugins/bibles/forms/importwizardform.py @@ -37,7 +37,7 @@ from openlp.plugins.bibles.lib.manager import BibleFormat log = logging.getLogger(__name__) -class DownloadLocation(object): +class WebDownload(object): Unknown = -1 Crosswalk = 0 BibleGateway = 1 @@ -282,7 +282,7 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard): self.setField(u'csv_booksfile', QtCore.QVariant('')) self.setField(u'csv_versefile', QtCore.QVariant('')) self.setField(u'opensong_file', QtCore.QVariant('')) - self.setField(u'web_location', QtCore.QVariant(DownloadLocation.Crosswalk)) + self.setField(u'web_location', QtCore.QVariant(WebDownload.Crosswalk)) self.setField(u'web_biblename', QtCore.QVariant(self.BibleComboBox)) self.setField(u'proxy_server', QtCore.QVariant(self.config.get_config(u'proxy address', ''))) @@ -293,7 +293,7 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard): self.setField(u'license_version', QtCore.QVariant(self.VersionNameEdit)) self.setField(u'license_copyright', QtCore.QVariant(self.CopyrightEdit)) self.setField(u'license_permission', QtCore.QVariant(self.PermissionEdit)) - self.onLocationComboBoxChanged(DownloadLocation.Crosswalk) + self.onLocationComboBoxChanged(WebDownload.Crosswalk) def loadWebBibles(self): """ @@ -304,13 +304,13 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard): filepath = os.path.join(filepath, u'bibles', u'resources') fbibles = None try: - self.web_bible_list[DownloadLocation.Crosswalk] = {} + self.web_bible_list[WebDownload.Crosswalk] = {} books_file = open(os.path.join(filepath, u'crosswalkbooks.csv'), 'r') dialect = csv.Sniffer().sniff(books_file.read(1024)) books_file.seek(0) books_reader = csv.reader(books_file, dialect) for line in books_reader: - self.web_bible_list[DownloadLocation.Crosswalk][line[0]] = \ + self.web_bible_list[WebDownload.Crosswalk][line[0]] = \ unicode(line[1], u'utf8').strip() except: log.exception(u'Crosswalk resources missing') @@ -319,14 +319,19 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard): books_file.close() #Load and store BibleGateway Bibles try: - self.web_bible_list[DownloadLocation.BibleGateway] = {} + self.web_bible_list[WebDownload.BibleGateway] = {} books_file = open(os.path.join(filepath, u'biblegateway.csv'), 'r') dialect = csv.Sniffer().sniff(books_file.read(1024)) books_file.seek(0) books_reader = csv.reader(books_file, dialect) for line in books_reader: - self.web_bible_list[DownloadLocation.BibleGateway][line[0]] = \ - unicode(line[1], u'utf-8').strip() + ver = line[0] + name = line[1] + if not isinstance(ver, unicode): + ver = unicode(ver, u'utf8') + if not isinstance(name, unicode): + name = unicode(name, u'utf8') + self.web_bible_list[WebDownload.BibleGateway][ver] = name.strip() except: log.exception(u'Biblegateway resources missing') finally: @@ -383,16 +388,17 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard): # 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(), u'utf8')] - elif download_location == DownloadLocation.BibleGateway: - bible = self.web_bible_list[DownloadLocation.BibleGateway][ - unicode(self.BibleComboBox.currentText(), u'utf8')] + bible_version = self.BibleComboBox.currentText() + if not isinstance(bible_version, unicode): + bible_version = unicode(bible_version, u'utf8') + if download_location == WebDownload.Crosswalk: + bible = self.web_bible_list[WebDownload.Crosswalk][bible_version] + elif download_location == WebDownload.BibleGateway: + bible = self.web_bible_list[WebDownload.BibleGateway][bible_version] importer = self.manager.import_bible( BibleFormat.WebDownload, name=license_version, - download_source=DownloadLocation.get_name(download_location), + download_source=WebDownload.get_name(download_location), download_name=bible, proxy_server=variant_to_unicode(self.field(u'proxy_server')), proxy_username=variant_to_unicode(self.field(u'proxy_username')), From 0b596dab473b72914753ed4ef2c9788115531121 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Wed, 24 Mar 2010 23:18:36 +0200 Subject: [PATCH 14/16] Fixed another possible bug. --- openlp/plugins/bibles/forms/importwizardform.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/openlp/plugins/bibles/forms/importwizardform.py b/openlp/plugins/bibles/forms/importwizardform.py index 22fea28f4..a717a4f44 100644 --- a/openlp/plugins/bibles/forms/importwizardform.py +++ b/openlp/plugins/bibles/forms/importwizardform.py @@ -310,8 +310,13 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard): books_file.seek(0) books_reader = csv.reader(books_file, dialect) for line in books_reader: - self.web_bible_list[WebDownload.Crosswalk][line[0]] = \ - unicode(line[1], u'utf8').strip() + ver = line[0] + name = line[1] + if not isinstance(ver, unicode): + ver = unicode(ver, u'utf8') + if not isinstance(name, unicode): + name = unicode(name, u'utf8') + self.web_bible_list[WebDownload.Crosswalk][ver] = name.strip() except: log.exception(u'Crosswalk resources missing') finally: From b490e74012d652bb5aabaf3a8764fd2df8ad4f00 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Wed, 24 Mar 2010 22:59:05 +0000 Subject: [PATCH 15/16] Start presentation apps in right place --- openlp/plugins/presentations/presentationplugin.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openlp/plugins/presentations/presentationplugin.py b/openlp/plugins/presentations/presentationplugin.py index 5968f1ad9..00a83fe4b 100644 --- a/openlp/plugins/presentations/presentationplugin.py +++ b/openlp/plugins/presentations/presentationplugin.py @@ -57,6 +57,8 @@ class PresentationPlugin(Plugin): for controller in self.controllers: if self.controllers[controller].enabled: presentation_types.append({u'%s' % controller : self.controllers[controller].supports}) + self.controllers[controller].start_process() + Receiver.send_message( u'presentation types', presentation_types) @@ -104,8 +106,6 @@ class PresentationPlugin(Plugin): for controller_class in controller_classes: controller = controller_class(self) self.registerControllers(controller) - if controller.enabled: - controller.start_process() if self.controllers: return True else: From 51d6d2410ba47a160267c4b2bb588bdcf00ff227 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Thu, 25 Mar 2010 19:27:46 +0000 Subject: [PATCH 16/16] Fix QT4.4 bug in service manager --- openlp/core/ui/servicemanager.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 89166316e..28bf29e06 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -148,7 +148,8 @@ class ServiceManager(QtGui.QWidget): self.ServiceManagerList.setHeaderHidden(True) self.ServiceManagerList.setExpandsOnDoubleClick(False) self.ServiceManagerList.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) - self.ServiceManagerList.customContextMenuRequested.connect(self.contextMenu) + QtCore.QObject.connect(self.ServiceManagerList, + QtCore.SIGNAL('customContextMenuRequested(QPoint)'), self.contextMenu) self.ServiceManagerList.setObjectName(u'ServiceManagerList') # enable drop self.ServiceManagerList.__class__.dragEnterEvent = self.dragEnterEvent