← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~raoul-snyman/openlp/bug-851706 into lp:openlp

 

Raoul Snyman has proposed merging lp:~raoul-snyman/openlp/bug-851706 into lp:openlp.

Requested reviews:
  Tim Bentley (trb143)
Related bugs:
  Bug #851706 in OpenLP: "Song import progress bar (triggered by FTW) does not change on a song-by-song basis"
  https://bugs.launchpad.net/openlp/+bug/851706

For more details, see:
https://code.launchpad.net/~raoul-snyman/openlp/bug-851706/+merge/129564

Fixed bug #851706: The song import dialog now shows individual songs being imported. Also tried to make the progress page of the FTW work better, pity it is only slightly...

(resubmitted with fewer process events signals)
-- 
https://code.launchpad.net/~raoul-snyman/openlp/bug-851706/+merge/129564
Your team OpenLP Core is subscribed to branch lp:openlp.
=== modified file 'openlp/core/ui/firsttimeform.py'
--- openlp/core/ui/firsttimeform.py	2012-06-26 16:14:42 +0000
+++ openlp/core/ui/firsttimeform.py	2012-10-13 17:07:22 +0000
@@ -177,8 +177,10 @@
             return FirstTimePage.Progress
         elif self.currentId() == FirstTimePage.Themes:
             Receiver.send_message(u'cursor_busy')
+            Receiver.send_message(u'openlp_process_events')
             while not self.themeScreenshotThread.isFinished():
                 time.sleep(0.1)
+                Receiver.send_message(u'openlp_process_events')
             # Build the screenshot icons, as this can not be done in the thread.
             self._buildThemeScreenshots()
             Receiver.send_message(u'cursor_normal')
@@ -188,10 +190,11 @@
 
     def onCurrentIdChanged(self, pageId):
         """
-        Detects Page changes and updates as approprate.
+        Detects Page changes and updates as appropriate.
         """
         # Keep track of the page we are at.  Triggering "Cancel" causes pageId
         # to be a -1.
+        Receiver.send_message(u'openlp_process_events')
         if pageId != -1:
             self.lastId = pageId
         if pageId == FirstTimePage.Plugins:
@@ -227,10 +230,12 @@
                 self.cancelButton.setVisible(False)
         elif pageId == FirstTimePage.Progress:
             Receiver.send_message(u'cursor_busy')
+            self.repaint()
+            Receiver.send_message(u'openlp_process_events')
+            # Try to give the wizard a chance to redraw itself
+            time.sleep(0.2)
             self._preWizard()
-            Receiver.send_message(u'openlp_process_events')
             self._performWizard()
-            Receiver.send_message(u'openlp_process_events')
             self._postWizard()
             Receiver.send_message(u'cursor_normal')
             Receiver.send_message(u'openlp_process_events')
@@ -263,8 +268,8 @@
         """
         Receiver.send_message(u'cursor_busy')
         self._performWizard()
+        Receiver.send_message(u'cursor_normal')
         Receiver.send_message(u'openlp_process_events')
-        Receiver.send_message(u'cursor_normal')
         Settings().setValue(u'general/has run wizard',
             QtCore.QVariant(True))
         self.close()
@@ -344,6 +349,7 @@
         Receiver.send_message(u'openlp_process_events')
         # Loop through the songs list and increase for each selected item
         for i in xrange(self.songsListWidget.count()):
+            Receiver.send_message(u'openlp_process_events')
             item = self.songsListWidget.item(i)
             if item.checkState() == QtCore.Qt.Checked:
                 filename = item.data(QtCore.Qt.UserRole).toString()
@@ -352,6 +358,7 @@
         # Loop through the Bibles list and increase for each selected item
         iterator = QtGui.QTreeWidgetItemIterator(self.biblesTreeWidget)
         while iterator.value():
+            Receiver.send_message(u'openlp_process_events')
             item = iterator.value()
             if item.parent() and item.checkState(0) == QtCore.Qt.Checked:
                 filename = item.data(0, QtCore.Qt.UserRole).toString()
@@ -360,6 +367,7 @@
             iterator += 1
         # Loop through the themes list and increase for each selected item
         for i in xrange(self.themesListWidget.count()):
+            Receiver.send_message(u'openlp_process_events')
             item = self.themesListWidget.item(i)
             if item.checkState() == QtCore.Qt.Checked:
                 filename = item.data(QtCore.Qt.UserRole).toString()
@@ -381,6 +389,10 @@
             self.progressPage.setTitle(translate('OpenLP.FirstTimeWizard',
                 'Setting Up'))
             self.progressPage.setSubTitle(u'Setup complete.')
+        self.repaint()
+        Receiver.send_message(u'openlp_process_events')
+        # Try to give the wizard a chance to repaint itself
+        time.sleep(0.1)
 
     def _postWizard(self):
         """

=== modified file 'openlp/plugins/songs/lib/olpimport.py'
--- openlp/plugins/songs/lib/olpimport.py	2012-06-22 14:14:53 +0000
+++ openlp/plugins/songs/lib/olpimport.py	2012-10-13 17:07:22 +0000
@@ -63,10 +63,14 @@
         SongImport.__init__(self, manager, **kwargs)
         self.sourceSession = None
 
-    def doImport(self):
+    def doImport(self, progressDialog=None):
         """
         Run the import for an OpenLP version 2 song database.
+
+        ``progressDialog``
+            The QProgressDialog used when importing songs from the FRW.
         """
+
         class OldAuthor(BaseModel):
             """
             Author model
@@ -101,13 +105,14 @@
             """
             pass
 
-
+        # Check the file type
         if not self.importSource.endswith(u'.sqlite'):
             self.logError(self.importSource,
                 translate('SongsPlugin.OpenLPSongImport',
                 'Not a valid OpenLP 2.0 song database.'))
             return
         self.importSource = u'sqlite:///%s' % self.importSource
+        # Load the db file
         engine = create_engine(self.importSource)
         source_meta = MetaData()
         source_meta.reflect(engine)
@@ -224,7 +229,11 @@
                                 file_name=media_file.file_name))
             clean_song(self.manager, new_song)
             self.manager.save_object(new_song)
-            if self.importWizard:
+            if progressDialog:
+                progressDialog.setValue(progressDialog.value() + 1)
+                progressDialog.setLabelText(
+                    WizardStrings.ImportingType % new_song.title)
+            else:
                 self.importWizard.incrementProgressBar(
                     WizardStrings.ImportingType % new_song.title)
             if self.stopImportFlag:

=== modified file 'openlp/plugins/songs/songsplugin.py'
--- openlp/plugins/songs/songsplugin.py	2012-08-04 14:43:44 +0000
+++ openlp/plugins/songs/songsplugin.py	2012-10-13 17:07:22 +0000
@@ -29,6 +29,7 @@
 import logging
 import os
 from tempfile import gettempdir
+import sqlite3
 
 from PyQt4 import QtCore, QtGui
 
@@ -82,7 +83,7 @@
             unicode(UiStrings().Tools))
         QtCore.QObject.connect(Receiver.get_receiver(),
             QtCore.SIGNAL(u'servicemanager_new_service'),
-        self.clearTemporarySongs)
+            self.clearTemporarySongs)
 
 
     def addImportMenuItem(self, import_menu):
@@ -235,31 +236,37 @@
         If the first time wizard has run, this function is run to import all the
         new songs into the database.
         """
+        Receiver.send_message(u'openlp_process_events')
         self.onToolsReindexItemTriggered()
+        Receiver.send_message(u'openlp_process_events')
         db_dir = unicode(os.path.join(
             unicode(gettempdir(), get_filesystem_encoding()), u'openlp'))
         if not os.path.exists(db_dir):
             return
         song_dbs = []
+        song_count = 0
         for sfile in os.listdir(db_dir):
             if sfile.startswith(u'songs_') and sfile.endswith(u'.sqlite'):
+                Receiver.send_message(u'openlp_process_events')
                 song_dbs.append(os.path.join(db_dir, sfile))
+                song_count += self._countSongs(os.path.join(db_dir, sfile))
         if not song_dbs:
             return
+        Receiver.send_message(u'openlp_process_events')
         progress = QtGui.QProgressDialog(self.formParent)
         progress.setWindowModality(QtCore.Qt.WindowModal)
         progress.setWindowTitle(translate('OpenLP.Ui', 'Importing Songs'))
         progress.setLabelText(translate('OpenLP.Ui', 'Starting import...'))
         progress.setCancelButton(None)
-        progress.setRange(0, len(song_dbs))
+        progress.setRange(0, song_count)
         progress.setMinimumDuration(0)
         progress.forceShow()
-        for idx, db in enumerate(song_dbs):
-            progress.setValue(idx)
+        Receiver.send_message(u'openlp_process_events')
+        for db in song_dbs:
+            importer = OpenLPSongImport(self.manager, filename=db)
+            importer.doImport(progress)
             Receiver.send_message(u'openlp_process_events')
-            importer = OpenLPSongImport(self.manager, filename=db)
-            importer.doImport()
-        progress.setValue(len(song_dbs))
+        progress.setValue(song_count)
         self.mediaItem.onSearchTextButtonClicked()
 
     def finalise(self):
@@ -287,3 +294,15 @@
         songs = self.manager.get_all_objects(Song, Song.temporary == True)
         for song in songs:
             self.manager.delete_object(Song, song.id)
+
+    def _countSongs(self, db_file):
+        connection = sqlite3.connect(db_file)
+        cursor = connection.cursor()
+        cursor.execute(u'SELECT COUNT(id) AS song_count FROM songs')
+        song_count = cursor.fetchone()[0]
+        connection.close()
+        try:
+            song_count = int(song_count)
+        except (TypeError, ValueError):
+            song_count = 0
+        return song_count


Follow ups