From ddd07b48942a9d405de98d8c02460678e7c08288 Mon Sep 17 00:00:00 2001 From: Ziad-I <68874104+Ziad-I@users.noreply.github.com> Date: Sat, 29 Jun 2024 01:51:43 +0300 Subject: [PATCH] refactor web ui operator handling --- .../blenderbim/bim/data/webui/sioserver.py | 2 +- .../bim/data/webui/static/js/index.js | 3 +- src/blenderbim/blenderbim/tool/web.py | 37 +++++++++++-------- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/data/webui/sioserver.py b/src/blenderbim/blenderbim/bim/data/webui/sioserver.py index 6eb24b9486..0dd683e47a 100644 --- a/src/blenderbim/blenderbim/bim/data/webui/sioserver.py +++ b/src/blenderbim/blenderbim/bim/data/webui/sioserver.py @@ -38,7 +38,7 @@ class WebNamespace(socketio.AsyncNamespace): async def on_web_operator(self, sid, data): await sio.emit( "web_operator", - data["operator"], + data, namespace="/blender", room=data["blenderId"], ) diff --git a/src/blenderbim/blenderbim/bim/data/webui/static/js/index.js b/src/blenderbim/blenderbim/bim/data/webui/static/js/index.js index 0af5fb1a77..7b830870ad 100644 --- a/src/blenderbim/blenderbim/bim/data/webui/static/js/index.js +++ b/src/blenderbim/blenderbim/bim/data/webui/static/js/index.js @@ -167,10 +167,11 @@ function addTableElement(blenderId, csvData, filename) { var tableId = row.getTable().element.id.substr(6); const msg = { + sourcePage: "csv", blenderId: tableId, operator: { type: "selection", - GlobalId: index, + globalId: index, }, }; socket.emit("web_operator", msg); diff --git a/src/blenderbim/blenderbim/tool/web.py b/src/blenderbim/blenderbim/tool/web.py index 8bf8384f8c..b7b9bb3aec 100644 --- a/src/blenderbim/blenderbim/tool/web.py +++ b/src/blenderbim/blenderbim/tool/web.py @@ -141,20 +141,29 @@ class Web(blenderbim.core.tool.Web): return None # unregister timer if not connected while not web_operator_queue.empty(): - operator_data = web_operator_queue.get_nowait() - if not operator_data: + operator = web_operator_queue.get_nowait() + if not operator: continue - - if operator_data["type"] == "selection": - bpy.ops.object.select_all(action="DESELECT") - guid = operator_data["GlobalId"] - ele = tool.Ifc.get().by_guid(guid) - obj = tool.Ifc.get_object(ele) - bpy.context.view_layer.objects.active = obj - obj.select_set(True) - + if operator["sourcePage"] == "csv": + cls.handle_csv_operator(operator["operator"]) + elif operator["sourcePage"] == "gantt": + cls.handle_gantt_operator(operator["operator"]) return 1.0 + @classmethod + def handle_csv_operator(cls, operator_data): + if operator_data["type"] == "selection": + bpy.ops.object.select_all(action="DESELECT") + guid = operator_data["globalId"] + ele = tool.Ifc.get().by_guid(guid) + obj = tool.Ifc.get_object(ele) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + + @classmethod + def handle_gantt_operator(cls, operator_data): + pass + @classmethod def open_web_browser(cls, port): webbrowser.open(f"http://127.0.0.1:{port}/") @@ -162,9 +171,7 @@ class Web(blenderbim.core.tool.Web): @classmethod async def sio_connect(cls, url): await sio.connect(url, transports=["websocket"], namespaces="/blender") - - # TODO: register event handlers to handle incoming messages - sio.on("web_operator", cls.sio_handle_web_operator, namespace="/blender") + sio.on("web_operator", cls.sio_listen_web_operator, namespace="/blender") @classmethod async def sio_disconnect(cls): @@ -175,7 +182,7 @@ class Web(blenderbim.core.tool.Web): await sio.emit(event, data, namespace=namespace) @classmethod - async def sio_handle_web_operator(cls, data): + async def sio_listen_web_operator(cls, data): try: web_operator_queue.put_nowait(data) except queue.Full: