forked from openlp/openlp
Head
This commit is contained in:
commit
ae36bc2bb9
@ -81,6 +81,7 @@ class ServiceItem(object):
|
|||||||
self.notes = u''
|
self.notes = u''
|
||||||
self.from_plugin = False
|
self.from_plugin = False
|
||||||
self.capabilities = []
|
self.capabilities = []
|
||||||
|
self.isValid = True
|
||||||
|
|
||||||
def add_capability(self, capability):
|
def add_capability(self, capability):
|
||||||
self.capabilities.append(capability)
|
self.capabilities.append(capability)
|
||||||
|
@ -44,7 +44,7 @@ class GeneralTab(SettingsTab):
|
|||||||
settings = QtCore.QSettings()
|
settings = QtCore.QSettings()
|
||||||
settings.beginGroup(self.settingsSection)
|
settings.beginGroup(self.settingsSection)
|
||||||
self.MonitorNumber = settings.value(u'monitor',
|
self.MonitorNumber = settings.value(u'monitor',
|
||||||
QtCore.QVariant(self.screens.monitor_number)).toInt()[0]
|
QtCore.QVariant(self.screens.display_count - 1)).toInt()[0]
|
||||||
self.screens.set_current_display(self.MonitorNumber)
|
self.screens.set_current_display(self.MonitorNumber)
|
||||||
self.screens.monitor_number = self.MonitorNumber
|
self.screens.monitor_number = self.MonitorNumber
|
||||||
self.DisplayOnMonitor = settings.value(
|
self.DisplayOnMonitor = settings.value(
|
||||||
|
@ -101,6 +101,7 @@ class ServiceManager(QtGui.QWidget):
|
|||||||
self.parent = parent
|
self.parent = parent
|
||||||
self.serviceItems = []
|
self.serviceItems = []
|
||||||
self.serviceName = u''
|
self.serviceName = u''
|
||||||
|
self.suffixes = []
|
||||||
self.droppos = 0
|
self.droppos = 0
|
||||||
#is a new service and has not been saved
|
#is a new service and has not been saved
|
||||||
self.isNew = True
|
self.isNew = True
|
||||||
@ -228,6 +229,9 @@ class ServiceManager(QtGui.QWidget):
|
|||||||
self.themeMenu = QtGui.QMenu(self.trUtf8(u'&Change Item Theme'))
|
self.themeMenu = QtGui.QMenu(self.trUtf8(u'&Change Item Theme'))
|
||||||
self.menu.addMenu(self.themeMenu)
|
self.menu.addMenu(self.themeMenu)
|
||||||
|
|
||||||
|
def supportedSuffixes(self, suffix):
|
||||||
|
self.suffixes.append(suffix)
|
||||||
|
|
||||||
def contextMenu(self, point):
|
def contextMenu(self, point):
|
||||||
item = self.ServiceManagerList.itemAt(point)
|
item = self.ServiceManagerList.itemAt(point)
|
||||||
if item is None:
|
if item is None:
|
||||||
@ -495,6 +499,7 @@ class ServiceManager(QtGui.QWidget):
|
|||||||
for itemcount, item in enumerate(self.serviceItems):
|
for itemcount, item in enumerate(self.serviceItems):
|
||||||
serviceitem = item[u'service_item']
|
serviceitem = item[u'service_item']
|
||||||
treewidgetitem = QtGui.QTreeWidgetItem(self.ServiceManagerList)
|
treewidgetitem = QtGui.QTreeWidgetItem(self.ServiceManagerList)
|
||||||
|
if serviceitem.isValid:
|
||||||
if serviceitem.notes:
|
if serviceitem.notes:
|
||||||
icon = QtGui.QImage(serviceitem.icon)
|
icon = QtGui.QImage(serviceitem.icon)
|
||||||
icon = icon.scaled(80, 80, QtCore.Qt.KeepAspectRatio,
|
icon = icon.scaled(80, 80, QtCore.Qt.KeepAspectRatio,
|
||||||
@ -508,6 +513,8 @@ class ServiceManager(QtGui.QWidget):
|
|||||||
treewidgetitem.setIcon(0, build_icon(icon))
|
treewidgetitem.setIcon(0, build_icon(icon))
|
||||||
else:
|
else:
|
||||||
treewidgetitem.setIcon(0, serviceitem.iconic_representation)
|
treewidgetitem.setIcon(0, serviceitem.iconic_representation)
|
||||||
|
else:
|
||||||
|
treewidgetitem.setIcon(0, build_icon(u':/general/general_delete.png'))
|
||||||
treewidgetitem.setText(0, serviceitem.title)
|
treewidgetitem.setText(0, serviceitem.title)
|
||||||
treewidgetitem.setToolTip(0, serviceitem.notes)
|
treewidgetitem.setToolTip(0, serviceitem.notes)
|
||||||
treewidgetitem.setData(0, QtCore.Qt.UserRole,
|
treewidgetitem.setData(0, QtCore.Qt.UserRole,
|
||||||
@ -651,7 +658,7 @@ class ServiceManager(QtGui.QWidget):
|
|||||||
serviceitem = ServiceItem()
|
serviceitem = ServiceItem()
|
||||||
serviceitem.RenderManager = self.parent.RenderManager
|
serviceitem.RenderManager = self.parent.RenderManager
|
||||||
serviceitem.set_from_service(item, self.servicePath)
|
serviceitem.set_from_service(item, self.servicePath)
|
||||||
if self.validateItem(serviceitem):
|
self.validateItem(serviceitem)
|
||||||
self.addServiceItem(serviceitem)
|
self.addServiceItem(serviceitem)
|
||||||
try:
|
try:
|
||||||
if os.path.isfile(p_file):
|
if os.path.isfile(p_file):
|
||||||
@ -671,12 +678,14 @@ class ServiceManager(QtGui.QWidget):
|
|||||||
self.parent.serviceChanged(True, self.serviceName)
|
self.parent.serviceChanged(True, self.serviceName)
|
||||||
|
|
||||||
def validateItem(self, serviceItem):
|
def validateItem(self, serviceItem):
|
||||||
# print "---"
|
"""
|
||||||
# print serviceItem.name
|
Validates the service item and if the suffix matches an accepted
|
||||||
# print serviceItem.title
|
one it allows the item to be displayed
|
||||||
# print serviceItem.service_item_path
|
"""
|
||||||
# print serviceItem.service_item_type
|
if serviceItem.is_command():
|
||||||
return True
|
type = serviceItem._raw_frames[0][u'title'].split(u'.')[1]
|
||||||
|
if type not in self.suffixes:
|
||||||
|
serviceItem.isValid = False
|
||||||
|
|
||||||
def cleanUp(self):
|
def cleanUp(self):
|
||||||
"""
|
"""
|
||||||
@ -760,8 +769,17 @@ class ServiceManager(QtGui.QWidget):
|
|||||||
Send the current item to the Preview slide controller
|
Send the current item to the Preview slide controller
|
||||||
"""
|
"""
|
||||||
item, count = self.findServiceItem()
|
item, count = self.findServiceItem()
|
||||||
|
if self.serviceItems[item][u'service_item'].isValid:
|
||||||
self.parent.PreviewController.addServiceManagerItem(
|
self.parent.PreviewController.addServiceManagerItem(
|
||||||
self.serviceItems[item][u'service_item'], count)
|
self.serviceItems[item][u'service_item'], count)
|
||||||
|
else:
|
||||||
|
QtGui.QMessageBox.critical(self,
|
||||||
|
self.trUtf8('Missing Display Handler'),
|
||||||
|
self.trUtf8('Your item cannot be displayed as '
|
||||||
|
'there is no handler to display it'),
|
||||||
|
QtGui.QMessageBox.StandardButtons(
|
||||||
|
QtGui.QMessageBox.Ok),
|
||||||
|
QtGui.QMessageBox.Ok)
|
||||||
|
|
||||||
def getServiceItem(self):
|
def getServiceItem(self):
|
||||||
"""
|
"""
|
||||||
@ -778,6 +796,7 @@ class ServiceManager(QtGui.QWidget):
|
|||||||
Send the current item to the Live slide controller
|
Send the current item to the Live slide controller
|
||||||
"""
|
"""
|
||||||
item, count = self.findServiceItem()
|
item, count = self.findServiceItem()
|
||||||
|
if self.serviceItems[item][u'service_item'].isValid:
|
||||||
self.parent.LiveController.addServiceManagerItem(
|
self.parent.LiveController.addServiceManagerItem(
|
||||||
self.serviceItems[item][u'service_item'], count)
|
self.serviceItems[item][u'service_item'], count)
|
||||||
if QtCore.QSettings().value(
|
if QtCore.QSettings().value(
|
||||||
@ -789,6 +808,14 @@ class ServiceManager(QtGui.QWidget):
|
|||||||
ItemCapabilities.AllowsPreview):
|
ItemCapabilities.AllowsPreview):
|
||||||
self.parent.PreviewController.addServiceManagerItem(
|
self.parent.PreviewController.addServiceManagerItem(
|
||||||
self.serviceItems[item][u'service_item'], 0)
|
self.serviceItems[item][u'service_item'], 0)
|
||||||
|
else:
|
||||||
|
QtGui.QMessageBox.critical(self,
|
||||||
|
self.trUtf8('Missing Display Handler'),
|
||||||
|
self.trUtf8('Your item cannot be displayed as '
|
||||||
|
'there is no handler to display it'),
|
||||||
|
QtGui.QMessageBox.StandardButtons(
|
||||||
|
QtGui.QMessageBox.Ok),
|
||||||
|
QtGui.QMessageBox.Ok)
|
||||||
|
|
||||||
def remoteEdit(self):
|
def remoteEdit(self):
|
||||||
"""
|
"""
|
||||||
|
@ -486,6 +486,7 @@ class SlideController(QtGui.QWidget):
|
|||||||
Display the slide number passed
|
Display the slide number passed
|
||||||
"""
|
"""
|
||||||
log.debug(u'processManagerItem')
|
log.debug(u'processManagerItem')
|
||||||
|
self.onStopLoop()
|
||||||
#If old item was a command tell it to stop
|
#If old item was a command tell it to stop
|
||||||
if self.serviceItem and self.serviceItem.is_command():
|
if self.serviceItem and self.serviceItem.is_command():
|
||||||
self.onMediaStop()
|
self.onMediaStop()
|
||||||
@ -674,10 +675,10 @@ class SlideController(QtGui.QWidget):
|
|||||||
self.themeButton.setChecked(False)
|
self.themeButton.setChecked(False)
|
||||||
if checked:
|
if checked:
|
||||||
Receiver.send_message(u'maindisplay_hide', HideMode.Screen)
|
Receiver.send_message(u'maindisplay_hide', HideMode.Screen)
|
||||||
self.blankPlugin(True)
|
self.hidePlugin(True)
|
||||||
else:
|
else:
|
||||||
Receiver.send_message(u'maindisplay_show')
|
Receiver.send_message(u'maindisplay_show')
|
||||||
self.blankPlugin(False)
|
self.hidePlugin(False)
|
||||||
|
|
||||||
def blankPlugin(self, blank):
|
def blankPlugin(self, blank):
|
||||||
"""
|
"""
|
||||||
@ -693,6 +694,20 @@ class SlideController(QtGui.QWidget):
|
|||||||
% self.serviceItem.name.lower(),
|
% self.serviceItem.name.lower(),
|
||||||
[self.serviceItem, self.isLive])
|
[self.serviceItem, self.isLive])
|
||||||
|
|
||||||
|
def hidePlugin(self, hide):
|
||||||
|
"""
|
||||||
|
Blank the display screen.
|
||||||
|
"""
|
||||||
|
if self.serviceItem is not None:
|
||||||
|
if hide:
|
||||||
|
Receiver.send_message(u'%s_hide'
|
||||||
|
% self.serviceItem.name.lower(),
|
||||||
|
[self.serviceItem, self.isLive])
|
||||||
|
else:
|
||||||
|
Receiver.send_message(u'%s_unblank'
|
||||||
|
% self.serviceItem.name.lower(),
|
||||||
|
[self.serviceItem, self.isLive])
|
||||||
|
|
||||||
def onSlideSelected(self):
|
def onSlideSelected(self):
|
||||||
"""
|
"""
|
||||||
Generate the preview when you click on a slide.
|
Generate the preview when you click on a slide.
|
||||||
@ -827,7 +842,9 @@ class SlideController(QtGui.QWidget):
|
|||||||
"""
|
"""
|
||||||
Stop the timer loop running
|
Stop the timer loop running
|
||||||
"""
|
"""
|
||||||
|
if self.timer_id != 0:
|
||||||
self.killTimer(self.timer_id)
|
self.killTimer(self.timer_id)
|
||||||
|
self.timer_id = 0
|
||||||
|
|
||||||
def timerEvent(self, event):
|
def timerEvent(self, event):
|
||||||
"""
|
"""
|
||||||
|
@ -143,7 +143,7 @@ class ImageMediaItem(MediaManagerItem):
|
|||||||
def generateSlideData(self, service_item, item=None):
|
def generateSlideData(self, service_item, item=None):
|
||||||
items = self.ListView.selectedIndexes()
|
items = self.ListView.selectedIndexes()
|
||||||
if items:
|
if items:
|
||||||
service_item.title = self.trUtf8('Image(s)')
|
service_item.title = unicode(self.trUtf8('Image(s)'))
|
||||||
service_item.add_capability(ItemCapabilities.AllowsMaintain)
|
service_item.add_capability(ItemCapabilities.AllowsMaintain)
|
||||||
service_item.add_capability(ItemCapabilities.AllowsPreview)
|
service_item.add_capability(ItemCapabilities.AllowsPreview)
|
||||||
service_item.add_capability(ItemCapabilities.AllowsLoop)
|
service_item.add_capability(ItemCapabilities.AllowsLoop)
|
||||||
|
@ -58,6 +58,7 @@ class MediaPlugin(Plugin):
|
|||||||
if len(value) == 2:
|
if len(value) == 2:
|
||||||
if list.find(value[1]) == -1:
|
if list.find(value[1]) == -1:
|
||||||
list += u'*.%s ' % value[1]
|
list += u'*.%s ' % value[1]
|
||||||
|
self.service_manager.supportedSuffixes(value[1])
|
||||||
type = u''
|
type = u''
|
||||||
return list, type
|
return list, type
|
||||||
|
|
||||||
|
@ -74,6 +74,7 @@ class PresentationMediaItem(MediaManagerItem):
|
|||||||
for type in types:
|
for type in types:
|
||||||
if fileType.find(type) == -1:
|
if fileType.find(type) == -1:
|
||||||
fileType += u'*%s ' % type
|
fileType += u'*%s ' % type
|
||||||
|
self.parent.service_manager.supportedSuffixes(type)
|
||||||
self.OnNewFileMasks = self.trUtf8('Presentations (%s)' % fileType)
|
self.OnNewFileMasks = self.trUtf8('Presentations (%s)' % fileType)
|
||||||
|
|
||||||
def requiredIcons(self):
|
def requiredIcons(self):
|
||||||
|
@ -160,6 +160,16 @@ class Controller(object):
|
|||||||
return
|
return
|
||||||
self.doc.blank_screen()
|
self.doc.blank_screen()
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
log.debug(u'Live = %s, stop' % self.isLive)
|
||||||
|
if not self.isLive:
|
||||||
|
return
|
||||||
|
if not self.doc.is_loaded():
|
||||||
|
return
|
||||||
|
if not self.doc.is_active():
|
||||||
|
return
|
||||||
|
self.doc.stop_presentation()
|
||||||
|
|
||||||
def unblank(self):
|
def unblank(self):
|
||||||
log.debug(u'Live = %s, unblank' % self.isLive)
|
log.debug(u'Live = %s, unblank' % self.isLive)
|
||||||
if not self.isLive:
|
if not self.isLive:
|
||||||
@ -190,6 +200,8 @@ class MessageListener(object):
|
|||||||
QtCore.SIGNAL(u'presentations_start'), self.startup)
|
QtCore.SIGNAL(u'presentations_start'), self.startup)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'presentations_stop'), self.shutdown)
|
QtCore.SIGNAL(u'presentations_stop'), self.shutdown)
|
||||||
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
|
QtCore.SIGNAL(u'presentations_hide'), self.hide)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'presentations_first'), self.first)
|
QtCore.SIGNAL(u'presentations_first'), self.first)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
@ -279,6 +291,11 @@ class MessageListener(object):
|
|||||||
else:
|
else:
|
||||||
self.previewHandler.shutdown()
|
self.previewHandler.shutdown()
|
||||||
|
|
||||||
|
def hide(self, message):
|
||||||
|
isLive, item = self.decode_message(message)
|
||||||
|
if isLive:
|
||||||
|
self.liveHandler.stop()
|
||||||
|
|
||||||
def blank(self, message):
|
def blank(self, message):
|
||||||
isLive, item = self.decode_message(message)
|
isLive, item = self.decode_message(message)
|
||||||
if isLive:
|
if isLive:
|
||||||
|
@ -63,7 +63,7 @@ function response(eventname, req){
|
|||||||
html += ' style="font-weight: bold"';
|
html += ' style="font-weight: bold"';
|
||||||
html += '>';
|
html += '>';
|
||||||
html += '<td>' + data[row]['tag'] + '</td>';
|
html += '<td>' + data[row]['tag'] + '</td>';
|
||||||
html += '<td>' + data[row]['text'].replace(/\\n/g, '<br>');
|
html += '<td>' + data[row]['text'].replace(/\n/g, '<br>');
|
||||||
html += '</td></tr>';
|
html += '</td></tr>';
|
||||||
}
|
}
|
||||||
html += '</table>';
|
html += '</table>';
|
||||||
@ -105,10 +105,12 @@ send_event("remotes_poll_request");
|
|||||||
<hr>
|
<hr>
|
||||||
<input type='button' value='Order of service'
|
<input type='button' value='Order of service'
|
||||||
onclick='send_event("servicemanager_list_request");'>
|
onclick='send_event("servicemanager_list_request");'>
|
||||||
|
<i>(Click service item to go live.)</i>
|
||||||
<div id='service'></div>
|
<div id='service'></div>
|
||||||
<hr>
|
<hr>
|
||||||
<input type='button' value='Current item'
|
<input type='button' value='Current item'
|
||||||
onclick='send_event("slidecontroller_live_text_request");'>
|
onclick='send_event("slidecontroller_live_text_request");'>
|
||||||
|
<i>(Click verse to display.)</i>
|
||||||
<div id='currentitem'></div>
|
<div id='currentitem'></div>
|
||||||
<hr>
|
<hr>
|
||||||
<a href="http://www.openlp.org/">OpenLP website</a>
|
<a href="http://www.openlp.org/">OpenLP website</a>
|
||||||
|
@ -152,29 +152,33 @@ class HttpConnection(object):
|
|||||||
log.debug(u'received: ' + data)
|
log.debug(u'received: ' + data)
|
||||||
words = data.split(u' ')
|
words = data.split(u' ')
|
||||||
html = None
|
html = None
|
||||||
|
mimetype = None
|
||||||
if words[0] == u'GET':
|
if words[0] == u'GET':
|
||||||
url = urlparse.urlparse(words[1])
|
url = urlparse.urlparse(words[1])
|
||||||
params = self.load_params(url.query)
|
params = self.load_params(url.query)
|
||||||
folders = url.path.split(u'/')
|
folders = url.path.split(u'/')
|
||||||
if folders[1] == u'':
|
if folders[1] == u'':
|
||||||
html = self.serve_file(u'')
|
mimetype, html = self.serve_file(u'')
|
||||||
elif folders[1] == u'files':
|
elif folders[1] == u'files':
|
||||||
html = self.serve_file(folders[2])
|
mimetype, html = self.serve_file(os.sep.join(folders[2:]))
|
||||||
elif folders[1] == u'send':
|
elif folders[1] == u'send':
|
||||||
html = self.process_event(folders[2], params)
|
html = self.process_event(folders[2], params)
|
||||||
elif folders[1] == u'request':
|
elif folders[1] == u'request':
|
||||||
if self.process_request(folders[2], params):
|
if self.process_request(folders[2], params):
|
||||||
return
|
return
|
||||||
if html:
|
if html:
|
||||||
html = self.get_200_ok() + html + u'\n'
|
if mimetype:
|
||||||
|
self.send_200_ok(mimetype)
|
||||||
else:
|
else:
|
||||||
html = self.get_404_not_found()
|
self.send_200_ok()
|
||||||
self.socket.write(html)
|
self.socket.write(html)
|
||||||
|
else:
|
||||||
|
self.send_404_not_found()
|
||||||
self.close()
|
self.close()
|
||||||
|
|
||||||
def serve_file(self, filename):
|
def serve_file(self, filename):
|
||||||
"""
|
"""
|
||||||
Send a file to the socket. For now, just .html files
|
Send a file to the socket. For now, just a subset of file types
|
||||||
and must be top level inside the html folder.
|
and must be top level inside the html folder.
|
||||||
If subfolders requested return 404, easier for security for the present.
|
If subfolders requested return 404, easier for security for the present.
|
||||||
|
|
||||||
@ -184,12 +188,24 @@ class HttpConnection(object):
|
|||||||
log.debug(u'serve file request %s' % filename)
|
log.debug(u'serve file request %s' % filename)
|
||||||
if not filename:
|
if not filename:
|
||||||
filename = u'index.html'
|
filename = u'index.html'
|
||||||
if os.path.basename(filename) != filename:
|
path = os.path.normpath(os.path.join(self.parent.html_dir, filename))
|
||||||
|
if not path.startswith(self.parent.html_dir):
|
||||||
return None
|
return None
|
||||||
(fileroot, ext) = os.path.splitext(filename)
|
(fileroot, ext) = os.path.splitext(filename)
|
||||||
if ext != u'.html':
|
if ext == u'.html':
|
||||||
return None
|
mimetype = u'text/html'
|
||||||
path = os.path.join(self.parent.html_dir, filename)
|
elif ext == u'.css':
|
||||||
|
mimetype = u'text/css'
|
||||||
|
elif ext == u'.js':
|
||||||
|
mimetype = u'application/x-javascript'
|
||||||
|
elif ext == u'.jpg':
|
||||||
|
mimetype = u'image/jpeg'
|
||||||
|
elif ext == u'.gif':
|
||||||
|
mimetype = u'image/gif'
|
||||||
|
elif ext == u'.png':
|
||||||
|
mimetype = u'image/png'
|
||||||
|
else:
|
||||||
|
return (None, None)
|
||||||
try:
|
try:
|
||||||
f = open(path, u'rb')
|
f = open(path, u'rb')
|
||||||
except:
|
except:
|
||||||
@ -198,12 +214,13 @@ class HttpConnection(object):
|
|||||||
log.debug(u'Opened %s' % path)
|
log.debug(u'Opened %s' % path)
|
||||||
html = f.read()
|
html = f.read()
|
||||||
f.close()
|
f.close()
|
||||||
return html
|
return (mimetype, html)
|
||||||
|
|
||||||
def load_params(self, query):
|
def load_params(self, query):
|
||||||
"""
|
"""
|
||||||
Decode the query string parameters sent from the browser
|
Decode the query string parameters sent from the browser
|
||||||
"""
|
"""
|
||||||
|
log.debug(u'loading params %s' % query)
|
||||||
params = urlparse.parse_qs(query)
|
params = urlparse.parse_qs(query)
|
||||||
if not params:
|
if not params:
|
||||||
return None
|
return None
|
||||||
@ -216,6 +233,7 @@ class HttpConnection(object):
|
|||||||
Currently lets anything through. Later we should restrict and perform
|
Currently lets anything through. Later we should restrict and perform
|
||||||
basic parameter checking, otherwise rogue clients could crash openlp
|
basic parameter checking, otherwise rogue clients could crash openlp
|
||||||
"""
|
"""
|
||||||
|
log.debug(u'Processing event %s' % event)
|
||||||
if params:
|
if params:
|
||||||
Receiver.send_message(event, params)
|
Receiver.send_message(event, params)
|
||||||
else:
|
else:
|
||||||
@ -233,6 +251,7 @@ class HttpConnection(object):
|
|||||||
is just waiting for slide change/song change activity. This can wait
|
is just waiting for slide change/song change activity. This can wait
|
||||||
longer (one minute)
|
longer (one minute)
|
||||||
"""
|
"""
|
||||||
|
log.debug(u'Processing request %s' % event)
|
||||||
if not event.endswith(u'_request'):
|
if not event.endswith(u'_request'):
|
||||||
return False
|
return False
|
||||||
self.event = event
|
self.event = event
|
||||||
@ -258,36 +277,36 @@ class HttpConnection(object):
|
|||||||
The recipient of a _request signal has sent data. Convert this to
|
The recipient of a _request signal has sent data. Convert this to
|
||||||
json and return it to client
|
json and return it to client
|
||||||
"""
|
"""
|
||||||
|
log.debug(u'Processing response for %s' % self.event)
|
||||||
if not self.socket:
|
if not self.socket:
|
||||||
return
|
return
|
||||||
self.timer.stop()
|
self.timer.stop()
|
||||||
html = json.dumps(data)
|
html = json.dumps(data)
|
||||||
html = self.get_200_ok() + html + u'\n'
|
self.send_200_ok()
|
||||||
self.socket.write(html)
|
self.socket.write(html)
|
||||||
self.close()
|
self.close()
|
||||||
|
|
||||||
def get_200_ok(self):
|
def send_200_ok(self, mimetype='text/html; charset="utf-8"'):
|
||||||
"""
|
"""
|
||||||
Successful request. Send OK headers. Assume html for now.
|
Successful request. Send OK headers. Assume html for now.
|
||||||
"""
|
"""
|
||||||
return u'HTTP/1.1 200 OK\r\n' + \
|
self.socket.write(u'HTTP/1.1 200 OK\r\n' + \
|
||||||
u'Content-Type: text/html; charset="utf-8"\r\n' + \
|
u'Content-Type: %s\r\n\r\n' % mimetype)
|
||||||
u'\r\n'
|
|
||||||
|
|
||||||
def get_404_not_found(self):
|
def send_404_not_found(self):
|
||||||
"""
|
"""
|
||||||
Invalid url. Say so
|
Invalid url. Say so
|
||||||
"""
|
"""
|
||||||
return u'HTTP/1.1 404 Not Found\r\n'+ \
|
self.socket.write(u'HTTP/1.1 404 Not Found\r\n'+ \
|
||||||
u'Content-Type: text/html; charset="utf-8"\r\n' + \
|
u'Content-Type: text/html; charset="utf-8"\r\n' + \
|
||||||
u'\r\n'
|
u'\r\n')
|
||||||
|
|
||||||
def get_408_timeout(self):
|
def send_408_timeout(self):
|
||||||
"""
|
"""
|
||||||
A _request hasn't returned anything in the timeout period.
|
A _request hasn't returned anything in the timeout period.
|
||||||
Return timeout
|
Return timeout
|
||||||
"""
|
"""
|
||||||
return u'HTTP/1.1 408 Request Timeout\r\n'
|
self.socket.write(u'HTTP/1.1 408 Request Timeout\r\n')
|
||||||
|
|
||||||
def timeout(self):
|
def timeout(self):
|
||||||
"""
|
"""
|
||||||
@ -295,8 +314,7 @@ class HttpConnection(object):
|
|||||||
"""
|
"""
|
||||||
if not self.socket:
|
if not self.socket:
|
||||||
return
|
return
|
||||||
html = self.get_408_timeout()
|
html = self.send_408_timeout()
|
||||||
self.socket.write(html)
|
|
||||||
self.close()
|
self.close()
|
||||||
|
|
||||||
def disconnected(self):
|
def disconnected(self):
|
||||||
|
Loading…
Reference in New Issue
Block a user