From 6b9c13fb3c8288ebae5905e95355d44e4308a789 Mon Sep 17 00:00:00 2001 From: Daniel McKnight Date: Fri, 7 Jul 2023 14:16:05 -0700 Subject: [PATCH 1/4] Announce when GUI files are available on GUIInterface init Replaces https://github.com/OpenVoiceOS/OVOS-workshop/pull/109 --- ovos_utils/gui.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ovos_utils/gui.py b/ovos_utils/gui.py index 9e484753..5a6612c2 100644 --- a/ovos_utils/gui.py +++ b/ovos_utils/gui.py @@ -556,6 +556,11 @@ def __init__(self, skill_id: str, bus=None, if bus: self.set_bus(bus) + if self.ui_directories: + self.bus.emit(Message("gui.volunteer_page_upload", + {'skill_id': skill_id}, + {'source': skill_id, "destination": ["gui"]})) + @property def remote_url(self) -> Optional[str]: """Returns configuration value for url of remote-server.""" From 4a9d200568ddcdf3220fdb240c5a5a8a64e3e496 Mon Sep 17 00:00:00 2001 From: Daniel McKnight Date: Fri, 7 Jul 2023 14:23:53 -0700 Subject: [PATCH 2/4] Prevent handling upload requests for other skills --- ovos_utils/gui.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ovos_utils/gui.py b/ovos_utils/gui.py index 5a6612c2..162403f9 100644 --- a/ovos_utils/gui.py +++ b/ovos_utils/gui.py @@ -647,6 +647,12 @@ def upload_gui_pages(self, message: Message): if not self.ui_directories: LOG.debug("No UI resources to upload") return + + requested_skill = message.data.get("skill_id") or self._skill_id + if requested_skill != self._skill_id: + # GUI requesting a specific skill to upload other than this one + return + request_res_type = message.data.get("framework") or "all" if "all" in \ self.ui_directories else "qt5" # Note that ui_directory "all" is a special case that will upload all From 3f5929d6710e65714fdd216ccb7f40710efe0444 Mon Sep 17 00:00:00 2001 From: Daniel McKnight Date: Fri, 7 Jul 2023 14:36:27 -0700 Subject: [PATCH 3/4] Add unit tests for new upload logic --- test/unittests/test_gui.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/test/unittests/test_gui.py b/test/unittests/test_gui.py index fc384d02..781cb907 100644 --- a/test/unittests/test_gui.py +++ b/test/unittests/test_gui.py @@ -100,6 +100,10 @@ class TestGuiInterface(unittest.TestCase): ui_base_dir = join(dirname(__file__), "test_ui") ui_dirs = {'qt5': join(ui_base_dir, 'ui')} iface_name = "test_interface" + + volunteered_upload = Mock() + bus.on('gui.volunteer_page_upload', volunteered_upload) + interface = GUIInterface(iface_name, bus, None, config, ui_dirs) def test_00_gui_interface_init(self): @@ -111,6 +115,9 @@ def test_00_gui_interface_init(self): self.assertEqual(self.interface.skill_id, self.iface_name) self.assertIsNone(self.interface.page) self.assertIsInstance(self.interface.connected, bool) + self.volunteered_upload.assert_called_once() + upload_message = self.volunteered_upload.call_args[0][0] + self.assertEqual(upload_message.data["skill_id"], self.iface_name) def test_build_message_type(self): name = "test" @@ -138,7 +145,7 @@ def on_pages(message): # Upload default/legacy behavior (qt5 `ui` dir) message = Message('test', {}, {'context': "Test"}) self.interface.upload_gui_pages(message) - self.assertTrue(handled.wait(10)) + self.assertTrue(handled.wait(2)) self.assertEqual(msg.context['context'], message.context['context']) self.assertEqual(msg.msg_type, "gui.page.upload") @@ -164,7 +171,7 @@ def on_pages(message): 'test_ui', 'gui') message = Message('test', {"framework": "all"}, {'context': "All"}) self.interface.upload_gui_pages(message) - self.assertTrue(handled.wait(10)) + self.assertTrue(handled.wait(2)) self.assertEqual(msg.context['context'], message.context['context']) self.assertEqual(msg.msg_type, "gui.page.upload") @@ -181,6 +188,13 @@ def on_pages(message): self.assertEqual(bytes.fromhex(pages.get("qt6/test.qml")), b"qt6", pages) + # Upload requested other skill + handled.clear() + message = Message('test', {"framework": "all", + "skill_id": "other_skill"}) + self.interface.upload_gui_pages(message) + self.assertFalse(handled.wait(2)) + def test_register_handler(self): # TODO pass From 1993804ce078ed3eccdd3c1070d4836c4b3ffc98 Mon Sep 17 00:00:00 2001 From: Daniel McKnight Date: Fri, 7 Jul 2023 14:40:11 -0700 Subject: [PATCH 4/4] Add test for GUIInterface init with no UI directories --- test/unittests/test_gui.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/unittests/test_gui.py b/test/unittests/test_gui.py index 781cb907..a10df316 100644 --- a/test/unittests/test_gui.py +++ b/test/unittests/test_gui.py @@ -119,6 +119,10 @@ def test_00_gui_interface_init(self): upload_message = self.volunteered_upload.call_args[0][0] self.assertEqual(upload_message.data["skill_id"], self.iface_name) + # Test GUI init with no ui directories + self.GUIInterface("no_ui_dirs_gui", self.bus, None, self.config) + self.volunteered_upload.assert_called_once_with(upload_message) + def test_build_message_type(self): name = "test" self.assertEqual(self.interface.build_message_type(name),