forked from openlp/openlp
Cleanups part 3
This commit is contained in:
parent
d072dd4063
commit
e277c804f9
@ -45,7 +45,6 @@ log.debug('pjlink1 loaded')
|
|||||||
__all__ = ['PJLink']
|
__all__ = ['PJLink']
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from codecs import decode
|
from codecs import decode
|
||||||
|
|
||||||
from PyQt5 import QtCore, QtNetwork
|
from PyQt5 import QtCore, QtNetwork
|
||||||
@ -252,6 +251,7 @@ class PJLink(QtNetwork.QTcpSocket):
|
|||||||
Normally called by timer().
|
Normally called by timer().
|
||||||
"""
|
"""
|
||||||
if self.state() != self.ConnectedState:
|
if self.state() != self.ConnectedState:
|
||||||
|
log.warn("({ip}) poll_loop(): Not connected - returning".format(ip=self.ip))
|
||||||
return
|
return
|
||||||
log.debug('({ip}) Updating projector status'.format(ip=self.ip))
|
log.debug('({ip}) Updating projector status'.format(ip=self.ip))
|
||||||
# Reset timer in case we were called from a set command
|
# Reset timer in case we were called from a set command
|
||||||
@ -260,7 +260,7 @@ class PJLink(QtNetwork.QTcpSocket):
|
|||||||
self.timer.setInterval(self.poll_time)
|
self.timer.setInterval(self.poll_time)
|
||||||
# Restart timer
|
# Restart timer
|
||||||
self.timer.start()
|
self.timer.start()
|
||||||
# These commands may change during connetion
|
# These commands may change during connection
|
||||||
check_list = ['POWR', 'ERST', 'LAMP', 'AVMT', 'INPT']
|
check_list = ['POWR', 'ERST', 'LAMP', 'AVMT', 'INPT']
|
||||||
if self.pjlink_class == '2':
|
if self.pjlink_class == '2':
|
||||||
check_list.extend(['FILT', 'FREZ'])
|
check_list.extend(['FILT', 'FREZ'])
|
||||||
@ -378,7 +378,8 @@ class PJLink(QtNetwork.QTcpSocket):
|
|||||||
self.change_status(E_SOCKET_TIMEOUT)
|
self.change_status(E_SOCKET_TIMEOUT)
|
||||||
return
|
return
|
||||||
read = self.readLine(self.max_size)
|
read = self.readLine(self.max_size)
|
||||||
_ = self.readLine(self.max_size) # Clean out the trailing \r\n
|
# _ = self.readLine(self.max_size) # Clean out the trailing \r\n
|
||||||
|
self.readLine(self.max_size) # Clean out the trailing \r\n
|
||||||
if read is None:
|
if read is None:
|
||||||
log.warning('({ip}) read is None - socket error?'.format(ip=self.ip))
|
log.warning('({ip}) read is None - socket error?'.format(ip=self.ip))
|
||||||
return
|
return
|
||||||
@ -388,7 +389,8 @@ class PJLink(QtNetwork.QTcpSocket):
|
|||||||
data = decode(read, 'utf-8')
|
data = decode(read, 'utf-8')
|
||||||
# Possibility of extraneous data on input when reading.
|
# Possibility of extraneous data on input when reading.
|
||||||
# Clean out extraneous characters in buffer.
|
# Clean out extraneous characters in buffer.
|
||||||
_ = self.readLine(self.max_size)
|
# _ = self.readLine(self.max_size)
|
||||||
|
self.readLine(self.max_size)
|
||||||
log.debug('({ip}) check_login() read "{data}"'.format(ip=self.ip, data=data.strip()))
|
log.debug('({ip}) check_login() read "{data}"'.format(ip=self.ip, data=data.strip()))
|
||||||
# At this point, we should only have the initial login prompt with
|
# At this point, we should only have the initial login prompt with
|
||||||
# possible authentication
|
# possible authentication
|
||||||
@ -447,6 +449,20 @@ class PJLink(QtNetwork.QTcpSocket):
|
|||||||
self.timer.setInterval(2000) # Set 2 seconds for initial information
|
self.timer.setInterval(2000) # Set 2 seconds for initial information
|
||||||
self.timer.start()
|
self.timer.start()
|
||||||
|
|
||||||
|
def _trash_buffer(self, msg=None):
|
||||||
|
"""
|
||||||
|
Clean out extraneous stuff in the buffer.
|
||||||
|
"""
|
||||||
|
log.warning("({ip}) {message}".format(ip=self.ip, message='Invalid packet' if msg is None else msg))
|
||||||
|
self.send_busy = False
|
||||||
|
trash_count = 0
|
||||||
|
while self.bytesAvailable() > 0:
|
||||||
|
trash = self.read(self.max_size)
|
||||||
|
trash_count += len(trash)
|
||||||
|
log.debug("({ip}) Finished cleaning buffer - {count} bytes dropped".format(ip=self.ip,
|
||||||
|
count=trash_count))
|
||||||
|
return
|
||||||
|
|
||||||
@QtCore.pyqtSlot()
|
@QtCore.pyqtSlot()
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
"""
|
"""
|
||||||
@ -461,47 +477,27 @@ class PJLink(QtNetwork.QTcpSocket):
|
|||||||
if read == -1:
|
if read == -1:
|
||||||
# No data available
|
# No data available
|
||||||
log.debug('({ip}) get_data(): No data available (-1)'.format(ip=self.ip))
|
log.debug('({ip}) get_data(): No data available (-1)'.format(ip=self.ip))
|
||||||
self.send_busy = False
|
return self.receive_data_signal()
|
||||||
self.projectorReceivedData.emit()
|
|
||||||
return
|
|
||||||
self.socket_timer.stop()
|
self.socket_timer.stop()
|
||||||
self.projectorNetwork.emit(S_NETWORK_RECEIVED)
|
self.projectorNetwork.emit(S_NETWORK_RECEIVED)
|
||||||
# NOTE: Class2 has changed to some values being UTF-8
|
# NOTE: Class2 has changed to some values being UTF-8
|
||||||
data_in = decode(read, 'utf-8')
|
data_in = decode(read, 'utf-8')
|
||||||
data = data_in.strip()
|
data = data_in.strip()
|
||||||
if len(data) < 7:
|
if (len(data) < 7) or (not data.startswith(PJLINK_PREFIX)):
|
||||||
# Not enough data for a packet
|
return self._trash_buffer(msg='get_data(): Invalid packet - length or prefix')
|
||||||
log.debug('({ip}) get_data(): Packet length < 7: "{data}"'.format(ip=self.ip, data=data))
|
|
||||||
self.receive_data_signal()
|
|
||||||
return
|
|
||||||
elif '=' not in data:
|
elif '=' not in data:
|
||||||
log.warning('({ip}) get_data(): Invalid packet received'.format(ip=self.ip))
|
return self._trash_buffer(msg='get_data(): Invalid packet does not have equal')
|
||||||
self.receive_data_signal()
|
|
||||||
return
|
|
||||||
log.debug('({ip}) get_data(): Checking new data "{data}"'.format(ip=self.ip, data=data))
|
log.debug('({ip}) get_data(): Checking new data "{data}"'.format(ip=self.ip, data=data))
|
||||||
# At this point, we should have something to work with
|
header, data = data.split('=')
|
||||||
if data.upper().startswith('PJLINK'):
|
|
||||||
# Reconnected from remote host disconnect ?
|
|
||||||
self.check_login(data)
|
|
||||||
self.receive_data_signal()
|
|
||||||
return
|
|
||||||
elif data[0] != PJLINK_PREFIX:
|
|
||||||
log.debug("({ip}) get_data(): Invalid packet - prefix not equal to '{prefix}'".format(ip=self.ip,
|
|
||||||
prefix=PJLINK_PREFIX))
|
|
||||||
return
|
|
||||||
data_split = data.split('=')
|
|
||||||
try:
|
try:
|
||||||
(version, cmd, data) = (data_split[0][1], data_split[0][2:], data_split[1])
|
version, cmd = header[1], header[2:]
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
log.warning('({ip}) get_data(): Invalid packet - expected header + command + data'.format(ip=self.ip))
|
|
||||||
log.warning('({ip}) get_data(): Received data: "{data}"'.format(ip=self.ip, data=data_in.strip()))
|
|
||||||
self.change_status(E_INVALID_DATA)
|
self.change_status(E_INVALID_DATA)
|
||||||
self.receive_data_signal()
|
log.warning('({ip}) get_data(): Received data: "{data}"'.format(ip=self.ip, data=data_in.strip()))
|
||||||
return
|
return self._trash_buffer('get_data(): Expected header + command + data')
|
||||||
if cmd not in PJLINK_VALID_CMD:
|
if cmd not in PJLINK_VALID_CMD:
|
||||||
log.warning('({ip}) get_data(): Invalid packet - unknown command "{data}"'.format(ip=self.ip, data=cmd))
|
log.warning('({ip}) get_data(): Invalid packet - unknown command "{data}"'.format(ip=self.ip, data=cmd))
|
||||||
self.receive_data_signal()
|
return self._trash_buffer(msg='get_data(): Unknown command "{data}"'.format(data=cmd))
|
||||||
return
|
|
||||||
if int(self.pjlink_class) < int(version):
|
if int(self.pjlink_class) < int(version):
|
||||||
log.warn('({ip}) get_data(): Projector returned class reply higher '
|
log.warn('({ip}) get_data(): Projector returned class reply higher '
|
||||||
'than projector stated class'.format(ip=self.ip))
|
'than projector stated class'.format(ip=self.ip))
|
||||||
@ -557,7 +553,7 @@ class PJLink(QtNetwork.QTcpSocket):
|
|||||||
salt='' if salt is None
|
salt='' if salt is None
|
||||||
else ' with hash'))
|
else ' with hash'))
|
||||||
cmd_ver = PJLINK_VALID_CMD[cmd]['version']
|
cmd_ver = PJLINK_VALID_CMD[cmd]['version']
|
||||||
if self.pjlink_class in cmd_ver:
|
if self.pjlink_class in PJLINK_VALID_CMD[cmd]['version']:
|
||||||
header = PJLINK_HEADER.format(linkclass=self.pjlink_class)
|
header = PJLINK_HEADER.format(linkclass=self.pjlink_class)
|
||||||
elif len(cmd_ver) == 1 and (int(cmd_ver[0]) < int(self.pjlink_class)):
|
elif len(cmd_ver) == 1 and (int(cmd_ver[0]) < int(self.pjlink_class)):
|
||||||
# Typically a class 1 only command
|
# Typically a class 1 only command
|
||||||
@ -626,6 +622,7 @@ class PJLink(QtNetwork.QTcpSocket):
|
|||||||
self.waitForBytesWritten(2000) # 2 seconds should be enough
|
self.waitForBytesWritten(2000) # 2 seconds should be enough
|
||||||
if sent == -1:
|
if sent == -1:
|
||||||
# Network error?
|
# Network error?
|
||||||
|
log.warning("({ip}) _send_command(): -1 received".format(ip=self.ip))
|
||||||
self.change_status(E_NETWORK,
|
self.change_status(E_NETWORK,
|
||||||
translate('OpenLP.PJLink', 'Error while sending data to projector'))
|
translate('OpenLP.PJLink', 'Error while sending data to projector'))
|
||||||
|
|
||||||
@ -668,20 +665,17 @@ class PJLink(QtNetwork.QTcpSocket):
|
|||||||
elif data.upper() == 'ERR4':
|
elif data.upper() == 'ERR4':
|
||||||
# Projector/display error
|
# Projector/display error
|
||||||
self.change_status(E_PROJECTOR)
|
self.change_status(E_PROJECTOR)
|
||||||
self.send_busy = False
|
self.receive_data_signal()
|
||||||
self.projectorReceivedData.emit()
|
|
||||||
return
|
return
|
||||||
# Command succeeded - no extra information
|
# Command succeeded - no extra information
|
||||||
elif data.upper() == 'OK':
|
elif data.upper() == 'OK':
|
||||||
log.debug('({ip}) Command returned OK'.format(ip=self.ip))
|
log.debug('({ip}) Command returned OK'.format(ip=self.ip))
|
||||||
# A command returned successfully, recheck data
|
# A command returned successfully
|
||||||
self.send_busy = False
|
self.receive_data_signal()
|
||||||
self.projectorReceivedData.emit()
|
|
||||||
return
|
return
|
||||||
# Command checks already passed
|
# Command checks already passed
|
||||||
log.debug('({ip}) Calling function for {cmd}'.format(ip=self.ip, cmd=cmd))
|
log.debug('({ip}) Calling function for {cmd}'.format(ip=self.ip, cmd=cmd))
|
||||||
self.send_busy = False
|
self.receive_data_signal()
|
||||||
self.projectorReceivedData.emit()
|
|
||||||
self.pjlink_functions[cmd](data)
|
self.pjlink_functions[cmd](data)
|
||||||
|
|
||||||
def process_lamp(self, data):
|
def process_lamp(self, data):
|
||||||
|
@ -71,10 +71,10 @@ log = logging.getLogger(__name__)
|
|||||||
|
|
||||||
log.debug('pjlink2 loaded')
|
log.debug('pjlink2 loaded')
|
||||||
|
|
||||||
from PyQt5 import QtCore, QtNetwork
|
from PyQt5 import QtNetwork
|
||||||
|
|
||||||
|
|
||||||
class PJLinkUDP(QtNetwork.QTcpSocket):
|
class PJLinkUDP(QtNetwork.QUdpSocket):
|
||||||
"""
|
"""
|
||||||
Socket service for handling datagram (UDP) sockets.
|
Socket service for handling datagram (UDP) sockets.
|
||||||
"""
|
"""
|
||||||
|
@ -32,11 +32,6 @@ from openlp.core.lib.db import get_upgrade_op
|
|||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
# Possible future imports
|
|
||||||
# from sqlalchemy.exc import NoSuchTableError
|
|
||||||
# from sqlalchemy import inspect
|
|
||||||
# from openlp.core.common.db import drop_columns
|
|
||||||
|
|
||||||
# Initial projector DB was unversioned
|
# Initial projector DB was unversioned
|
||||||
__version__ = 2
|
__version__ = 2
|
||||||
|
|
||||||
|
@ -420,9 +420,7 @@ class ProjectorManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, UiProjecto
|
|||||||
:param opt: Needed by PyQt5
|
:param opt: Needed by PyQt5
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
ip = opt.link.ip
|
opt.link.set_shutter_closed()
|
||||||
projector = opt
|
|
||||||
projector.link.set_shutter_closed()
|
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
for list_item in self.projector_list_widget.selectedItems():
|
for list_item in self.projector_list_widget.selectedItems():
|
||||||
if list_item is None:
|
if list_item is None:
|
||||||
@ -455,9 +453,7 @@ class ProjectorManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, UiProjecto
|
|||||||
:param opt: Needed by PyQt5
|
:param opt: Needed by PyQt5
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
ip = opt.link.ip
|
opt.link.connect_to_host()
|
||||||
projector = opt
|
|
||||||
projector.link.connect_to_host()
|
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
for list_item in self.projector_list_widget.selectedItems():
|
for list_item in self.projector_list_widget.selectedItems():
|
||||||
if list_item is None:
|
if list_item is None:
|
||||||
@ -527,7 +523,8 @@ class ProjectorManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, UiProjecto
|
|||||||
self.projector_list = new_list
|
self.projector_list = new_list
|
||||||
list_item = self.projector_list_widget.takeItem(self.projector_list_widget.currentRow())
|
list_item = self.projector_list_widget.takeItem(self.projector_list_widget.currentRow())
|
||||||
list_item = None
|
list_item = None
|
||||||
_ = self.projectordb.delete_projector(projector.db_item)
|
if not self.projectordb.delete_projector(projector.db_item):
|
||||||
|
log.warning('Delete projector {item} failed'.format(item=projector.db_item))
|
||||||
for item in self.projector_list:
|
for item in self.projector_list:
|
||||||
log.debug('New projector list - item: {ip} {name}'.format(ip=item.link.ip, name=item.link.name))
|
log.debug('New projector list - item: {ip} {name}'.format(ip=item.link.ip, name=item.link.name))
|
||||||
|
|
||||||
@ -538,9 +535,7 @@ class ProjectorManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, UiProjecto
|
|||||||
:param opt: Needed by PyQt5
|
:param opt: Needed by PyQt5
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
ip = opt.link.ip
|
opt.link.disconnect_from_host()
|
||||||
projector = opt
|
|
||||||
projector.link.disconnect_from_host()
|
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
for list_item in self.projector_list_widget.selectedItems():
|
for list_item in self.projector_list_widget.selectedItems():
|
||||||
if list_item is None:
|
if list_item is None:
|
||||||
@ -573,9 +568,7 @@ class ProjectorManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, UiProjecto
|
|||||||
:param opt: Needed by PyQt5
|
:param opt: Needed by PyQt5
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
ip = opt.link.ip
|
opt.link.set_power_off()
|
||||||
projector = opt
|
|
||||||
projector.link.set_power_off()
|
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
for list_item in self.projector_list_widget.selectedItems():
|
for list_item in self.projector_list_widget.selectedItems():
|
||||||
if list_item is None:
|
if list_item is None:
|
||||||
@ -593,9 +586,7 @@ class ProjectorManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, UiProjecto
|
|||||||
:param opt: Needed by PyQt5
|
:param opt: Needed by PyQt5
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
ip = opt.link.ip
|
opt.link.set_power_on()
|
||||||
projector = opt
|
|
||||||
projector.link.set_power_on()
|
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
for list_item in self.projector_list_widget.selectedItems():
|
for list_item in self.projector_list_widget.selectedItems():
|
||||||
if list_item is None:
|
if list_item is None:
|
||||||
@ -613,9 +604,7 @@ class ProjectorManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, UiProjecto
|
|||||||
:param opt: Needed by PyQt5
|
:param opt: Needed by PyQt5
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
ip = opt.link.ip
|
opt.link.set_shutter_open()
|
||||||
projector = opt
|
|
||||||
projector.link.set_shutter_open()
|
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
for list_item in self.projector_list_widget.selectedItems():
|
for list_item in self.projector_list_widget.selectedItems():
|
||||||
if list_item is None:
|
if list_item is None:
|
||||||
@ -662,10 +651,10 @@ class ProjectorManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, UiProjecto
|
|||||||
data=translate('OpenLP.ProjectorManager', 'Closed')
|
data=translate('OpenLP.ProjectorManager', 'Closed')
|
||||||
if projector.link.shutter
|
if projector.link.shutter
|
||||||
else translate('OpenLP', 'Open'))
|
else translate('OpenLP', 'Open'))
|
||||||
message = '{msg}<b>{source}/b>: {selected}<br />'.format(msg=message,
|
message = '{msg}<b>{source}</b>: {selected}<br />'.format(msg=message,
|
||||||
source=translate('OpenLP.ProjectorManager',
|
source=translate('OpenLP.ProjectorManager',
|
||||||
'Current source input is'),
|
'Current source input is'),
|
||||||
selected=projector.link.source)
|
selected=projector.link.source)
|
||||||
if projector.link.pjlink_class == '2':
|
if projector.link.pjlink_class == '2':
|
||||||
# Information only available for PJLink Class 2 projectors
|
# Information only available for PJLink Class 2 projectors
|
||||||
message += '<b>{title}</b>: {data}<br /><br />'.format(title=translate('OpenLP.ProjectorManager',
|
message += '<b>{title}</b>: {data}<br /><br />'.format(title=translate('OpenLP.ProjectorManager',
|
||||||
@ -686,10 +675,10 @@ class ProjectorManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, UiProjecto
|
|||||||
'Lamp'),
|
'Lamp'),
|
||||||
count=count,
|
count=count,
|
||||||
status=translate('OpenLP.ProjectorManager',
|
status=translate('OpenLP.ProjectorManager',
|
||||||
' is on')
|
'ON')
|
||||||
if item['On']
|
if item['On']
|
||||||
else translate('OpenLP.ProjectorManager',
|
else translate('OpenLP.ProjectorManager',
|
||||||
'is off'))
|
'OFF'))
|
||||||
|
|
||||||
message += '<b>{title}</b>: {hours}<br />'.format(title=translate('OpenLP.ProjectorManager', 'Hours'),
|
message += '<b>{title}</b>: {hours}<br />'.format(title=translate('OpenLP.ProjectorManager', 'Hours'),
|
||||||
hours=item['Hours'])
|
hours=item['Hours'])
|
||||||
|
@ -5,10 +5,10 @@
|
|||||||
[pep8]
|
[pep8]
|
||||||
exclude=resources.py,vlc.py
|
exclude=resources.py,vlc.py
|
||||||
max-line-length = 120
|
max-line-length = 120
|
||||||
ignore = E402,E722
|
ignore = E402
|
||||||
|
|
||||||
[flake8]
|
[flake8]
|
||||||
exclude=resources.py,vlc.py
|
exclude=resources.py,vlc.py
|
||||||
max-line-length = 120
|
max-line-length = 120
|
||||||
ignore = E402,E722
|
ignore = E402
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user