diff options
| author | Christophe Besson <cbesson@gmail.com> | 2026-08-11 15:39:09 +0200 |
|---|---|---|
| committer | Christophe Besson <cbesson@gmail.com> | 2026-08-11 15:39:09 +0200 |
| commit | 3ee7f817d532208df1d95ecd86def12e5bd53a18 (patch) | |
| tree | 2778dc1a64220e75662b9aceeafe4e8e384cf06b /packages/meshbay-node/src/meshbay_node/transport | |
| parent | cc90dc943fcd0e7bbf52674fb3f95ff097026f4a (diff) | |
| download | meshbay-3ee7f817d532208df1d95ecd86def12e5bd53a18.tar.gz | |
fix(ui): group creation error, chat UUIDs, file preview, action menu
Bug fixes:
- Group creation "[object Object]" error: removed dead pkcs8 import code
that threw before GEK wrapping, added array detail handling in hubFetch
- Chat shows usernames instead of UUIDs (sender_name passed through node)
- Join button: navigate to group on "Already a member" instead of error
UI improvements:
- Loading spinner animation for async states (connecting, fetching)
- File action menu (3-dot dropdown: View, Download, Play)
- Click filename to preview inline (images, text/code files)
- FilePreview overlay for images and text files
- Chat file attachment button (upload to node + structured message)
- Chat attachment display (icon, filename, size)
- Member panel: "Group admin" badge instead of plain "Admin" text
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'packages/meshbay-node/src/meshbay_node/transport')
| -rw-r--r-- | packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py b/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py index 94d9b04..07ceed3 100644 --- a/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py +++ b/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py @@ -266,6 +266,9 @@ class WebRTCPeerSession: def _do_chat_message(self, msg: dict) -> None: chat_store = self._ctx.get("chat_store") payload = msg.get("payload", "") + sender_name = msg.get("sender_name", "") + if sender_name: + self._ctx.setdefault("_user_names", {})[self._user_id] = sender_name if chat_store: raw = payload.encode() if isinstance(payload, str) else payload asyncio.ensure_future(chat_store.save_message( @@ -280,6 +283,7 @@ class WebRTCPeerSession: "type": MNP.CHAT_MESSAGE, "v": MNP_VERSION, "sender_id": msg.get("sender_id", self._user_id), + "sender_name": sender_name, "payload": payload, "thread_id": msg.get("thread_id"), "timestamp": __import__("time").time(), @@ -309,6 +313,7 @@ class WebRTCPeerSession: async def _send_chat_history(self, chat_store, since: float, limit: int) -> None: msgs = await chat_store.get_messages(since=since, limit=limit) + names = self._ctx.get("_user_names", {}) self._send({ "type": MNP.CHAT_HISTORY_RESPONSE, "v": MNP_VERSION, @@ -316,6 +321,7 @@ class WebRTCPeerSession: { "id": m.id, "sender_id": m.sender_id, + "sender_name": names.get(m.sender_id, ""), "payload": m.payload.decode("utf-8", errors="replace") if isinstance(m.payload, bytes) else m.payload, "timestamp": m.timestamp, |