forked from openlp/openlp
Head
This commit is contained in:
commit
13f76ef2cb
@ -148,6 +148,8 @@ class SongXMLParser(object):
|
|||||||
verse_list = []
|
verse_list = []
|
||||||
for element in iter:
|
for element in iter:
|
||||||
if element.tag == u'verse':
|
if element.tag == u'verse':
|
||||||
|
if element.text is None:
|
||||||
|
element.text = u''
|
||||||
verse_list.append([element.attrib,
|
verse_list.append([element.attrib,
|
||||||
unicode(element.text).decode('unicode-escape')])
|
unicode(element.text).decode('unicode-escape')])
|
||||||
return verse_list
|
return verse_list
|
||||||
|
@ -67,7 +67,8 @@ class VersionThread(QtCore.QThread):
|
|||||||
"""
|
"""
|
||||||
Run the thread.
|
Run the thread.
|
||||||
"""
|
"""
|
||||||
time.sleep(2)
|
time.sleep(1)
|
||||||
|
Receiver.send_message(u'blank_check')
|
||||||
version = check_latest_version(self.generalConfig, self.app_version)
|
version = check_latest_version(self.generalConfig, self.app_version)
|
||||||
#new version has arrived
|
#new version has arrived
|
||||||
if version != self.app_version:
|
if version != self.app_version:
|
||||||
@ -493,6 +494,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
|
|||||||
QtCore.SIGNAL(u'update_global_theme'), self.defaultThemeChanged)
|
QtCore.SIGNAL(u'update_global_theme'), self.defaultThemeChanged)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'version_check'), self.versionCheck)
|
QtCore.SIGNAL(u'version_check'), self.versionCheck)
|
||||||
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
|
QtCore.SIGNAL(u'blank_check'), self.blankCheck)
|
||||||
QtCore.QObject.connect(self.FileNewItem,
|
QtCore.QObject.connect(self.FileNewItem,
|
||||||
QtCore.SIGNAL(u'triggered()'),
|
QtCore.SIGNAL(u'triggered()'),
|
||||||
self.ServiceManagerContents.onNewService)
|
self.ServiceManagerContents.onNewService)
|
||||||
@ -582,6 +585,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
|
|||||||
self.activateWindow()
|
self.activateWindow()
|
||||||
if str_to_bool(self.generalConfig.get_config(u'auto open', False)):
|
if str_to_bool(self.generalConfig.get_config(u'auto open', False)):
|
||||||
self.ServiceManagerContents.onLoadService(True)
|
self.ServiceManagerContents.onLoadService(True)
|
||||||
|
|
||||||
|
def blankCheck(self):
|
||||||
if str_to_bool(self.generalConfig.get_config(u'screen blank', False)) \
|
if str_to_bool(self.generalConfig.get_config(u'screen blank', False)) \
|
||||||
and str_to_bool(self.generalConfig.get_config(u'blank warning', False)):
|
and str_to_bool(self.generalConfig.get_config(u'blank warning', False)):
|
||||||
self.LiveController.onBlankDisplay(True)
|
self.LiveController.onBlankDisplay(True)
|
||||||
|
@ -403,14 +403,14 @@ class SlideController(QtGui.QWidget):
|
|||||||
if self.songEdit:
|
if self.songEdit:
|
||||||
slideno = self.selectedRow
|
slideno = self.selectedRow
|
||||||
self.songEdit = False
|
self.songEdit = False
|
||||||
self.addServiceManagerItem(item, slideno)
|
self._processItem(item, slideno)
|
||||||
|
|
||||||
def replaceServiceManagerItem(self, item):
|
def replaceServiceManagerItem(self, item):
|
||||||
"""
|
"""
|
||||||
Replacement item following a remote edit
|
Replacement item following a remote edit
|
||||||
"""
|
"""
|
||||||
if item.__eq__(self.serviceItem):
|
if item.__eq__(self.serviceItem):
|
||||||
self.addServiceManagerItem(item, self.PreviewListWidget.currentRow())
|
self._processItem(item, self.PreviewListWidget.currentRow())
|
||||||
|
|
||||||
def addServiceManagerItem(self, item, slideno):
|
def addServiceManagerItem(self, item, slideno):
|
||||||
"""
|
"""
|
||||||
@ -419,27 +419,32 @@ class SlideController(QtGui.QWidget):
|
|||||||
Called by ServiceManager
|
Called by ServiceManager
|
||||||
"""
|
"""
|
||||||
log.debug(u'addServiceManagerItem')
|
log.debug(u'addServiceManagerItem')
|
||||||
#If old item was a command tell it to stop
|
#If service item is the same as the current on only change slide
|
||||||
if self.serviceItem and self.serviceItem.is_command():
|
if item.__eq__(self.serviceItem):
|
||||||
self.onMediaStop()
|
self.PreviewListWidget.selectRow(slideno)
|
||||||
if item.is_media():
|
self.onSlideSelected()
|
||||||
self.onMediaStart(item)
|
return
|
||||||
elif item.is_command():
|
self._processItem(item, slideno)
|
||||||
if self.isLive:
|
|
||||||
blanked = self.blankButton.isChecked()
|
|
||||||
else:
|
|
||||||
blanked = False
|
|
||||||
Receiver.send_message(u'%s_start' % item.name.lower(), \
|
|
||||||
[item.title, item.service_item_path,
|
|
||||||
item.get_frame_title(), slideno, self.isLive, blanked])
|
|
||||||
self.displayServiceManagerItems(item, slideno)
|
|
||||||
|
|
||||||
def displayServiceManagerItems(self, serviceItem, slideno):
|
def _processItem(self, serviceItem, slideno):
|
||||||
"""
|
"""
|
||||||
Loads a ServiceItem into the system from ServiceManager
|
Loads a ServiceItem into the system from ServiceManager
|
||||||
Display the slide number passed
|
Display the slide number passed
|
||||||
"""
|
"""
|
||||||
log.debug(u'displayServiceManagerItems Start')
|
log.debug(u'processsManagerItem')
|
||||||
|
#If old item was a command tell it to stop
|
||||||
|
if self.serviceItem and self.serviceItem.is_command():
|
||||||
|
self.onMediaStop()
|
||||||
|
if serviceItem.is_media():
|
||||||
|
self.onMediaStart(serviceItem)
|
||||||
|
elif serviceItem.is_command():
|
||||||
|
if self.isLive:
|
||||||
|
blanked = self.blankButton.isChecked()
|
||||||
|
else:
|
||||||
|
blanked = False
|
||||||
|
Receiver.send_message(u'%s_start' % serviceItem.name.lower(), \
|
||||||
|
[serviceItem.title, serviceItem.service_item_path,
|
||||||
|
serviceItem.get_frame_title(), slideno, self.isLive, blanked])
|
||||||
self.slideList = {}
|
self.slideList = {}
|
||||||
width = self.parent.ControlSplitter.sizes()[self.split]
|
width = self.parent.ControlSplitter.sizes()[self.split]
|
||||||
#Set pointing cursor when we have somthing to point at
|
#Set pointing cursor when we have somthing to point at
|
||||||
@ -503,7 +508,6 @@ class SlideController(QtGui.QWidget):
|
|||||||
log.log(15, u'Display Rendering took %4s' % (time.time() - before))
|
log.log(15, u'Display Rendering took %4s' % (time.time() - before))
|
||||||
if self.isLive:
|
if self.isLive:
|
||||||
self.serviceItem.request_audit()
|
self.serviceItem.request_audit()
|
||||||
log.debug(u'displayServiceManagerItems End')
|
|
||||||
|
|
||||||
#Screen event methods
|
#Screen event methods
|
||||||
def onSlideSelectedFirst(self):
|
def onSlideSelectedFirst(self):
|
||||||
|
@ -341,17 +341,17 @@ class ImportWizardForm(QtGui.QWizard, Ui_BibleImportWizard):
|
|||||||
download_location = self.field(u'web_location').toInt()[0]
|
download_location = self.field(u'web_location').toInt()[0]
|
||||||
if download_location == DownloadLocation.Crosswalk:
|
if download_location == DownloadLocation.Crosswalk:
|
||||||
bible = self.web_bible_list[DownloadLocation.Crosswalk][
|
bible = self.web_bible_list[DownloadLocation.Crosswalk][
|
||||||
unicode(self.BibleComboBox.currentText())]
|
unicode(self.BibleComboBox.currentText(), u'utf8')]
|
||||||
elif download_location == DownloadLocation.BibleGateway:
|
elif download_location == DownloadLocation.BibleGateway:
|
||||||
bible = self.web_bible_list[DownloadLocation.BibleGateway][
|
bible = self.web_bible_list[DownloadLocation.BibleGateway][
|
||||||
unicode(self.BibleComboBox.currentText())]
|
self.BibleComboBox.currentText()]
|
||||||
importer = self.manager.import_bible(BibleFormat.WebDownload,
|
importer = self.manager.import_bible(BibleFormat.WebDownload,
|
||||||
name=unicode(self.field(u'license_version').toString()),
|
name=unicode(self.field(u'license_version').toString(), u'utf8'),
|
||||||
download_source=unicode(DownloadLocation.get_name(download_location)),
|
download_source=DownloadLocation.get_name(download_location),
|
||||||
download_name=unicode(bible),
|
download_name=bible,
|
||||||
proxy_server=unicode(self.field(u'proxy_server').toString()),
|
proxy_server=unicode(self.field(u'proxy_server').toString(), u'utf8'),
|
||||||
proxy_username=unicode(self.field(u'proxy_username').toString()),
|
proxy_username=unicode(self.field(u'proxy_username').toString(), u'utf8'),
|
||||||
proxy_password=unicode(self.field(u'proxy_password').toString())
|
proxy_password=unicode(self.field(u'proxy_password').toString(), u'utf8')
|
||||||
)
|
)
|
||||||
success = importer.do_import()
|
success = importer.do_import()
|
||||||
if success:
|
if success:
|
||||||
|
@ -27,6 +27,7 @@ import urllib2
|
|||||||
import logging
|
import logging
|
||||||
import re
|
import re
|
||||||
import chardet
|
import chardet
|
||||||
|
import htmlentitydefs
|
||||||
|
|
||||||
only_verses = re.compile(r'([\w .]+)[ ]+([0-9]+)[ ]*[:|v|V][ ]*([0-9]+)'
|
only_verses = re.compile(r'([\w .]+)[ ]+([0-9]+)[ ]*[:|v|V][ ]*([0-9]+)'
|
||||||
r'(?:[ ]*-[ ]*([0-9]+|end))?(?:[ ]*,[ ]*([0-9]+)(?:[ ]*-[ ]*([0-9]+|end))?)?',
|
r'(?:[ ]*-[ ]*([0-9]+|end))?(?:[ ]*,[ ]*([0-9]+)(?:[ ]*-[ ]*([0-9]+|end))?)?',
|
||||||
@ -115,7 +116,6 @@ def parse_reference(reference):
|
|||||||
log.debug(reference_list)
|
log.debug(reference_list)
|
||||||
return reference_list
|
return reference_list
|
||||||
|
|
||||||
|
|
||||||
class SearchResults(object):
|
class SearchResults(object):
|
||||||
"""
|
"""
|
||||||
Encapsulate a set of search results. This is Bible-type independant.
|
Encapsulate a set of search results. This is Bible-type independant.
|
||||||
@ -247,3 +247,33 @@ class BibleCommon(object):
|
|||||||
start_tag = text.find(u'<')
|
start_tag = text.find(u'<')
|
||||||
text = text.replace(u'>', u'')
|
text = text.replace(u'>', u'')
|
||||||
return text.rstrip().lstrip()
|
return text.rstrip().lstrip()
|
||||||
|
|
||||||
|
|
||||||
|
def unescape(text):
|
||||||
|
"""
|
||||||
|
Removes HTML or XML character references and entities from a text string.
|
||||||
|
Courtesy of Fredrik Lundh, http://effbot.org/zone/re-sub.htm#unescape-html
|
||||||
|
|
||||||
|
@param text The HTML (or XML) source text.
|
||||||
|
@return The plain text, as a Unicode string, if necessary.
|
||||||
|
"""
|
||||||
|
def fixup(m):
|
||||||
|
text = m.group(0)
|
||||||
|
if text[:2] == u'&#':
|
||||||
|
# character reference
|
||||||
|
try:
|
||||||
|
if text[:3] == u'&#x':
|
||||||
|
return unichr(int(text[3:-1], 16))
|
||||||
|
else:
|
||||||
|
return unichr(int(text[2:-1]))
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
# named entity
|
||||||
|
try:
|
||||||
|
text = unichr(htmlentitydefs.name2codepoint[text[1:-1]])
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
return text # leave as is
|
||||||
|
return re.sub(u'&#?\w+;', fixup, text)
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ from BeautifulSoup import BeautifulSoup, Tag, NavigableString
|
|||||||
|
|
||||||
from openlp.core.lib import Receiver
|
from openlp.core.lib import Receiver
|
||||||
from openlp.core.utils import AppLocation
|
from openlp.core.utils import AppLocation
|
||||||
from common import BibleCommon, SearchResults
|
from common import BibleCommon, SearchResults, unescape
|
||||||
from db import BibleDB
|
from db import BibleDB
|
||||||
from openlp.plugins.bibles.lib.models import Book
|
from openlp.plugins.bibles.lib.models import Book
|
||||||
|
|
||||||
@ -196,7 +196,8 @@ class BGExtract(BibleCommon):
|
|||||||
verse_list[verse_number] = u''
|
verse_list[verse_number] = u''
|
||||||
continue
|
continue
|
||||||
if isinstance(verse, NavigableString):
|
if isinstance(verse, NavigableString):
|
||||||
verse_list[verse_number] = verse_list[verse_number] + verse.replace(u' ', u' ')
|
verse_list[verse_number] = verse_list[verse_number] + \
|
||||||
|
unescape(unicode(verse, u'utf-8').replace(u' ', u' '))
|
||||||
# Delete the "0" element, since we don't need it, it's just there for
|
# Delete the "0" element, since we don't need it, it's just there for
|
||||||
# some stupid initial whitespace, courtesy of Bible Gateway.
|
# some stupid initial whitespace, courtesy of Bible Gateway.
|
||||||
del verse_list[0]
|
del verse_list[0]
|
||||||
|
@ -87,6 +87,7 @@ class EditCustomForm(QtGui.QDialog, Ui_customEditDialog):
|
|||||||
|
|
||||||
def initialise(self):
|
def initialise(self):
|
||||||
self.editAll = False
|
self.editAll = False
|
||||||
|
self.AddButton.setEnabled(True)
|
||||||
self.DeleteButton.setEnabled(False)
|
self.DeleteButton.setEnabled(False)
|
||||||
self.EditButton.setEnabled(False)
|
self.EditButton.setEnabled(False)
|
||||||
self.EditAllButton.setEnabled(True)
|
self.EditAllButton.setEnabled(True)
|
||||||
|
Loading…
Reference in New Issue
Block a user