fix issues when closing tabs
- catch error on AsynTcp.shutdown (when already disconnected) - avoid opening duplicate tabs - shorten try except in mainWindow._handleTabClose to the minimum + fix an issue with frappy.client.CacheItem.formatted Change-Id: Ice4086373a89a969f02e08ec90a173edbd5b0585 Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/30730 Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de> Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
This commit is contained in:
parent
c3796aa6eb
commit
dd6ee398f2
@ -141,6 +141,8 @@ class CacheItem(tuple):
|
|||||||
|
|
||||||
def formatted(self):
|
def formatted(self):
|
||||||
"""format value with using unit"""
|
"""format value with using unit"""
|
||||||
|
if self[2]: # readerror
|
||||||
|
return repr(self[2])
|
||||||
return self.format_value(self[0])
|
return self.format_value(self[0])
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
|
@ -111,7 +111,6 @@ class MainWindow(QMainWindow):
|
|||||||
self.recentNodesChanged.connect(greeter.loadRecent)
|
self.recentNodesChanged.connect(greeter.loadRecent)
|
||||||
self.tab.addPanel(greeter, 'Welcome')
|
self.tab.addPanel(greeter, 'Welcome')
|
||||||
|
|
||||||
self._nodes = {}
|
|
||||||
self._nodeWidgets = {}
|
self._nodeWidgets = {}
|
||||||
|
|
||||||
# add localhost (if available) and SEC nodes given as arguments
|
# add localhost (if available) and SEC nodes given as arguments
|
||||||
@ -187,6 +186,10 @@ class MainWindow(QMainWindow):
|
|||||||
'Connecting to %s failed!' % host, str(e))
|
'Connecting to %s failed!' % host, str(e))
|
||||||
|
|
||||||
def _addNode(self, host):
|
def _addNode(self, host):
|
||||||
|
prevWidget = self._nodeWidgets.get(host)
|
||||||
|
if prevWidget:
|
||||||
|
self.tab.setCurrentWidget(prevWidget)
|
||||||
|
return
|
||||||
# create client
|
# create client
|
||||||
node = QSECNode(host, self.log, parent=self)
|
node = QSECNode(host, self.log, parent=self)
|
||||||
nodeWidget = NodeWidget(node)
|
nodeWidget = NodeWidget(node)
|
||||||
@ -194,10 +197,8 @@ class MainWindow(QMainWindow):
|
|||||||
nodeWidget._rebuildAdvanced(self.actionDetailed_View.isChecked())
|
nodeWidget._rebuildAdvanced(self.actionDetailed_View.isChecked())
|
||||||
|
|
||||||
# Node and NodeWidget created without error
|
# Node and NodeWidget created without error
|
||||||
nodename = node.nodename
|
|
||||||
self._nodes[nodename] = node
|
|
||||||
self.tab.addTab(nodeWidget, node.equipmentId)
|
self.tab.addTab(nodeWidget, node.equipmentId)
|
||||||
self._nodeWidgets[nodename] = nodeWidget
|
self._nodeWidgets[host] = nodeWidget
|
||||||
self.tab.setCurrentWidget(nodeWidget)
|
self.tab.setCurrentWidget(nodeWidget)
|
||||||
|
|
||||||
# add to recent nodes
|
# add to recent nodes
|
||||||
@ -208,7 +209,6 @@ class MainWindow(QMainWindow):
|
|||||||
recent.insert(0, host)
|
recent.insert(0, host)
|
||||||
settings.setValue('recent', recent)
|
settings.setValue('recent', recent)
|
||||||
self.recentNodesChanged.emit()
|
self.recentNodesChanged.emit()
|
||||||
return nodename
|
|
||||||
|
|
||||||
def buildRecentNodeMenu(self):
|
def buildRecentNodeMenu(self):
|
||||||
settings = QSettings()
|
settings = QSettings()
|
||||||
@ -233,15 +233,17 @@ class MainWindow(QMainWindow):
|
|||||||
self.recentNodesChanged.emit()
|
self.recentNodesChanged.emit()
|
||||||
|
|
||||||
def _handleTabClose(self, index):
|
def _handleTabClose(self, index):
|
||||||
|
nodeWidget = self.tab.widget(index)
|
||||||
try:
|
try:
|
||||||
node = self.tab.widget(index).getSecNode()
|
node = nodeWidget.getSecNode()
|
||||||
# disconnect node from all events
|
|
||||||
node.terminate_connection()
|
|
||||||
self._nodes.pop(node.nodename)
|
|
||||||
self.log.debug("Closing tab with node %s" % node.nodename)
|
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
# Closing the greeter
|
# Closing the greeter
|
||||||
self.log.debug("Greeter Tab closed")
|
self.log.debug("Greeter Tab closed")
|
||||||
|
else:
|
||||||
|
# disconnect node from all events
|
||||||
|
node.terminate_connection()
|
||||||
|
self._nodeWidgets.pop(node.contactPoint)
|
||||||
|
self.log.debug("Closing tab with node %s" % node.nodename)
|
||||||
self.tab.removeTab(index)
|
self.tab.removeTab(index)
|
||||||
|
|
||||||
def _rebuildAdvanced(self, advanced):
|
def _rebuildAdvanced(self, advanced):
|
||||||
@ -253,7 +255,7 @@ class MainWindow(QMainWindow):
|
|||||||
widget._rebuildAdvanced(advanced)
|
widget._rebuildAdvanced(advanced)
|
||||||
|
|
||||||
def _onQuit(self):
|
def _onQuit(self):
|
||||||
for node in self._nodes.values():
|
for widget in self._nodeWidgets.values():
|
||||||
# this is only qt signals deconnecting!
|
# this is only qt signals deconnecting!
|
||||||
node.terminate_connection()
|
widget.getSecNode().terminate_connection()
|
||||||
self.logwin.onClose()
|
self.logwin.onClose()
|
||||||
|
@ -182,7 +182,10 @@ class AsynTcp(AsynConn):
|
|||||||
|
|
||||||
def shutdown(self):
|
def shutdown(self):
|
||||||
if self.connection:
|
if self.connection:
|
||||||
|
try:
|
||||||
self.connection.shutdown(socket.SHUT_RDWR)
|
self.connection.shutdown(socket.SHUT_RDWR)
|
||||||
|
except OSError:
|
||||||
|
pass # in case socket is already disconnected
|
||||||
|
|
||||||
def disconnect(self):
|
def disconnect(self):
|
||||||
if self.connection:
|
if self.connection:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user