Remove events and move to Registry

This commit is contained in:
Tim Bentley 2013-02-03 09:07:31 +00:00
parent 7303395cb7
commit 27cd63ebcd
36 changed files with 368 additions and 225 deletions

View File

@ -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:

View File

@ -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``

View File

@ -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)

View File

@ -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)

View File

@ -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()

View File

@ -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)

View File

@ -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):

View File

@ -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)

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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)
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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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

View File

@ -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):
"""

View File

@ -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',

View File

@ -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)

View File

@ -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')

View File

@ -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):
"""

View File

@ -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'<meta name.*?/>', 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):

View File

@ -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''):
"""

View File

@ -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

View File

@ -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 <book name> <chapter>...')) % (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 '

View File

@ -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'</div>', u'').replace(u'</w>', 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

View File

@ -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)

View File

@ -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):

View File

@ -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())

View File

@ -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):
"""

View File

@ -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):
"""

View File

@ -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)

View File

@ -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):
"""

View File

@ -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)

View File

@ -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')