修复设备管理查询时数据流中途触发解析导致表格被清零的问题
This commit is contained in:
+12
-3
@@ -875,6 +875,7 @@ class DeviceDialog(QDialog):
|
|||||||
|
|
||||||
self._buf = ""
|
self._buf = ""
|
||||||
self._pending_del = None # 等待删除结果的MAC,"all"表示删除全部
|
self._pending_del = None # 等待删除结果的MAC,"all"表示删除全部
|
||||||
|
self._parsed = False # 本次查询是否已完成解析(防止数据流中途误触发)
|
||||||
self._quiet = QTimer(self)
|
self._quiet = QTimer(self)
|
||||||
self._quiet.setSingleShot(True)
|
self._quiet.setSingleShot(True)
|
||||||
self._quiet.timeout.connect(self._on_quiet)
|
self._quiet.timeout.connect(self._on_quiet)
|
||||||
@@ -922,14 +923,19 @@ class DeviceDialog(QDialog):
|
|||||||
return
|
return
|
||||||
self._buf = ""
|
self._buf = ""
|
||||||
self._pending_del = None
|
self._pending_del = None
|
||||||
|
self._parsed = False
|
||||||
self._quiet.stop()
|
self._quiet.stop()
|
||||||
|
self.table.setRowCount(0) # 清空旧数据,避免新旧混淆
|
||||||
self.status_lbl.setText("查询中...")
|
self.status_lbl.setText("查询中...")
|
||||||
self.main.send_command("culs")
|
self.main.send_command("culs")
|
||||||
self._quiet.start(800)
|
self._quiet.start(1200) # 首次等待稍长,给设备响应时间
|
||||||
|
|
||||||
def feed_text(self, text):
|
def feed_text(self, text):
|
||||||
|
# 已完成本次解析后,忽略后续到来的残留数据,直到下一次手动查询
|
||||||
|
if self._parsed:
|
||||||
|
return
|
||||||
self._buf += text
|
self._buf += text
|
||||||
self._quiet.start(600)
|
self._quiet.start(600) # 数据流仍在到达,重置静默定时器
|
||||||
|
|
||||||
def _on_quiet(self):
|
def _on_quiet(self):
|
||||||
if self._pending_del is not None:
|
if self._pending_del is not None:
|
||||||
@@ -945,6 +951,10 @@ class DeviceDialog(QDialog):
|
|||||||
self._pending_del = None
|
self._pending_del = None
|
||||||
self.query()
|
self.query()
|
||||||
return
|
return
|
||||||
|
# 仅解析一次:避免数据流间歇触发的中途解析把表格清零
|
||||||
|
if self._parsed:
|
||||||
|
return
|
||||||
|
self._parsed = True
|
||||||
self._parse_devices()
|
self._parse_devices()
|
||||||
|
|
||||||
def _parse_devices(self):
|
def _parse_devices(self):
|
||||||
@@ -1002,7 +1012,6 @@ class DeviceDialog(QDialog):
|
|||||||
if m:
|
if m:
|
||||||
cur["online"] = m.group(1)
|
cur["online"] = m.group(1)
|
||||||
self._fill_table(devices)
|
self._fill_table(devices)
|
||||||
self._buf = ""
|
|
||||||
|
|
||||||
def _fill_table(self, devices):
|
def _fill_table(self, devices):
|
||||||
self.table.setRowCount(0)
|
self.table.setRowCount(0)
|
||||||
|
|||||||
Reference in New Issue
Block a user