Skip to content

Commit

Permalink
Add handling for GUI pages made available after client connection and…
Browse files Browse the repository at this point in the history
… ready event
  • Loading branch information
NeonDaniel committed Jul 7, 2023
1 parent 9786ca5 commit f2845da
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 5 deletions.
36 changes: 31 additions & 5 deletions ovos_gui/namespace.py
Original file line number Diff line number Diff line change
Expand Up @@ -455,6 +455,7 @@ def __init__(self, core_bus: MessageBusClient):
self._ready_event = Event()
self.gui_file_server = None
self.gui_file_path = None
self._connected_frameworks: List[str] = list()
self._init_gui_server()
self._define_message_handlers()

Expand Down Expand Up @@ -488,10 +489,30 @@ def _define_message_handlers(self):
self.core_bus.on("mycroft.gui.connected", self.handle_client_connected)
self.core_bus.on("gui.page_interaction", self.handle_page_interaction)
self.core_bus.on("gui.page_gained_focus", self.handle_page_gained_focus)
self.core_bus.on("mycroft.ready", self.handle_ready)
self.core_bus.on("mycroft.skills.trained", self.handle_ready)

def handle_ready(self, message):
self._ready_event.set()
self.core_bus.on("gui.volunteer_page_upload",
self.handle_gui_pages_available)

def handle_gui_pages_available(self, message: Message):
"""
Handle a skill or plugin advertising that it has GUI pages available to
upload. If there are connected clients, request pages for each connected
GUI framework.
@param message: `gui.volunteer_page_upload` message
"""
if not self.gui_file_path:
LOG.debug("No GUI file server running")
return

for framework in self._connected_frameworks:
self.core_bus.emit(message.reply("gui.request_page_upload",
{'framework': framework},
{"source": "gui",
"destination": ["skills",
"PHAL"]}))

def handle_receive_gui_pages(self, message: Message):
"""
Expand Down Expand Up @@ -886,13 +907,18 @@ def handle_client_connected(self, message: Message):
message = message.forward("mycroft.gui.port",
dict(port=port, gui_id=gui_id))
self.core_bus.emit(message)

if self.gui_file_path:
if not self._ready_event.wait(90):
LOG.warning("Not reported ready after 90s")
self.core_bus.emit(Message("gui.request_page_upload",
{'framework': framework},
{"source": "gui",
"destination": ["skills", "PHAL"]}))
if framework not in self._connected_frameworks:
self.core_bus.emit(Message("gui.request_page_upload",
{'framework': framework},
{"source": "gui",
"destination": ["skills", "PHAL"]}))

if framework not in self._connected_frameworks:
self._connected_frameworks.append(framework)

def handle_page_interaction(self, message: Message):
"""
Expand Down
13 changes: 13 additions & 0 deletions test/unittests/test_namespace.py
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,19 @@ def test_init_gui_server(self):
# TODO
pass

def test_handle_ready(self):
self.assertEqual(len(self.namespace_manager.core_bus.ee.
listeners("gui.volunteer_page_upload")), 0)
self.assertFalse(self.namespace_manager._ready_event.is_set())
self.namespace_manager.handle_ready(Message(""))
self.assertTrue(self.namespace_manager._ready_event.wait(0.01))
self.assertEqual(len(self.namespace_manager.core_bus.ee.
listeners("gui.volunteer_page_upload")), 1)

def test_handle_gui_pages_available(self):
# TODO
pass

def test_handle_receive_gui_pages(self):
# TODO
pass
Expand Down

0 comments on commit f2845da

Please sign in to comment.