FIX: button state when stop/delete and video stream was enabled

This commit is contained in:
Burak Ozter 2024-11-07 13:54:04 -04:00
parent c1484b58ce
commit df5df4b497
2 changed files with 19 additions and 5 deletions

View File

@ -85,6 +85,7 @@ class Robot:
]
self.compose_files = compose_files
self.processes = []
self.video_button = None
robots.add(self)
async def ui_containers(self, element):
@ -142,7 +143,9 @@ class Robot:
ui.label(f"""Sysid: {self.sysid}""")
ui.button("Start", on_click=self.start).classes("m-2")
ui.button("Stop", on_click=self.async_stop).classes("m-2")
EnableStreamingButton(sysid=self.sysid).classes("m-2")
self.video_button = EnableStreamingButton(sysid=self.sysid).classes(
"m-2"
)
async def delete_robot():
await self.async_stop()
@ -164,6 +167,10 @@ class Robot:
return await run.io_bound(self.stop)
def stop(self):
# If video was enabled, and we stop. Button state is wrong.
# Stop video if it is enabled.
if isinstance(self.video_button, EnableStreamingButton):
self.video_button.stop_video()
# Delete gazebo model
self.delete_gz_model(sysid=self.sysid)
# Signal all processes to stop

View File

@ -27,18 +27,25 @@ class EnableStreamingButton(ui.element):
result = await run.cpu_bound(self.enable_streaming, self.sysid, not self._state)
if result:
ui.notify("Success", type="positive]")
self._state = not self._state
self.update()
self.set_state(state=not self._state)
else:
self._state = False
self.update()
self.set_state(state=False)
ui.notify("No Video Streaming Available..", type="negative")
spinner.delete()
def set_state(self, state: bool):
self._state = state
self.update()
def update(self) -> None:
self.button._text = f'{"Disable" if self._state else "Enable"}' + " Video"
self.button.props(f'color={"red" if self._state else "green"}')
def stop_video(self):
if self._state != False:
self.enable_streaming(sysid=self.sysid, is_streaming=False)
self.set_state(state=False)
@staticmethod
def enable_streaming(sysid: int, is_streaming: bool) -> bool: