From 27cd63ebcdc292b40b193ab1c57fbe55e719a6bf Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 3 Feb 2013 09:07:31 +0000 Subject: [PATCH] Remove events and move to Registry --- openlp/core/__init__.py | 18 +++-- openlp/core/lib/eventreceiver.py | 32 -------- openlp/core/lib/mediamanageritem.py | 14 +++- openlp/core/lib/plugin.py | 17 ++++ openlp/core/lib/pluginmanager.py | 10 +++ openlp/core/ui/firsttimeform.py | 51 ++++++------ openlp/core/ui/maindisplay.py | 18 ++++- openlp/core/ui/mainwindow.py | 42 ++++++---- openlp/core/ui/media/mediaplayer.py | 11 +++ openlp/core/ui/media/phononplayer.py | 4 +- openlp/core/ui/media/vlcplayer.py | 4 +- openlp/core/ui/pluginform.py | 33 ++++++-- openlp/core/ui/servicemanager.py | 77 +++++++++++-------- openlp/core/ui/slidecontroller.py | 9 +-- openlp/core/ui/thememanager.py | 22 ++++-- openlp/core/ui/wizard.py | 16 +++- openlp/core/utils/__init__.py | 4 +- .../plugins/bibles/forms/bibleimportform.py | 4 +- .../plugins/bibles/forms/bibleupgradeform.py | 6 +- openlp/plugins/bibles/forms/editbibleform.py | 17 +++- openlp/plugins/bibles/lib/csvbible.py | 4 +- openlp/plugins/bibles/lib/db.py | 12 ++- openlp/plugins/bibles/lib/http.py | 53 +++++++------ openlp/plugins/bibles/lib/mediaitem.py | 14 ++-- openlp/plugins/bibles/lib/openlp1.py | 2 +- openlp/plugins/bibles/lib/opensong.py | 4 +- openlp/plugins/bibles/lib/osis.py | 4 +- openlp/plugins/custom/lib/mediaitem.py | 2 +- openlp/plugins/images/lib/mediaitem.py | 8 +- openlp/plugins/presentations/lib/mediaitem.py | 10 +-- openlp/plugins/songs/forms/songexportform.py | 6 +- openlp/plugins/songs/forms/songimportform.py | 4 +- .../songs/forms/songmaintenanceform.py | 13 +++- openlp/plugins/songs/lib/mediaitem.py | 6 +- openlp/plugins/songs/lib/openlyricsexport.py | 14 +++- openlp/plugins/songs/songsplugin.py | 28 +++---- 36 files changed, 368 insertions(+), 225 deletions(-) diff --git a/openlp/core/__init__.py b/openlp/core/__init__.py index e31ff0c5d..211a02fef 100644 --- a/openlp/core/__init__.py +++ b/openlp/core/__init__.py @@ -109,10 +109,6 @@ class OpenLP(QtGui.QApplication): if 'OpenLP' in args: args.remove('OpenLP') self.args.extend(args) - # provide a listener for widgets to reqest a screen update. - QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'openlp_process_events'), self.processEvents) - QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'cursor_busy'), self.setBusyCursor) - QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'cursor_normal'), self.setNormalCursor) # Decide how many screens we have and their size screens = ScreenList.create(self.desktop()) # First time checks in settings @@ -182,21 +178,28 @@ class OpenLP(QtGui.QApplication): if not hasattr(self, u'exceptionForm'): self.exceptionForm = ExceptionForm(self.mainWindow) self.exceptionForm.exceptionTextEdit.setPlainText(''.join(format_exception(exctype, value, traceback))) - self.setNormalCursor() + self.set_normal_cursor() self.exceptionForm.exec_() - def setBusyCursor(self): + def process_events(self): + """ + Wrapper to make ProcessEvents visible and named correctly + """ + self.processEvents() + + def set_busy_cursor(self): """ Sets the Busy Cursor for the Application """ self.setOverrideCursor(QtCore.Qt.BusyCursor) self.processEvents() - def setNormalCursor(self): + def set_normal_cursor(self): """ Sets the Normal Cursor for the Application """ self.restoreOverrideCursor() + self.processEvents() def event(self, event): """ @@ -288,6 +291,7 @@ def main(args=None): app.setApplicationName(u'OpenLP') set_up_logging(AppLocation.get_directory(AppLocation.CacheDir)) registry = Registry.create() + Registry().register(u'openlp_core', app) app.setApplicationVersion(get_application_version()[u'version']) # Instance check if not options.testing: diff --git a/openlp/core/lib/eventreceiver.py b/openlp/core/lib/eventreceiver.py index d29652c35..29c8e75a3 100644 --- a/openlp/core/lib/eventreceiver.py +++ b/openlp/core/lib/eventreceiver.py @@ -55,15 +55,6 @@ class EventReceiver(QtCore.QObject): ``openlp_information_message`` Displays a standalone Information Message. - ``cursor_busy`` - Makes the cursor got to a busy form. - - ``cursor_normal`` - Resets the cursor to default. - - ``openlp_process_events`` - Requests the Application to flush the events queue. - ``openlp_version_check`` Version has changed so pop up window. @@ -120,29 +111,6 @@ class EventReceiver(QtCore.QObject): ``slidecontroller_live_stop_loop`` Stop the loop on the main display. - - **Servicemanager related signals** - - ``servicemanager_new_service`` - A new service is being loaded or created. - - ``servicemanager_previous_item`` - Display the previous item in the service. - - ``servicemanager_preview_live`` - Requests a Preview item from the Service Manager to update live and add - a new item to the preview panel. - - ``servicemanager_next_item`` - Display the next item in the service. - - ``servicemanager_set_item`` - Go live on a specific item, by index. - - ``service_item_update`` - Passes back to the service manager the service item after it has been - processed by the plugin. - **Display signals** ``update_display_css`` diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index 4f559837c..53a61c788 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -332,9 +332,9 @@ class MediaManagerItem(QtGui.QWidget): Settings().value(self.settingsSection + u'/last directory'), self.onNewFileMasks) log.info(u'New files(s) %s', files) if files: - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() self.validateAndLoad(files) - Receiver.send_message(u'cursor_normal') + self.openlp_core.set_normal_cursor() def loadFile(self, files): """ @@ -698,3 +698,13 @@ class MediaManagerItem(QtGui.QWidget): theme_manager = property(_get_theme_manager) + def _get_openlp_core(self): + """ + Adds the openlp to the class dynamically + """ + if not hasattr(self, u'_openlp_core'): + self._openlp_core = Registry().get(u'openlp_core') + return self._openlp_core + + openlp_core = property(_get_openlp_core) + diff --git a/openlp/core/lib/plugin.py b/openlp/core/lib/plugin.py index 49a08e32a..390614bad 100644 --- a/openlp/core/lib/plugin.py +++ b/openlp/core/lib/plugin.py @@ -409,6 +409,12 @@ class Plugin(QtCore.QObject): """ pass + def new_service_created(self): + """ + The plugin's needs to handle a new song creation + """ + pass + def _get_main_window(self): """ Adds the main window to the class dynamically @@ -419,3 +425,14 @@ class Plugin(QtCore.QObject): main_window = property(_get_main_window) + def _get_openlp_core(self): + """ + Adds the openlp to the class dynamically + """ + if not hasattr(self, u'_openlp_core'): + self._openlp_core = Registry().get(u'openlp_core') + return self._openlp_core + + openlp_core = property(_get_openlp_core) + + diff --git a/openlp/core/lib/pluginmanager.py b/openlp/core/lib/pluginmanager.py index ae1d9f984..6cba7104c 100644 --- a/openlp/core/lib/pluginmanager.py +++ b/openlp/core/lib/pluginmanager.py @@ -211,3 +211,13 @@ class PluginManager(object): if plugin.name == name: return plugin return None + + def new_service_created(self): + """ + Loop through all the plugins and give them an opportunity to handle a new service + """ + log.info(u'plugins - new service created') + for plugin in self.plugins: + if plugin.isActive(): + plugin.new_service_created() + diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index 6ba8a8df9..b15d3a94f 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -146,13 +146,13 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): # Download the theme screenshots. self.themeScreenshotThread = ThemeScreenshotThread(self) self.themeScreenshotThread.start() - Receiver.send_message(u'cursor_normal') + self.openlp_core.set_normal_cursor() def nextId(self): """ Determine the next page in the Wizard to go to. """ - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() if self.currentId() == FirstTimePage.Plugins: if not self.webAccess: return FirstTimePage.NoInternet @@ -163,14 +163,13 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): elif self.currentId() == FirstTimePage.NoInternet: return FirstTimePage.Progress elif self.currentId() == FirstTimePage.Themes: - Receiver.send_message(u'cursor_busy') - Receiver.send_message(u'openlp_process_events') + self.openlp_core.set_busy_cursor() while not self.themeScreenshotThread.isFinished(): time.sleep(0.1) - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() # Build the screenshot icons, as this can not be done in the thread. self._buildThemeScreenshots() - Receiver.send_message(u'cursor_normal') + self.openlp_core.set_normal_cursor() return FirstTimePage.Defaults else: return self.currentId() + 1 @@ -181,7 +180,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): """ # Keep track of the page we are at. Triggering "Cancel" causes pageId # to be a -1. - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() if pageId != -1: self.lastId = pageId if pageId == FirstTimePage.Plugins: @@ -213,16 +212,15 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): if self.hasRunWizard: self.cancelButton.setVisible(False) elif pageId == FirstTimePage.Progress: - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() self.repaint() - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() # Try to give the wizard a chance to redraw itself time.sleep(0.2) self._preWizard() self._performWizard() self._postWizard() - Receiver.send_message(u'cursor_normal') - Receiver.send_message(u'openlp_process_events') + self.openlp_core.set_normal_cursor() def updateScreenListCombo(self): """ @@ -244,16 +242,15 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.downloadCancelled = True while self.themeScreenshotThread.isRunning(): time.sleep(0.1) - Receiver.send_message(u'cursor_normal') + self.openlp_core.set_normal_cursor() def onNoInternetFinishButtonClicked(self): """ Process the triggering of the "Finish" button on the No Internet page. """ - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() self._performWizard() - Receiver.send_message(u'cursor_normal') - Receiver.send_message(u'openlp_process_events') + self.openlp_core.set_normal_cursor() Settings().setValue(u'general/has run wizard', True) self.close() @@ -320,7 +317,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.progressLabel.setText(status_text) if increment > 0: self.progressBar.setValue(self.progressBar.value() + increment) - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() def _preWizard(self): """ @@ -328,10 +325,10 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): """ self.max_progress = 0 self.finishButton.setVisible(False) - Receiver.send_message(u'openlp_process_events') + self.openlp_core.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') + self.openlp_core.process_events() item = self.songsListWidget.item(i) if item.checkState() == QtCore.Qt.Checked: filename = item.data(QtCore.Qt.UserRole) @@ -340,7 +337,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): # 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') + self.openlp_core.process_events() item = iterator.value() if item.parent() and item.checkState(0) == QtCore.Qt.Checked: filename = item.data(0, QtCore.Qt.UserRole) @@ -349,7 +346,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): 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') + self.openlp_core.process_events() item = self.themesListWidget.item(i) if item.checkState() == QtCore.Qt.Checked: filename = item.data(QtCore.Qt.UserRole) @@ -369,7 +366,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.progressPage.setTitle(translate('OpenLP.FirstTimeWizard', 'Setting Up')) self.progressPage.setSubTitle(u'Setup complete.') self.repaint() - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() # Try to give the wizard a chance to repaint itself time.sleep(0.1) @@ -396,7 +393,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.finishButton.setEnabled(True) self.cancelButton.setVisible(False) self.nextButton.setVisible(False) - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() def _performWizard(self): """ @@ -471,3 +468,13 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): return self._theme_manager theme_manager = property(_get_theme_manager) + + def _get_openlp_core(self): + """ + Adds the openlp to the class dynamically + """ + if not hasattr(self, u'_openlp_core'): + self._openlp_core = Registry().get(u'openlp_core') + return self._openlp_core + + openlp_core = property(_get_openlp_core) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 3fed96ec4..a8e22db22 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -229,7 +229,7 @@ class MainDisplay(Display): log.debug(u'text to display') # Wait for the webview to update before displaying text. while not self.webLoaded: - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() self.setGeometry(self.screen[u'size']) if animate: self.frame.evaluateJavaScript(u'show_text("%s")' % slide.replace(u'\\', u'\\\\').replace(u'\"', u'\\\"')) @@ -333,18 +333,18 @@ class MainDisplay(Display): Generates a preview of the image displayed. """ log.debug(u'preview for %s', self.isLive) - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() # We must have a service item to preview. if self.isLive and hasattr(self, u'serviceItem'): # Wait for the fade to finish before geting the preview. # Important otherwise preview will have incorrect text if at all! if self.serviceItem.themedata and self.serviceItem.themedata.display_slide_transition: while self.frame.evaluateJavaScript(u'show_text_complete()') == u'false': - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() # Wait for the webview to update before getting the preview. # Important otherwise first preview will miss the background ! while not self.webLoaded: - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() # if was hidden keep it hidden if self.isLive: if self.hideMode: @@ -486,6 +486,16 @@ class MainDisplay(Display): return self._image_manager image_manager = property(_get_image_manager) + + def _get_openlp_core(self): + """ + Adds the openlp to the class dynamically + """ + if not hasattr(self, u'_openlp_core'): + self._openlp_core = Registry().get(u'openlp_core') + return self._openlp_core + + openlp_core = property(_get_openlp_core) class AudioPlayer(QtCore.QObject): diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 1af37bac1..564542db7 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -531,7 +531,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'cleanup'), self.clean_up) # Media Manager QtCore.QObject.connect(self.mediaToolBox, QtCore.SIGNAL(u'currentChanged(int)'), self.onMediaToolBoxChanged) - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() # Simple message boxes QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'openlp_error_message'), self.onErrorMessage) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'openlp_warning_message'), self.onWarningMessage) @@ -580,7 +580,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): # Hide/show the theme combobox on the service manager self.serviceManagerContents.theme_change() # Reset the cursor - Receiver.send_message(u'cursor_normal') + self.openlp_core.set_busy_cursor() def setAutoLanguage(self, value): self.languageGroup.setDisabled(value) @@ -635,20 +635,20 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): """ Give all the plugins a chance to perform some tasks at startup """ - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() for plugin in self.pluginManager.plugins: if plugin.isActive(): plugin.appStartup() - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() def firstTime(self): # Import themes if first time - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() for plugin in self.pluginManager.plugins: if hasattr(plugin, u'firstTime'): - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() plugin.firstTime() - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() temp_dir = os.path.join(unicode(gettempdir()), u'openlp') shutil.rmtree(temp_dir, True) @@ -669,7 +669,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): QtGui.QMessageBox.No) if answer == QtGui.QMessageBox.No: return - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() screens = ScreenList() firstTime = FirstTimeForm(screens, self) firstTime.exec_() @@ -979,14 +979,14 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): renderer. """ log.debug(u'screenChanged') - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() self.imageManager.updateDisplay() self.renderer.update_display() self.previewController.screenSizeChanged() self.liveController.screenSizeChanged() self.setFocus() self.activateWindow() - Receiver.send_message(u'cursor_normal') + self.openlp_core.set_busy_cursor() def closeEvent(self, event): """ @@ -1270,14 +1270,14 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.loadProgressBar.show() self.loadProgressBar.setMaximum(size) self.loadProgressBar.setValue(0) - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() def incrementProgressBar(self): """ Increase the Progress Bar value by 1 """ self.loadProgressBar.setValue(self.loadProgressBar.value() + 1) - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() def finishedProgressBar(self): """ @@ -1292,7 +1292,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): if event.timerId() == self.timer_id: self.timer_id = 0 self.loadProgressBar.hide() - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() def setNewDataPath(self, new_data_path): self.newDataPath = new_data_path @@ -1307,20 +1307,19 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): if self.copyData: log.info(u'Copying data to new path') try: - Receiver.send_message(u'openlp_process_events') - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() self.showStatusMessage( translate('OpenLP.MainWindow', 'Copying OpenLP data to new data directory location - %s ' '- Please wait for copy to finish').replace('%s', self.newDataPath)) dir_util.copy_tree(old_data_path, self.newDataPath) log.info(u'Copy sucessful') except (IOError, os.error, DistutilsFileError), why: - Receiver.send_message(u'cursor_normal') + self.openlp_core.set_normal_cursor() log.exception(u'Data copy failed %s' % unicode(why)) QtGui.QMessageBox.critical(self, translate('OpenLP.MainWindow', 'New Data Directory Error'), translate('OpenLP.MainWindow', 'OpenLP Data directory copy failed\n\n%s').replace('%s', unicode(why)), - QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok)) + QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok)) return False else: log.info(u'No data copy requested') @@ -1331,3 +1330,12 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): if self.newDataPath == AppLocation.get_directory(AppLocation.DataDir): settings.remove(u'advanced/data path') + def _get_openlp_core(self): + """ + Adds the openlp to the class dynamically + """ + if not hasattr(self, u'_openlp_core'): + self._openlp_core = Registry().get(u'openlp_core') + return self._openlp_core + + openlp_core = property(_get_openlp_core) \ No newline at end of file diff --git a/openlp/core/ui/media/mediaplayer.py b/openlp/core/ui/media/mediaplayer.py index 9d09cda6e..f907ef872 100644 --- a/openlp/core/ui/media/mediaplayer.py +++ b/openlp/core/ui/media/mediaplayer.py @@ -27,6 +27,7 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### +from openlp.core.lib import Registry from openlp.core.ui.media import MediaState class MediaPlayer(object): @@ -143,3 +144,13 @@ class MediaPlayer(object): Returns Information about the player """ return u'' + + def _get_openlp_core(self): + """ + Adds the openlp to the class dynamically + """ + if not hasattr(self, u'_openlp_core'): + self._openlp_core = Registry().get(u'openlp_core') + return self._openlp_core + + openlp_core = property(_get_openlp_core) \ No newline at end of file diff --git a/openlp/core/ui/media/phononplayer.py b/openlp/core/ui/media/phononplayer.py index da2d19857..6cb09bdf5 100644 --- a/openlp/core/ui/media/phononplayer.py +++ b/openlp/core/ui/media/phononplayer.py @@ -34,7 +34,7 @@ from datetime import datetime from PyQt4 import QtGui from PyQt4.phonon import Phonon -from openlp.core.lib import Receiver, translate, Settings +from openlp.core.lib import translate, Settings from openlp.core.ui.media import MediaState from openlp.core.ui.media.mediaplayer import MediaPlayer @@ -150,7 +150,7 @@ class PhononPlayer(MediaPlayer): current_state = display.mediaObject.state() if current_state == Phonon.ErrorState: return False - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() if (datetime.now() - start).seconds > 5: return False return True diff --git a/openlp/core/ui/media/vlcplayer.py b/openlp/core/ui/media/vlcplayer.py index 6f3e3d0e7..e09f043af 100644 --- a/openlp/core/ui/media/vlcplayer.py +++ b/openlp/core/ui/media/vlcplayer.py @@ -35,7 +35,7 @@ import sys from PyQt4 import QtGui -from openlp.core.lib import Receiver, translate, Settings +from openlp.core.lib import translate, Settings from openlp.core.ui.media import MediaState from openlp.core.ui.media.mediaplayer import MediaPlayer @@ -173,7 +173,7 @@ class VlcPlayer(MediaPlayer): while not mediaState == display.vlcMedia.get_state(): if display.vlcMedia.get_state() == vlc.State.Error: return False - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() if (datetime.now() - start).seconds > 60: return False return True diff --git a/openlp/core/ui/pluginform.py b/openlp/core/ui/pluginform.py index 37cae9a0a..d11606366 100644 --- a/openlp/core/ui/pluginform.py +++ b/openlp/core/ui/pluginform.py @@ -31,7 +31,7 @@ import logging from PyQt4 import QtCore, QtGui -from openlp.core.lib import PluginStatus, Receiver, translate +from openlp.core.lib import PluginStatus, Registry, translate from plugindialog import Ui_PluginViewDialog log = logging.getLogger(__name__) @@ -62,7 +62,7 @@ class PluginForm(QtGui.QDialog, Ui_PluginViewDialog): self._clearDetails() self.programaticChange = True pluginListWidth = 0 - for plugin in self.parent().pluginManager.plugins: + for plugin in self.plugin_manager.plugins: item = QtGui.QListWidgetItem(self.pluginListWidget) # We do this just to make 100% sure the status is an integer as # sometimes when it's loaded from the config, it isn't cast to int. @@ -106,10 +106,9 @@ class PluginForm(QtGui.QDialog, Ui_PluginViewDialog): if self.pluginListWidget.currentItem() is None: self._clearDetails() return - plugin_name_singular = \ - self.pluginListWidget.currentItem().text().split(u'(')[0][:-1] + plugin_name_singular = self.pluginListWidget.currentItem().text().split(u'(')[0][:-1] self.activePlugin = None - for plugin in self.parent().pluginManager.plugins: + for plugin in self.plugin_manager.plugins: if plugin.status != PluginStatus.Disabled: if plugin.nameStrings[u'singular'] == plugin_name_singular: self.activePlugin = plugin @@ -123,9 +122,9 @@ class PluginForm(QtGui.QDialog, Ui_PluginViewDialog): if self.programaticChange or status == PluginStatus.Disabled: return if status == PluginStatus.Inactive: - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() self.activePlugin.toggleStatus(PluginStatus.Active) - Receiver.send_message(u'cursor_normal') + self.openlp_core.set_normal_cursor() self.activePlugin.appStartup() else: self.activePlugin.toggleStatus(PluginStatus.Inactive) @@ -138,3 +137,23 @@ class PluginForm(QtGui.QDialog, Ui_PluginViewDialog): status_text = translate('OpenLP.PluginForm', '%s (Disabled)') self.pluginListWidget.currentItem().setText( status_text % self.activePlugin.nameStrings[u'singular']) + + def _get_plugin_manager(self): + """ + Adds the plugin manager to the class dynamically + """ + if not hasattr(self, u'_plugin_manager'): + self._plugin_manager = Registry().get(u'plugin_manager') + return self._plugin_manager + + plugin_manager = property(_get_plugin_manager) + + def _get_openlp_core(self): + """ + Adds the openlp to the class dynamically + """ + if not hasattr(self, u'_openlp_core'): + self._openlp_core = Registry().get(u'openlp_core') + return self._openlp_core + + openlp_core = property(_get_openlp_core) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index ff3d0721e..eb354a9c5 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -203,18 +203,10 @@ class ServiceManagerDialog(object): QtCore.QObject.connect(self.service_manager_list, QtCore.SIGNAL(u'itemExpanded(QTreeWidgetItem*)'), self.expanded) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'theme_update_list'), self.update_theme_list) - QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'servicemanager_preview_live'), - self.preview_live) - QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'servicemanager_next_item'), self.next_item) - QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'servicemanager_previous_item'), - self.previous_item) - QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'servicemanager_set_item'), self.on_set_item) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'config_updated'), self.config_updated) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'config_screen_changed'), self.regenerate_service_Items) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'theme_update_global'), self.theme_change) - QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'service_item_update'), - self.service_item_update) # Last little bits of setting up self.service_theme = Settings().value(self.main_window.serviceManagerSettingsSection + u'/service theme') self.servicePath = AppLocation.get_section_data_path(u'servicemanager') @@ -448,7 +440,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog): self.service_id += 1 self.set_modified(False) Settings().setValue(u'servicemanager/last file', u'') - Receiver.send_message(u'servicemanager_new_service') + self.plugin_manager.new_service_created() def save_file(self): """ @@ -476,7 +468,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog): missing_list = [] audio_files = [] total_size = 0 - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() # Number of items + 1 to zip it self.main_window.displayProgressBar(len(self.service_items) + 1) # Get list of missing files, and list of files to write @@ -492,7 +484,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog): else: write_list.append(path_from) if missing_list: - Receiver.send_message(u'cursor_normal') + self.openlp_core.set_normal_cursor() title = translate('OpenLP.ServiceManager', 'Service File(s) Missing') message = translate('OpenLP.ServiceManager', 'The following file(s) in the service are missing:\n\t%s\n\n' @@ -502,7 +494,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog): if answer == QtGui.QMessageBox.Cancel: self.main_window.finishedProgressBar() return False - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() # Check if item contains a missing file. for item in list(self.service_items): self.main_window.incrementProgressBar() @@ -563,7 +555,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog): if zip_file: zip_file.close() self.main_window.finishedProgressBar() - Receiver.send_message(u'cursor_normal') + self.openlp_core.set_normal_cursor() if success: try: shutil.copy(temp_file_name, path_file_name) @@ -592,7 +584,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog): log.debug(u'ServiceManager.save_file - %s', path_file_name) Settings().setValue(self.main_window.serviceManagerSettingsSection + u'/last directory', path) service = [] - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() # Number of items + 1 to zip it self.main_window.displayProgressBar(len(self.service_items) + 1) for item in self.service_items: @@ -621,7 +613,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog): if zip_file: zip_file.close() self.main_window.finishedProgressBar() - Receiver.send_message(u'cursor_normal') + self.openlp_core.set_normal_cursor() if success: try: shutil.copy(temp_file_name, path_file_name) @@ -718,7 +710,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog): if osfile.endswith(u'osd'): p_file = os.path.join(self.servicePath, osfile) if 'p_file' in locals(): - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() file_to = open(p_file, u'r') items = cPickle.load(file_to) file_to.close() @@ -763,6 +755,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog): QtGui.QMessageBox.information(self, translate('OpenLP.ServiceManager', 'Corrupt File'), translate('OpenLP.ServiceManager', 'This file is either corrupt or it is not an OpenLP 2 service file.')) + self.openlp_core.set_normal_cursor() return finally: if file_to: @@ -770,7 +763,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog): if zip_file: zip_file.close() self.main_window.finishedProgressBar() - Receiver.send_message(u'cursor_normal') + self.openlp_core.set_normal_cursor() self.repaint_service_list(-1, -1) def load_Last_file(self): @@ -944,12 +937,20 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog): self.add_service_item(self.serviceItemEditForm.get_service_item(), replace=True, expand=self.service_items[item][u'expanded']) - def preview_live(self, message): + def preview_live(self, unique_identifier, row): """ Called by the SlideController to request a preview item be made live - and allows the next preview to be updated if relevant. + and allows the next preview to be updated if relevant + + + ``unique_identifier`` + Reference to the service_item + + + ``row`` + individual row number + """ - unique_identifier, row = message.split(u':') for sitem in self.service_items: if sitem[u'service_item'].unique_identifier == unique_identifier: item = self.service_manager_list.topLevelItem(sitem[u'order'] - 1) @@ -975,9 +976,13 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog): lookFor = 1 serviceIterator += 1 - def previous_item(self, message): + def previous_item(self, last_slide=False): """ Called by the SlideController to select the previous service item. + + ``last_slide`` + Is this the last slide in the service_item + """ if not self.service_manager_list.selectedItems(): return @@ -987,7 +992,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog): serviceIterator = QtGui.QTreeWidgetItemIterator(self.service_manager_list) while serviceIterator.value(): if serviceIterator.value() == selected: - if message == u'last slide' and prevItemLastSlide: + if last_slide and prevItemLastSlide: pos = prevItem.data(0, QtCore.Qt.UserRole) check_expanded = self.service_items[pos - 1][u'expanded'] self.service_manager_list.setCurrentItem(prevItemLastSlide) @@ -1246,7 +1251,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog): Rebuild the service list as things have changed and a repaint is the easiest way to do this. """ - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() log.debug(u'regenerate_service_Items') # force reset of renderer as theme data has changed self.service_has_all_original_files = True @@ -1278,14 +1283,14 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog): self.set_modified() # Repaint it once only at the end self.repaint_service_list(-1, -1) - Receiver.send_message(u'cursor_normal') + self.openlp_core.set_normal_cursor() - def service_item_update(self, message): + def service_item_update(self, edit_id, unique_identifier, temporary=False): """ Triggered from plugins to update service items. Save the values as they will be used as part of the service load """ - edit_id, self.load_item_unique_identifier, temporary = message.split(u':') + self.load_item_unique_identifier = unique_identifier self.load_item_edit_id = int(edit_id) self.load_item_temporary = str_to_bool(temporary) @@ -1353,7 +1358,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog): """ Send the current item to the Preview slide controller """ - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() item, child = self.find_service_item() if self.service_items[item][u'service_item'].is_valid: self.preview_controller.addServiceManagerItem(self.service_items[item][u'service_item'], child) @@ -1361,7 +1366,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog): critical_error_message_box(translate('OpenLP.ServiceManager', 'Missing Display Handler'), translate('OpenLP.ServiceManager', 'Your item cannot be displayed as there is no handler to display it')) - Receiver.send_message(u'cursor_normal') + self.openlp_core.set_normal_cursor() def get_service_item(self): """ @@ -1394,7 +1399,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog): return if row != -1: child = row - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() if self.service_items[item][u'service_item'].is_valid: self.live_controller.addServiceManagerItem(self.service_items[item][u'service_item'], child) if Settings().value(self.main_window.generalSettingsSection + u'/auto preview'): @@ -1409,7 +1414,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog): critical_error_message_box(translate('OpenLP.ServiceManager', 'Missing Display Handler'), translate('OpenLP.ServiceManager', 'Your item cannot be displayed as the plugin required to display it is missing or inactive')) - Receiver.send_message(u'cursor_normal') + self.openlp_core.set_normal_cursor() def remote_edit(self): """ @@ -1621,4 +1626,14 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog): self._main_window = Registry().get(u'main_window') return self._main_window - main_window = property(_get_main_window) \ No newline at end of file + main_window = property(_get_main_window) + + def _get_openlp_core(self): + """ + Adds the openlp to the class dynamically + """ + if not hasattr(self, u'_openlp_core'): + self._openlp_core = Registry().get(u'openlp_core') + return self._openlp_core + + openlp_core = property(_get_openlp_core) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index c2216da58..002c1e49d 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -510,12 +510,12 @@ class SlideController(DisplayController): self.keypress_loop = True keypressCommand = self.keypress_queue.popleft() if keypressCommand == ServiceItemAction.Previous: - Receiver.send_message('servicemanager_previous_item') + self.service_manager.previous_item() elif keypressCommand == ServiceItemAction.PreviousLastSlide: # Go to the last slide of the previous item - Receiver.send_message('servicemanager_previous_item', u'last slide') + self.service_manager.previous_item(last_slide=True) else: - Receiver.send_message('servicemanager_next_item') + self.service_manager.next_item() self.keypress_loop = False def screenSizeChanged(self): @@ -1248,8 +1248,7 @@ class SlideController(DisplayController): row = self.previewListWidget.currentRow() if -1 < row < self.previewListWidget.rowCount(): if self.serviceItem.from_service: - Receiver.send_message('servicemanager_preview_live', u'%s:%s' % - (self.serviceItem.unique_identifier, row)) + self.service_manager.preview_live(self.serviceItem.unique_identifier, row) else: self.live_controller.addServiceManagerItem(self.serviceItem, row) diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index ac1d8b02c..ba2602277 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -147,13 +147,13 @@ class ThemeManager(QtGui.QWidget): """ Import new themes downloaded by the first time wizard """ - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() files = SettingsManager.get_files(self.settingsSection, u'.otz') for file_name in files: file_name = os.path.join(self.path, file_name) self.unzip_theme(file_name, self.path) delete_file(file) - Receiver.send_message(u'cursor_normal') + self.openlp_core.set_normal_cursor() def config_updated(self): """ @@ -361,7 +361,7 @@ class ThemeManager(QtGui.QWidget): path = QtGui.QFileDialog.getExistingDirectory(self, translate('OpenLP.ThemeManager', 'Save Theme - (%s)') % theme, Settings().value(self.settingsSection + u'/last directory export')) - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() if path: Settings().setValue(self.settingsSection + u'/last directory export', path) theme_path = os.path.join(path, theme + u'.otz') @@ -383,7 +383,7 @@ class ThemeManager(QtGui.QWidget): finally: if zip_file: zip_file.close() - Receiver.send_message(u'cursor_normal') + self.openlp_core.set_normal_cursor() def on_import_theme(self): """ @@ -398,12 +398,12 @@ class ThemeManager(QtGui.QWidget): log.info(u'New Themes %s', unicode(files)) if not files: return - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() for file_name in files: Settings().setValue(self.settingsSection + u'/last directory import', unicode(file_name)) self.unzip_theme(file_name, self.path) self.load_themes() - Receiver.send_message(u'cursor_normal') + self.openlp_core.set_normal_cursor() def load_themes(self, first_time=False): """ @@ -841,3 +841,13 @@ class ThemeManager(QtGui.QWidget): return self._main_window main_window = property(_get_main_window) + + def _get_openlp_core(self): + """ + Adds the openlp to the class dynamically + """ + if not hasattr(self, u'_openlp_core'): + self._openlp_core = Registry().get(u'openlp_core') + return self._openlp_core + + openlp_core = property(_get_openlp_core) \ No newline at end of file diff --git a/openlp/core/ui/wizard.py b/openlp/core/ui/wizard.py index bf7dff269..f5dc26101 100644 --- a/openlp/core/ui/wizard.py +++ b/openlp/core/ui/wizard.py @@ -34,7 +34,7 @@ import os from PyQt4 import QtCore, QtGui -from openlp.core.lib import build_icon, Receiver, Settings, translate, UiStrings +from openlp.core.lib import build_icon, Receiver, Registry, Settings, translate, UiStrings from openlp.core.lib.ui import add_welcome_page log = logging.getLogger(__name__) @@ -215,7 +215,7 @@ class OpenLPWizard(QtGui.QWizard): self.progressLabel.setText(status_text) if increment > 0: self.progressBar.setValue(self.progressBar.value() + increment) - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() def preWizard(self): """ @@ -233,7 +233,7 @@ class OpenLPWizard(QtGui.QWizard): self.progressBar.setValue(self.progressBar.maximum()) self.finishButton.setVisible(True) self.cancelButton.setVisible(False) - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() def getFileName(self, title, editbox, setting_name, filters=u''): """ @@ -282,3 +282,13 @@ class OpenLPWizard(QtGui.QWizard): if folder: editbox.setText(folder) Settings().setValue(self.plugin.settingsSection + u'/' + setting_name, folder) + + def _get_openlp_core(self): + """ + Adds the openlp to the class dynamically + """ + if not hasattr(self, u'_openlp_core'): + self._openlp_core = Registry().get(u'openlp_core') + return self._openlp_core + + openlp_core = property(_get_openlp_core) \ No newline at end of file diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index ba5e08c7f..d8bf1e7e8 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -39,7 +39,7 @@ from subprocess import Popen, PIPE import sys import urllib2 -from openlp.core.lib import Settings +from openlp.core.lib import Registry, Settings from PyQt4 import QtGui, QtCore @@ -425,7 +425,7 @@ def get_web_page(url, header=None, update_openlp=False): if not page: return None if update_openlp: - Receiver.send_message(u'openlp_process_events') + Registry().get(u'openlp_core').process_events() log.debug(page) return page diff --git a/openlp/plugins/bibles/forms/bibleimportform.py b/openlp/plugins/bibles/forms/bibleimportform.py index 05469eae9..93ee35154 100644 --- a/openlp/plugins/bibles/forms/bibleimportform.py +++ b/openlp/plugins/bibles/forms/bibleimportform.py @@ -34,7 +34,7 @@ import os from PyQt4 import QtCore, QtGui -from openlp.core.lib import Receiver, translate, Settings, UiStrings +from openlp.core.lib import translate, Settings, UiStrings from openlp.core.lib.db import delete_database from openlp.core.lib.ui import critical_error_message_box from openlp.core.ui.wizard import OpenLPWizard, WizardStrings @@ -578,7 +578,7 @@ class BibleImportForm(OpenLPWizard): self.progressLabel.setText(translate('BiblesPlugin.ImportWizardForm', 'Registering Bible...')) else: self.progressLabel.setText(WizardStrings.StartingImport) - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() def performWizard(self): """ diff --git a/openlp/plugins/bibles/forms/bibleupgradeform.py b/openlp/plugins/bibles/forms/bibleupgradeform.py index 0b2f214f7..d46af6e36 100644 --- a/openlp/plugins/bibles/forms/bibleupgradeform.py +++ b/openlp/plugins/bibles/forms/bibleupgradeform.py @@ -335,7 +335,7 @@ class BibleUpgradeForm(OpenLPWizard): """ OpenLPWizard.preWizard(self) self.progressLabel.setText(translate('BiblesPlugin.UpgradeWizardForm', 'Starting upgrade...')) - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() def performWizard(self): """ @@ -465,7 +465,7 @@ class BibleUpgradeForm(OpenLPWizard): self.newbibles[number].create_verse(db_book.id, int(verse[u'chapter']), int(verse[u'verse']), unicode(verse[u'text'])) - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() self.newbibles[number].session.commit() else: language_id = self.newbibles[number].get_object(BibleMeta, u'language_id') @@ -511,7 +511,7 @@ class BibleUpgradeForm(OpenLPWizard): self.newbibles[number].create_verse(db_book.id, int(verse[u'chapter']), int(verse[u'verse']), unicode(verse[u'text'])) - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() self.newbibles[number].session.commit() if not self.success.get(number, True): self.incrementProgressBar(translate('BiblesPlugin.UpgradeWizardForm', diff --git a/openlp/plugins/bibles/forms/editbibleform.py b/openlp/plugins/bibles/forms/editbibleform.py index 26a58d14b..52093dffc 100644 --- a/openlp/plugins/bibles/forms/editbibleform.py +++ b/openlp/plugins/bibles/forms/editbibleform.py @@ -32,7 +32,7 @@ import re from PyQt4 import QtGui -from openlp.core.lib import Receiver, translate, UiStrings +from openlp.core.lib import Registry, translate, UiStrings from openlp.core.lib.ui import critical_error_message_box from editbibledialog import Ui_EditBibleDialog from openlp.plugins.bibles.lib import BibleStrings @@ -122,8 +122,7 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): if book.name != custom_names[abbr]: if not self.validateBook(custom_names[abbr], abbr): return - Receiver.send_message(u'openlp_process_events') - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() self.manager.save_meta_data(self.bible, version, copyright, permissions, book_name_language) if not self.webbible: for abbr, book in self.books.iteritems(): @@ -132,7 +131,7 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): book.name = custom_names[abbr] self.manager.update_book(self.bible, book) self.bible = None - Receiver.send_message(u'cursor_normal') + self.openlp_core.set_normal_cursor() QtGui.QDialog.accept(self) def validateMeta(self, name, copyright): @@ -189,3 +188,13 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): % new_book_name) return False return True + + def _get_openlp_core(self): + """ + Adds the openlp to the class dynamically + """ + if not hasattr(self, u'_openlp_core'): + self._openlp_core = Registry().get(u'openlp_core') + return self._openlp_core + + openlp_core = property(_get_openlp_core) diff --git a/openlp/plugins/bibles/lib/csvbible.py b/openlp/plugins/bibles/lib/csvbible.py index c09461721..20c92ffd6 100644 --- a/openlp/plugins/bibles/lib/csvbible.py +++ b/openlp/plugins/bibles/lib/csvbible.py @@ -118,7 +118,7 @@ class CSVBible(BibleDB): book_details = BiblesResourcesDB.get_book_by_id(book_ref_id) self.create_book(unicode(line[2], details['encoding']), book_ref_id, book_details[u'testament_id']) book_list[int(line[0])] = unicode(line[2], details['encoding']) - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() except (IOError, IndexError): log.exception(u'Loading books from file failed') success = False @@ -157,7 +157,7 @@ class CSVBible(BibleDB): verse_text = unicode(line[3], u'cp1252') self.create_verse(book.id, line[1], line[2], verse_text) self.wizard.incrementProgressBar(translate('BiblesPlugin.CSVBible', 'Importing verses... done.')) - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() self.session.commit() except IOError: log.exception(u'Loading verses from file failed') diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py index 11bdd09e7..5b492d10e 100644 --- a/openlp/plugins/bibles/lib/db.py +++ b/openlp/plugins/bibles/lib/db.py @@ -38,7 +38,7 @@ from sqlalchemy import Column, ForeignKey, or_, Table, types, func from sqlalchemy.orm import class_mapper, mapper, relation from sqlalchemy.orm.exc import UnmappedClassError -from openlp.core.lib import Receiver, translate +from openlp.core.lib import Receiver, Registry, translate from openlp.core.lib.db import BaseModel, init_db, Manager from openlp.core.lib.ui import critical_error_message_box from openlp.core.utils import AppLocation, clean_filename @@ -549,6 +549,16 @@ class BibleDB(QtCore.QObject, Manager): verses = self.session.query(Verse).all() log.debug(verses) + def _get_openlp_core(self): + """ + Adds the openlp to the class dynamically + """ + if not hasattr(self, u'_openlp_core'): + self._openlp_core = Registry().get(u'openlp_core') + return self._openlp_core + + openlp_core = property(_get_openlp_core) + class BiblesResourcesDB(QtCore.QObject, Manager): """ diff --git a/openlp/plugins/bibles/lib/http.py b/openlp/plugins/bibles/lib/http.py index 327f03565..522dd08c3 100644 --- a/openlp/plugins/bibles/lib/http.py +++ b/openlp/plugins/bibles/lib/http.py @@ -38,7 +38,7 @@ from HTMLParser import HTMLParseError from BeautifulSoup import BeautifulSoup, NavigableString, Tag -from openlp.core.lib import Receiver, translate +from openlp.core.lib import Receiver, Registry,translate from openlp.core.lib.ui import critical_error_message_box from openlp.core.utils import get_web_page from openlp.plugins.bibles.lib import SearchResults @@ -164,7 +164,7 @@ class BGExtract(object): if len(verse_parts) > 1: verse = int(verse_parts[0]) except TypeError: - log.warn(u'Illegal verse number: %s', unicode(raw_verse_num)) + log.warn(u'Illegal verse number: %s', unicode(verse)) verses.append((verse, text)) verse_list = {} for verse, text in verses[::-1]: @@ -235,9 +235,10 @@ class BGExtract(object): soup = get_soup_for_bible_ref( u'http://www.biblegateway.com/passage/?%s' % url_params, pre_parse_regex=r'', pre_parse_substitute='', cleaner=cleaner) + self.openlp_core.process_events() if not soup: return None - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() div = soup.find('div', 'result-text-style-normal') self._clean_soup(div) span_list = div.findAll('span', 'text') @@ -281,7 +282,7 @@ class BGExtract(object): if not soup: send_error_message(u'parse') return None - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() content = soup.find(u'table', u'infotable') if content: content = content.findAll(u'tr') @@ -329,7 +330,7 @@ class BSExtract(object): soup = get_soup_for_bible_ref(chapter_url, header) if not soup: return None - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() content = soup.find(u'div', u'content') if not content: log.error(u'No verses found in the Bibleserver response.') @@ -339,7 +340,7 @@ class BSExtract(object): verse_number = re.compile(r'v(\d{1,2})(\d{3})(\d{3}) verse.*') verses = {} for verse in content: - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() versenumber = int(verse_number.sub(r'\3', verse[u'class'])) verses[versenumber] = verse.contents[1].rstrip(u'\n') return SearchResults(book_name, chapter, verses) @@ -402,7 +403,7 @@ class CWExtract(object): soup = get_soup_for_bible_ref(chapter_url) if not soup: return None - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() html_verses = soup.findAll(u'span', u'versetext') if not html_verses: log.error(u'No verses found in the CrossWalk response.') @@ -412,27 +413,25 @@ class CWExtract(object): reduce_spaces = re.compile(r'[ ]{2,}') fix_punctuation = re.compile(r'[ ]+([.,;])') for verse in html_verses: - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() verse_number = int(verse.contents[0].contents[0]) verse_text = u'' for part in verse.contents: - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() if isinstance(part, NavigableString): verse_text = verse_text + part elif part and part.attrMap and \ - (part.attrMap[u'class'] == u'WordsOfChrist' or \ - part.attrMap[u'class'] == u'strongs'): + (part.attrMap[u'class'] == u'WordsOfChrist' or part.attrMap[u'class'] == u'strongs'): for subpart in part.contents: - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() if isinstance(subpart, NavigableString): verse_text = verse_text + subpart - elif subpart and subpart.attrMap and \ - subpart.attrMap[u'class'] == u'strongs': + elif subpart and subpart.attrMap and subpart.attrMap[u'class'] == u'strongs': for subsub in subpart.contents: - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() if isinstance(subsub, NavigableString): verse_text = verse_text + subsub - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() # Fix up leading and trailing spaces, multiple spaces, and spaces # between text and , and . verse_text = verse_text.strip(u'\n\r\t ') @@ -598,7 +597,7 @@ class HTTPBible(BibleDB): return [] book = db_book.name if BibleDB.get_verse_count(self, book_id, reference[1]) == 0: - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() search_results = self.get_chapter(book, reference[1]) if search_results and search_results.has_verselist(): ## We have found a book of the bible lets check to see @@ -606,14 +605,14 @@ class HTTPBible(BibleDB): ## we get a correct book. For example it is possible ## to request ac and get Acts back. book_name = search_results.book - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() # Check to see if book/chapter exists. db_book = self.get_book(book_name) self.create_chapter(db_book.id, search_results.chapter, search_results.verselist) - Receiver.send_message(u'openlp_process_events') - Receiver.send_message(u'cursor_normal') - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() + self.openlp_core.set_normal_cursor() + self.openlp_core.process_events() return BibleDB.get_verses(self, reference_list, show_error) def get_chapter(self, book, chapter): @@ -660,6 +659,16 @@ class HTTPBible(BibleDB): log.debug(u'HTTPBible.get_verse_count("%s", %s)', book_id, chapter) return BiblesResourcesDB.get_verse_count(book_id, chapter) + def _get_openlp_core(self): + """ + Adds the openlp to the class dynamically + """ + if not hasattr(self, u'_openlp_core'): + self._openlp_core = Registry().get(u'openlp_core') + return self._openlp_core + + openlp_core = property(_get_openlp_core) + def get_soup_for_bible_ref(reference_url, header=None, pre_parse_regex=None, pre_parse_substitute=None, cleaner=None): """ @@ -698,10 +707,10 @@ def get_soup_for_bible_ref(reference_url, header=None, pre_parse_regex=None, soup = BeautifulSoup(page_source) except HTMLParseError: log.exception(u'BeautifulSoup could not parse the bible page.') + Registry().get(u'openlp_core').process_events() if not soup: send_error_message(u'parse') return None - Receiver.send_message(u'openlp_process_events') return soup def send_error_message(error_type): diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index fd1109221..02fe135e3 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -614,7 +614,7 @@ class BibleMediaItem(MediaManagerItem): """ log.debug(u'Advanced Search Button clicked') self.advancedSearchButton.setEnabled(False) - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() bible = self.advancedVersionComboBox.currentText() second_bible = self.advancedSecondComboBox.currentText() book = self.advancedBookComboBox.currentText() @@ -628,7 +628,7 @@ class BibleMediaItem(MediaManagerItem): verse_range = chapter_from + verse_separator + verse_from + range_separator + chapter_to + \ verse_separator + verse_to versetext = u'%s %s' % (book, verse_range) - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() self.search_results = self.plugin.manager.get_verses(bible, versetext, book_ref_id) if second_bible: self.second_search_results = self.plugin.manager.get_verses(second_bible, versetext, book_ref_id) @@ -640,8 +640,7 @@ class BibleMediaItem(MediaManagerItem): self.displayResults(bible, second_bible) self.advancedSearchButton.setEnabled(True) self.checkSearchResult() - Receiver.send_message(u'cursor_normal') - Receiver.send_message(u'openlp_process_events') + self.openlp_core.set_normal_cursor() def onQuickSearchButton(self): """ @@ -650,7 +649,7 @@ class BibleMediaItem(MediaManagerItem): """ log.debug(u'Quick Search Button clicked') self.quickSearchButton.setEnabled(False) - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() bible = self.quickVersionComboBox.currentText() second_bible = self.quickSecondComboBox.currentText() text = self.quickSearchEdit.text() @@ -662,7 +661,7 @@ class BibleMediaItem(MediaManagerItem): self.search_results[0].book.book_reference_id) else: # We are doing a 'Text Search'. - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() bibles = self.plugin.manager.get_bibles() self.search_results = self.plugin.manager.verse_search(bible, second_bible, text) if second_bible and self.search_results: @@ -697,8 +696,7 @@ class BibleMediaItem(MediaManagerItem): self.displayResults(bible, second_bible) self.quickSearchButton.setEnabled(True) self.checkSearchResult() - Receiver.send_message(u'cursor_normal') - Receiver.send_message(u'openlp_process_events') + self.openlp_core.set_normal_cursor() def displayResults(self, bible, second_bible=u''): """ diff --git a/openlp/plugins/bibles/lib/openlp1.py b/openlp/plugins/bibles/lib/openlp1.py index 732fdc23b..ab049625d 100644 --- a/openlp/plugins/bibles/lib/openlp1.py +++ b/openlp/plugins/bibles/lib/openlp1.py @@ -108,7 +108,7 @@ class OpenLP1Bible(BibleDB): verse_number = int(verse[1]) text = unicode(verse[2], u'cp1252') self.create_verse(db_book.id, chapter, verse_number, text) - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() self.session.commit() connection.close() return True diff --git a/openlp/plugins/bibles/lib/opensong.py b/openlp/plugins/bibles/lib/opensong.py index 271af883a..00d7c1318 100644 --- a/openlp/plugins/bibles/lib/opensong.py +++ b/openlp/plugins/bibles/lib/opensong.py @@ -30,7 +30,7 @@ import logging from lxml import etree, objectify -from openlp.core.lib import Receiver, translate +from openlp.core.lib import translate from openlp.core.lib.ui import critical_error_message_box from openlp.plugins.bibles.lib.db import BibleDB, BiblesResourcesDB @@ -129,7 +129,7 @@ class OpenSongBible(BibleDB): self.wizard.incrementProgressBar(translate('BiblesPlugin.Opensong', 'Importing %s %s...', 'Importing ...')) % (db_book.name, chapter_number) self.session.commit() - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() except etree.XMLSyntaxError as inst: critical_error_message_box(message=translate('BiblesPlugin.OpenSongImport', 'Incorrect Bible file type supplied. OpenSong Bibles may be ' diff --git a/openlp/plugins/bibles/lib/osis.py b/openlp/plugins/bibles/lib/osis.py index 3fddd7a4b..5996448ad 100644 --- a/openlp/plugins/bibles/lib/osis.py +++ b/openlp/plugins/bibles/lib/osis.py @@ -33,7 +33,7 @@ import chardet import codecs import re -from openlp.core.lib import Receiver, translate +from openlp.core.lib import translate from openlp.core.utils import AppLocation from openlp.plugins.bibles.lib.db import BibleDB, BiblesResourcesDB @@ -182,7 +182,7 @@ class OSISBible(BibleDB): .replace(u'', u'').replace(u'', u'') verse_text = self.spaces_regex.sub(u' ', verse_text) self.create_verse(db_book.id, chapter, verse, verse_text) - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() self.session.commit() if match_count == 0: success = False diff --git a/openlp/plugins/custom/lib/mediaitem.py b/openlp/plugins/custom/lib/mediaitem.py index e434f516a..7b87dbef5 100644 --- a/openlp/plugins/custom/lib/mediaitem.py +++ b/openlp/plugins/custom/lib/mediaitem.py @@ -250,7 +250,7 @@ class CustomMediaItem(MediaManagerItem): and_(CustomSlide.title == item.title, CustomSlide.theme_name == item.theme, CustomSlide.credits == item.raw_footer[0][len(item.title) + 1:])) if custom: - Receiver.send_message(u'service_item_update', u'%s:%s:%s' % (custom.id, item.unique_identifier, False)) + self.service_manager.service_item_update(custom.id, item.unique_identifier) else: if self.add_custom_from_service: self.create_from_service_item(item) diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index 85024229a..7af23b0ec 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -99,7 +99,7 @@ class ImageMediaItem(MediaManagerItem): if check_item_selected(self.listView, translate('ImagePlugin.MediaItem','You must select an image to delete.')): row_list = [item.row() for item in self.listView.selectedIndexes()] row_list.sort(reverse=True) - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() self.main_window.displayProgressBar(len(row_list)) for row in row_list: text = self.listView.item(row) @@ -109,12 +109,12 @@ class ImageMediaItem(MediaManagerItem): self.main_window.incrementProgressBar() SettingsManager.setValue(self.settingsSection + u'/images files', self.getFileList()) self.main_window.finishedProgressBar() - Receiver.send_message(u'cursor_normal') + self.openlp_core.set_normal_cursor() self.listView.blockSignals(False) def loadList(self, images, initialLoad=False): + self.openlp_core.set_busy_cursor() if not initialLoad: - Receiver.send_message(u'cursor_busy') self.main_window.displayProgressBar(len(images)) # Sort the images by its filename considering language specific # characters. @@ -138,7 +138,7 @@ class ImageMediaItem(MediaManagerItem): self.main_window.incrementProgressBar() if not initialLoad: self.main_window.finishedProgressBar() - Receiver.send_message(u'cursor_normal') + self.openlp_core.set_busy_cursor() def generateSlideData(self, service_item, item=None, xmlVersion=False, remote=False, context=ServiceItemContext.Service): diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index eee1c5801..ab7659a2b 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -150,9 +150,8 @@ class PresentationMediaItem(MediaManagerItem): """ currlist = self.getFileList() titles = [os.path.split(file)[1] for file in currlist] - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() if not initialLoad: - Receiver.send_message(u'cursor_busy') self.main_window.displayProgressBar(len(files)) # Sort the presentations by its filename considering language specific characters. files.sort(cmp=locale_compare, @@ -206,10 +205,9 @@ class PresentationMediaItem(MediaManagerItem): item_name.setIcon(icon) item_name.setToolTip(file) self.listView.addItem(item_name) - Receiver.send_message(u'cursor_normal') if not initialLoad: self.main_window.finishedProgressBar() - Receiver.send_message(u'cursor_normal') + self.openlp_core.set_busy_cursor() def onDeleteClick(self): """ @@ -219,7 +217,7 @@ class PresentationMediaItem(MediaManagerItem): items = self.listView.selectedIndexes() row_list = [item.row() for item in items] row_list.sort(reverse=True) - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() self.main_window.displayProgressBar(len(row_list)) for item in items: filepath = unicode(item.data(QtCore.Qt.UserRole)) @@ -229,7 +227,7 @@ class PresentationMediaItem(MediaManagerItem): doc.close_presentation() self.main_window.incrementProgressBar() self.main_window.finishedProgressBar() - Receiver.send_message(u'cursor_normal') + self.openlp_core.set_busy_cursor() for row in row_list: self.listView.takeItem(row) Settings().setValue(self.settingsSection + u'/presentations files', self.getFileList()) diff --git a/openlp/plugins/songs/forms/songexportform.py b/openlp/plugins/songs/forms/songexportform.py index 29d4b8609..d0444913e 100644 --- a/openlp/plugins/songs/forms/songexportform.py +++ b/openlp/plugins/songs/forms/songexportform.py @@ -226,7 +226,7 @@ class SongExportForm(OpenLPWizard): self.directoryLineEdit.clear() self.searchLineEdit.clear() # Load the list of songs. - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() songs = self.plugin.manager.get_all_objects(Song) songs.sort(cmp=natcmp, key=lambda song: song.sort_key) for song in songs: @@ -240,7 +240,7 @@ class SongExportForm(OpenLPWizard): item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled) item.setCheckState(QtCore.Qt.Unchecked) self.availableListWidget.addItem(item) - Receiver.send_message(u'cursor_normal') + self.openlp_core.set_normal_cursor() def preWizard(self): """ @@ -248,7 +248,7 @@ class SongExportForm(OpenLPWizard): """ OpenLPWizard.preWizard(self) self.progressLabel.setText(translate('SongsPlugin.ExportWizardForm', 'Starting export...')) - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() def performWizard(self): """ diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index efadd6b61..68b23a2a6 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -35,7 +35,7 @@ import os from PyQt4 import QtCore, QtGui -from openlp.core.lib import Receiver, Settings, SettingsManager, translate, UiStrings +from openlp.core.lib import Settings, SettingsManager, translate, UiStrings from openlp.core.lib.ui import critical_error_message_box from openlp.core.ui.wizard import OpenLPWizard, WizardStrings from openlp.plugins.songs.lib.importer import SongFormat, SongFormatSelect @@ -328,7 +328,7 @@ class SongImportForm(OpenLPWizard): """ OpenLPWizard.preWizard(self) self.progressLabel.setText(WizardStrings.StartingImport) - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() def performWizard(self): """ diff --git a/openlp/plugins/songs/forms/songmaintenanceform.py b/openlp/plugins/songs/forms/songmaintenanceform.py index 474e68040..175d3e503 100644 --- a/openlp/plugins/songs/forms/songmaintenanceform.py +++ b/openlp/plugins/songs/forms/songmaintenanceform.py @@ -346,12 +346,12 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): """ Utility method to merge two objects to leave one in the database. """ - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() merge(dbObject) reset() if not self.fromSongEdit: Receiver.send_message(u'songs_load_list') - Receiver.send_message(u'cursor_normal') + self.openlp_core.set_normal_cursor() def mergeAuthors(self, oldAuthor): """ @@ -481,3 +481,12 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): deleteButton.setEnabled(True) editButton.setEnabled(True) + def _get_openlp_core(self): + """ + Adds the openlp to the class dynamically + """ + if not hasattr(self, u'_openlp_core'): + self._openlp_core = Registry().get(u'openlp_core') + return self._openlp_core + + openlp_core = property(_get_openlp_core) \ No newline at end of file diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index de1ad22ff..a8af9f407 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -361,7 +361,7 @@ class SongMediaItem(MediaManagerItem): QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No), QtGui.QMessageBox.Yes) == QtGui.QMessageBox.No: return - Receiver.send_message(u'cursor_busy') + self.openlp_core.set_busy_cursor() self.main_window.displayProgressBar(len(items)) for item in items: item_id = item.data(QtCore.Qt.UserRole) @@ -380,7 +380,7 @@ class SongMediaItem(MediaManagerItem): self.plugin.manager.delete_object(Song, item_id) self.main_window.incrementProgressBar() self.main_window.finishedProgressBar() - Receiver.send_message(u'cursor_normal') + self.openlp_core.set_normal_cursor() self.onSearchTextButtonClicked() def onCloneClick(self): @@ -526,7 +526,7 @@ class SongMediaItem(MediaManagerItem): temporary = True # Update service with correct song id. if editId: - Receiver.send_message(u'service_item_update%s:%s:%s' % (editId, item.unique_identifier, temporary)) + self.service_manager.service_item_update(editId, item.unique_identifier, temporary) def search(self, string, showError): """ diff --git a/openlp/plugins/songs/lib/openlyricsexport.py b/openlp/plugins/songs/lib/openlyricsexport.py index 7db466dfc..9c1ee3513 100644 --- a/openlp/plugins/songs/lib/openlyricsexport.py +++ b/openlp/plugins/songs/lib/openlyricsexport.py @@ -35,7 +35,7 @@ import os from lxml import etree -from openlp.core.lib import check_directory_exists, Receiver, translate +from openlp.core.lib import Registry, check_directory_exists, translate from openlp.core.utils import clean_filename from openlp.plugins.songs.lib import OpenLyrics @@ -64,7 +64,7 @@ class OpenLyricsExport(object): openLyrics = OpenLyrics(self.manager) self.parent.progressBar.setMaximum(len(self.songs)) for song in self.songs: - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() if self.parent.stop_export_flag: return False self.parent.incrementProgressBar(translate('SongsPlugin.OpenLyricsExport', 'Exporting "%s"...') % @@ -80,3 +80,13 @@ class OpenLyricsExport(object): tree.write(open(os.path.join(self.save_path, filename), u'w'), encoding=u'utf-8', xml_declaration=True, pretty_print=True) return True + + def _get_openlp_core(self): + """ + Adds the openlp to the class dynamically + """ + if not hasattr(self, u'_openlp_core'): + self._openlp_core = Registry().get(u'openlp_core') + return self._openlp_core + + openlp_core = property(_get_openlp_core) diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index 4f57d3e21..8818746b7 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -38,7 +38,7 @@ import sqlite3 from PyQt4 import QtCore, QtGui -from openlp.core.lib import Plugin, StringContent, build_icon, translate, Receiver, UiStrings +from openlp.core.lib import Plugin, StringContent, build_icon, translate, UiStrings from openlp.core.lib.db import Manager from openlp.core.lib.ui import create_action from openlp.core.utils import get_filesystem_encoding @@ -96,9 +96,6 @@ class SongsPlugin(Plugin): action_list.add_action(self.songImportItem, UiStrings().Import) action_list.add_action(self.songExportItem, UiStrings().Export) action_list.add_action(self.toolsReindexItem, UiStrings().Tools) - QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'servicemanager_new_service'), - self.clearTemporarySongs) - def addImportMenuItem(self, import_menu): """ @@ -244,9 +241,9 @@ class SongsPlugin(Plugin): 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.openlp_core.process_events() self.onToolsReindexItemTriggered() - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() db_dir = unicode(os.path.join(unicode(gettempdir(), get_filesystem_encoding()), u'openlp')) if not os.path.exists(db_dir): return @@ -254,12 +251,12 @@ class SongsPlugin(Plugin): 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') + self.openlp_core.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') + self.openlp_core.process_events() progress = QtGui.QProgressDialog(self.main_window) progress.setWindowModality(QtCore.Qt.WindowModal) progress.setWindowTitle(translate('OpenLP.Ui', 'Importing Songs')) @@ -268,11 +265,11 @@ class SongsPlugin(Plugin): progress.setRange(0, song_count) progress.setMinimumDuration(0) progress.forceShow() - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() for db in song_dbs: importer = OpenLPSongImport(self.manager, filename=db) importer.doImport(progress) - Receiver.send_message(u'openlp_process_events') + self.openlp_core.process_events() progress.setValue(song_count) self.mediaItem.onSearchTextButtonClicked() @@ -281,7 +278,7 @@ class SongsPlugin(Plugin): Time to tidy up on exit """ log.info(u'Songs Finalising') - self.clearTemporarySongs() + self.new_service_created() # Clean up files and connections self.manager.finalise() self.songImportItem.setVisible(False) @@ -293,13 +290,18 @@ class SongsPlugin(Plugin): action_list.remove_action(self.toolsReindexItem, UiStrings().Tools) Plugin.finalise(self) - def clearTemporarySongs(self): - # Remove temporary songs + def new_service_created(self): + """ + Remove temporary songs from the database + """ 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): + """ + Provide a count of the songs in the database + """ connection = sqlite3.connect(db_file) cursor = connection.cursor() cursor.execute(u'SELECT COUNT(id) AS song_count FROM songs')