forked from openlp/openlp
Complete icon and ssl change code
This commit is contained in:
parent
f04c47c9c9
commit
25687dfd48
@ -149,11 +149,11 @@ class HttpRouter(RegistryProperties):
|
||||
"""
|
||||
Initialise the router stack and any other variables.
|
||||
"""
|
||||
authcode = "%s:%s" % (Settings().value('remotes/user id'), Settings().value('remotes/password'))
|
||||
auth_code = "%s:%s" % (Settings().value('remotes/user id'), Settings().value('remotes/password'))
|
||||
try:
|
||||
self.auth = base64.b64encode(authcode)
|
||||
self.auth = base64.b64encode(auth_code)
|
||||
except TypeError:
|
||||
self.auth = base64.b64encode(authcode.encode()).decode()
|
||||
self.auth = base64.b64encode(auth_code.encode()).decode()
|
||||
self.routes = [
|
||||
('^/$', {'function': self.serve_file, 'secure': False}),
|
||||
('^/(stage)$', {'function': self.serve_file, 'secure': False}),
|
||||
@ -376,7 +376,6 @@ class HttpRouter(RegistryProperties):
|
||||
Examines the extension of the file and determines what the content_type should be, defaults to text/plain
|
||||
Returns the extension and the content_type
|
||||
"""
|
||||
content_type = 'text/plain'
|
||||
ext = os.path.splitext(file_name)[1]
|
||||
content_type = FILE_TYPES.get(ext, 'text/plain')
|
||||
return ext, content_type
|
||||
@ -439,7 +438,7 @@ class HttpRouter(RegistryProperties):
|
||||
if plugin.status == PluginStatus.Active:
|
||||
try:
|
||||
text = json.loads(self.request_data)['request']['text']
|
||||
except KeyError as ValueError:
|
||||
except KeyError:
|
||||
return self.do_http_error()
|
||||
text = urllib.parse.unquote(text)
|
||||
self.alerts_manager.emit(QtCore.SIGNAL('alerts_text'), [text])
|
||||
@ -488,7 +487,7 @@ class HttpRouter(RegistryProperties):
|
||||
if self.request_data:
|
||||
try:
|
||||
data = json.loads(self.request_data)['request']['id']
|
||||
except KeyError as ValueError:
|
||||
except KeyError:
|
||||
return self.do_http_error()
|
||||
log.info(data)
|
||||
# This slot expects an int within a list.
|
||||
@ -547,7 +546,7 @@ class HttpRouter(RegistryProperties):
|
||||
"""
|
||||
try:
|
||||
text = json.loads(self.request_data)['request']['text']
|
||||
except KeyError as ValueError:
|
||||
except KeyError:
|
||||
return self.do_http_error()
|
||||
text = urllib.parse.unquote(text)
|
||||
plugin = self.plugin_manager.get_plugin_by_name(plugin_name)
|
||||
@ -563,12 +562,12 @@ class HttpRouter(RegistryProperties):
|
||||
Go live on an item of type ``plugin``.
|
||||
"""
|
||||
try:
|
||||
id = json.loads(self.request_data)['request']['id']
|
||||
except KeyError as ValueError:
|
||||
request_id = json.loads(self.request_data)['request']['id']
|
||||
except KeyError:
|
||||
return self.do_http_error()
|
||||
plugin = self.plugin_manager.get_plugin_by_name(plugin_name)
|
||||
if plugin.status == PluginStatus.Active and plugin.media_item:
|
||||
plugin.media_item.emit(QtCore.SIGNAL('%s_go_live' % plugin_name), [id, True])
|
||||
plugin.media_item.emit(QtCore.SIGNAL('%s_go_live' % plugin_name), [request_id, True])
|
||||
return self.do_http_success()
|
||||
|
||||
def add_to_service(self, plugin_name):
|
||||
@ -576,11 +575,11 @@ class HttpRouter(RegistryProperties):
|
||||
Add item of type ``plugin_name`` to the end of the service.
|
||||
"""
|
||||
try:
|
||||
id = json.loads(self.request_data)['request']['id']
|
||||
except KeyError as ValueError:
|
||||
request_id = json.loads(self.request_data)['request']['id']
|
||||
except KeyError:
|
||||
return self.do_http_error()
|
||||
plugin = self.plugin_manager.get_plugin_by_name(plugin_name)
|
||||
if plugin.status == PluginStatus.Active and plugin.media_item:
|
||||
item_id = plugin.media_item.create_item_from_id(id)
|
||||
item_id = plugin.media_item.create_item_from_id(request_id)
|
||||
plugin.media_item.emit(QtCore.SIGNAL('%s_add_to_service' % plugin_name), [item_id, True])
|
||||
self.do_http_success()
|
||||
|
@ -38,10 +38,9 @@ import os
|
||||
import logging
|
||||
import time
|
||||
|
||||
from PyQt4 import QtCore, QtGui
|
||||
from PyQt4 import QtCore
|
||||
|
||||
from openlp.core.common import AppLocation, Settings, RegistryProperties
|
||||
from openlp.core.lib import build_icon
|
||||
|
||||
from openlp.plugins.remotes.lib import HttpRouter
|
||||
|
||||
@ -72,7 +71,21 @@ class CustomHandler(BaseHTTPRequestHandler, HttpRouter):
|
||||
self.do_post_processor()
|
||||
|
||||
|
||||
class ThreadingHTTPServer(ThreadingMixIn, HTTPServer):
|
||||
class StoppableHttpServer(HTTPServer):
|
||||
"""
|
||||
Http server that reacts to self.stop flag
|
||||
"""
|
||||
|
||||
def serve_forever(self):
|
||||
"""
|
||||
Handle one request at a time until stopped.
|
||||
"""
|
||||
self.stop = False
|
||||
while not self.stop:
|
||||
self.handle_request()
|
||||
|
||||
|
||||
class ThreadingHTTPServer(ThreadingMixIn, StoppableHttpServer):
|
||||
pass
|
||||
|
||||
|
||||
@ -95,6 +108,10 @@ class HttpThread(QtCore.QThread):
|
||||
"""
|
||||
self.http_server.start_server()
|
||||
|
||||
def stop(self):
|
||||
log.debug("stop called")
|
||||
self.http_server.stop = True
|
||||
|
||||
|
||||
class OpenLPServer(RegistryProperties):
|
||||
def __init__(self):
|
||||
@ -112,25 +129,19 @@ class OpenLPServer(RegistryProperties):
|
||||
Start the correct server and save the handler
|
||||
"""
|
||||
address = Settings().value(self.settings_section + '/ip address')
|
||||
if Settings().value(self.settings_section + '/https enabled'):
|
||||
self.address = address
|
||||
self.is_secure = Settings().value(self.settings_section + '/https enabled')
|
||||
self.needs_authentication = Settings().value(self.settings_section + '/authentication enabled')
|
||||
if self.is_secure:
|
||||
port = Settings().value(self.settings_section + '/https port')
|
||||
self.port = port
|
||||
self.start_server_instance(address, port, HTTPSServer)
|
||||
else:
|
||||
port = Settings().value(self.settings_section + '/port')
|
||||
self.port = port
|
||||
self.start_server_instance(address, port, ThreadingHTTPServer)
|
||||
if hasattr(self, 'httpd') and self.httpd:
|
||||
self.httpd.serve_forever()
|
||||
icon = QtGui.QImage(':/remote/network_server.png')
|
||||
icon = icon.scaled(80, 80, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
|
||||
overlay = QtGui.QImage(':/remote/network_ssl.png')
|
||||
overlay = overlay.scaled(40, 40, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
|
||||
painter = QtGui.QPainter(icon)
|
||||
painter.drawImage(0, 0, overlay)
|
||||
painter.end()
|
||||
print("Hi")
|
||||
self.default_theme_label.setText("hello")
|
||||
self.default_theme_label.setIcon(build_icon(icon))
|
||||
self.default_theme_label.show()
|
||||
else:
|
||||
log.debug('Failed to start server')
|
||||
|
||||
@ -149,7 +160,7 @@ class OpenLPServer(RegistryProperties):
|
||||
log.debug("Server started for class %s %s %d" % (server_class, address, port))
|
||||
except OSError:
|
||||
log.debug("failed to start http server thread state %d %s" %
|
||||
(loop, self.http_thread.isRunning() is True))
|
||||
(loop, self.http_thread.isRunning()))
|
||||
loop += 1
|
||||
time.sleep(0.1)
|
||||
except:
|
||||
@ -159,12 +170,13 @@ class OpenLPServer(RegistryProperties):
|
||||
"""
|
||||
Stop the server
|
||||
"""
|
||||
self.http_thread.exit(0)
|
||||
if self.http_thread.isRunning():
|
||||
self.http_thread.stop()
|
||||
self.httpd = None
|
||||
log.debug('Stopped the server.')
|
||||
|
||||
|
||||
class HTTPSServer(HTTPServer):
|
||||
class HTTPSServer(StoppableHttpServer):
|
||||
def __init__(self, address, handler):
|
||||
"""
|
||||
Initialise the secure handlers for the SSL server if required.s
|
||||
@ -178,4 +190,4 @@ class HTTPSServer(HTTPServer):
|
||||
keyfile=os.path.join(local_data, 'remotes', 'openlp.key'),
|
||||
server_side=True)
|
||||
self.server_bind()
|
||||
self.server_activate()
|
||||
self.server_activate()
|
@ -32,7 +32,7 @@ import os.path
|
||||
from PyQt4 import QtCore, QtGui, QtNetwork
|
||||
|
||||
from openlp.core.common import AppLocation, Settings, translate
|
||||
from openlp.core.lib import SettingsTab
|
||||
from openlp.core.lib import SettingsTab, build_icon
|
||||
|
||||
ZERO_URL = '0.0.0.0'
|
||||
|
||||
@ -234,6 +234,7 @@ class RemoteTab(SettingsTab):
|
||||
"""
|
||||
Load the configuration and update the server configuration if necessary
|
||||
"""
|
||||
self.is_secure = Settings().value(self.settings_section + '/https enabled')
|
||||
self.port_spin_box.setValue(Settings().value(self.settings_section + '/port'))
|
||||
self.https_port_spin_box.setValue(Settings().value(self.settings_section + '/https port'))
|
||||
self.address_edit.setText(Settings().value(self.settings_section + '/ip address'))
|
||||
@ -263,9 +264,7 @@ class RemoteTab(SettingsTab):
|
||||
Settings().value(self.settings_section + '/port') != self.port_spin_box.value() or \
|
||||
Settings().value(self.settings_section + '/https port') != self.https_port_spin_box.value() or \
|
||||
Settings().value(self.settings_section + '/https enabled') != \
|
||||
self.https_settings_group_box.isChecked() or \
|
||||
Settings().value(self.settings_section + '/authentication enabled') != \
|
||||
self.user_login_group_box.isChecked():
|
||||
self.https_settings_group_box.isChecked():
|
||||
self.settings_form.register_post_process('remotes_config_updated')
|
||||
Settings().setValue(self.settings_section + '/port', self.port_spin_box.value())
|
||||
Settings().setValue(self.settings_section + '/https port', self.https_port_spin_box.value())
|
||||
@ -275,6 +274,7 @@ class RemoteTab(SettingsTab):
|
||||
Settings().setValue(self.settings_section + '/authentication enabled', self.user_login_group_box.isChecked())
|
||||
Settings().setValue(self.settings_section + '/user id', self.user_id.text())
|
||||
Settings().setValue(self.settings_section + '/password', self.password.text())
|
||||
self.generate_icon()
|
||||
|
||||
def on_twelve_hour_check_box_changed(self, check_state):
|
||||
"""
|
||||
@ -290,3 +290,25 @@ class RemoteTab(SettingsTab):
|
||||
Invert the HTTP group box based on Https group settings
|
||||
"""
|
||||
self.http_settings_group_box.setEnabled(not self.https_settings_group_box.isChecked())
|
||||
|
||||
def generate_icon(self):
|
||||
"""
|
||||
Generate icon for main window
|
||||
"""
|
||||
self.remote_server_icon.hide()
|
||||
icon = QtGui.QImage(':/remote/network_server.png')
|
||||
icon = icon.scaled(80, 80, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
|
||||
if self.is_secure:
|
||||
overlay = QtGui.QImage(':/remote/network_ssl.png')
|
||||
overlay = overlay.scaled(60, 60, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
|
||||
painter = QtGui.QPainter(icon)
|
||||
painter.drawImage(0, 0, overlay)
|
||||
painter.end()
|
||||
if Settings().value(self.settings_section + '/authentication enabled'):
|
||||
overlay = QtGui.QImage(':/remote/network_auth.png')
|
||||
overlay = overlay.scaled(60, 60, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
|
||||
painter = QtGui.QPainter(icon)
|
||||
painter.drawImage(20, 0, overlay)
|
||||
painter.end()
|
||||
self.remote_server_icon.setIcon(build_icon(icon))
|
||||
self.remote_server_icon.show()
|
@ -28,7 +28,6 @@
|
||||
###############################################################################
|
||||
|
||||
import logging
|
||||
import time
|
||||
|
||||
from PyQt4 import QtGui
|
||||
|
||||
@ -69,13 +68,13 @@ class RemotesPlugin(Plugin):
|
||||
log.debug('initialise')
|
||||
super(RemotesPlugin, self).initialise()
|
||||
self.server = OpenLPServer()
|
||||
self.default_theme_label = QtGui.QToolButton(self.main_window.status_bar)
|
||||
self.default_theme_label.setCheckable(False)
|
||||
self.default_theme_label.setAutoRaise(True)
|
||||
self.default_theme_label.setObjectName('default_theme_label')
|
||||
self.main_window.status_bar.insertPermanentWidget(2, self.default_theme_label)
|
||||
self.default_theme_label.hide()
|
||||
self.server.default_theme_label = self.default_theme_label
|
||||
self.remote_server_icon = QtGui.QToolButton(self.main_window.status_bar)
|
||||
self.remote_server_icon.setCheckable(False)
|
||||
self.remote_server_icon.setAutoRaise(True)
|
||||
self.remote_server_icon.setObjectName('remote_server_icon')
|
||||
self.main_window.status_bar.insertPermanentWidget(2, self.remote_server_icon)
|
||||
self.settings_tab.remote_server_icon = self.remote_server_icon
|
||||
self.settings_tab.generate_icon()
|
||||
|
||||
def finalise(self):
|
||||
"""
|
||||
@ -113,9 +112,11 @@ class RemotesPlugin(Plugin):
|
||||
|
||||
def config_update(self):
|
||||
"""
|
||||
Called when Config is changed to restart the server on new address or port
|
||||
Called when Config is changed to requests a restart with the server on new address or port
|
||||
"""
|
||||
log.debug('remote config changed')
|
||||
self.finalise()
|
||||
time.sleep(1)
|
||||
self.initialise()
|
||||
QtGui.QMessageBox.information(self.main_window,
|
||||
translate('RemotePlugin', 'Server Config Change'),
|
||||
translate('RemotePlugin', 'Server configuration changes will require a restart '
|
||||
'to take effect.'),
|
||||
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
|
||||
|
Loading…
Reference in New Issue
Block a user