mirror of
https://github.com/bec-project/bec_widgets.git
synced 2026-07-14 15:30:58 +02:00
fix(progress): scan progress reset on_scan_status in unified backend
This commit is contained in:
@@ -8,6 +8,8 @@ import numpy as np
|
||||
from bec_lib.endpoints import MessageEndpoints
|
||||
from qtpy.QtCore import QObject, QTimer, Signal
|
||||
|
||||
from bec_widgets.utils.error_popups import SafeSlot
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class ProgressSnapshot:
|
||||
@@ -130,6 +132,7 @@ class BECProgressTracker(QObject):
|
||||
self.scan_number: int | None = None
|
||||
self._active_scan_id: str | None = None
|
||||
self._active_rid: str | None = None
|
||||
self._last_reset_scan_id: str | None = None
|
||||
|
||||
def start(self) -> None:
|
||||
if self._connected:
|
||||
@@ -137,6 +140,9 @@ class BECProgressTracker(QObject):
|
||||
self.bec_dispatcher.connect_slot(
|
||||
self.process_progress_message, MessageEndpoints.scan_progress()
|
||||
)
|
||||
self.bec_dispatcher.connect_slot(
|
||||
self.process_scan_status_message, MessageEndpoints.scan_status()
|
||||
)
|
||||
self._connected = True
|
||||
|
||||
def _start_task(self, scan_id: str | None, rid: str | None = None) -> None:
|
||||
@@ -183,6 +189,7 @@ class BECProgressTracker(QObject):
|
||||
)
|
||||
)
|
||||
|
||||
@SafeSlot(dict, dict)
|
||||
def process_progress_message(
|
||||
self, msg_content: dict, metadata: dict
|
||||
) -> ProgressSnapshot | None:
|
||||
@@ -235,10 +242,39 @@ class BECProgressTracker(QObject):
|
||||
self.clear_task()
|
||||
return snapshot
|
||||
|
||||
@SafeSlot(dict, dict)
|
||||
def process_scan_status_message(
|
||||
self, msg_content: dict, metadata: dict
|
||||
) -> ProgressSnapshot | None:
|
||||
if msg_content.get("status") != "open":
|
||||
return None
|
||||
scan_id = msg_content.get("scan_id") or metadata.get("scan_id") or metadata.get("RID")
|
||||
if scan_id is None or scan_id == self._last_reset_scan_id:
|
||||
return None
|
||||
|
||||
self.clear_task(emit_finished=False)
|
||||
self._last_reset_scan_id = scan_id
|
||||
self.scan_number = msg_content.get("scan_number")
|
||||
snapshot = ProgressSnapshot(
|
||||
value=0,
|
||||
max_value=100,
|
||||
done=False,
|
||||
status="open",
|
||||
scan_id=scan_id,
|
||||
scan_number=self.scan_number,
|
||||
rid=metadata.get("RID"),
|
||||
is_new_scan=True,
|
||||
)
|
||||
self.progress_updated.emit(snapshot)
|
||||
return snapshot
|
||||
|
||||
def cleanup(self) -> None:
|
||||
self.clear_task(emit_finished=False)
|
||||
if self._connected:
|
||||
self.bec_dispatcher.disconnect_slot(
|
||||
self.process_progress_message, MessageEndpoints.scan_progress()
|
||||
)
|
||||
self.bec_dispatcher.disconnect_slot(
|
||||
self.process_scan_status_message, MessageEndpoints.scan_status()
|
||||
)
|
||||
self._connected = False
|
||||
|
||||
Reference in New Issue
Block a user