diff --git a/backend/routes/messaging.py b/backend/routes/messaging.py index 79a3ef3..2868f59 100644 --- a/backend/routes/messaging.py +++ b/backend/routes/messaging.py @@ -304,7 +304,8 @@ class MessaggingSocketManager: db.add(env) db.commit() db.refresh(env) - await self.send_to_user(env.recipient_id, { + + payload = { "type": "dmNew", "data": { "id": env.id, @@ -317,8 +318,11 @@ class MessaggingSocketManager: "wrappedMk": env.wrapped_mk_b64, "timestamp": env.timestamp.isoformat(), } - }) - await websocket.send_json({"type": type, "data": {"status": "ok", "id": env.id}}) + } + + await self.send_to_user(env.recipient_id, payload); + await websocket.send_json({"type": type, "data": {"status": "ok", "id": env.id}}); + await self.send_to_user(env.sender_id, payload); except HTTPException as e: await self.send_error(websocket, type, e) elif type == "editMessage": diff --git a/frontend/src/ui/panels/DMPanel.ts b/frontend/src/ui/panels/DMPanel.ts index c9cb255..434da14 100644 --- a/frontend/src/ui/panels/DMPanel.ts +++ b/frontend/src/ui/panels/DMPanel.ts @@ -130,7 +130,7 @@ export class DMPanel extends MessagePanel { this.addMessage({ id: envelope.id, content: plaintext, - username: isAuthor ? "You" : this.dmData.username, + username: isAuthor ? this.currentUser.currentUser?.username ?? "You" : this.dmData.username, timestamp: envelope.timestamp, is_read: false, is_edited: false diff --git a/frontend/src/ui/state.ts b/frontend/src/ui/state.ts index 696115e..1ef2486 100644 --- a/frontend/src/ui/state.ts +++ b/frontend/src/ui/state.ts @@ -1,6 +1,6 @@ import { create } from "zustand"; import type { Message, User, WebSocketMessage } from "../core/types"; -import { request, reconnectWebSocket } from "../websocket"; +import { request } from "../websocket"; import { MessagePanel } from "./panels/MessagePanel"; import { PublicChatPanel } from "./panels/PublicChatPanel"; import { DMPanel, type DMPanelData } from "./panels/DMPanel"; @@ -151,9 +151,6 @@ export const useAppState = create((set, get) => ({ } })); - // Reconnect WebSocket with new auth token - reconnectWebSocket(); - try { const payload: WebSocketMessage = { type: "ping", diff --git a/frontend/src/websocket.ts b/frontend/src/websocket.ts index 607bbe4..a6f0900 100644 --- a/frontend/src/websocket.ts +++ b/frontend/src/websocket.ts @@ -44,16 +44,26 @@ export function setGlobalMessageHandler(handler: ((response: WebSocketMessage) = } export function request(payload: WebSocketMessage): Promise { + console.log("WebSocket request:", payload); return new Promise((resolve, reject) => { - let listener: ((e: MessageEvent) => void) | null = null; - listener = (e) => { - resolve(JSON.parse(e.data)); - websocket.removeEventListener("message", listener!); - } - websocket.addEventListener("message", listener); - websocket.send(JSON.stringify(payload)) + function requestInner() { + let listener: ((e: MessageEvent) => void) | null = null; + listener = (e) => { + resolve(JSON.parse(e.data)); + websocket.removeEventListener("message", listener!); + } + websocket.addEventListener("message", listener); + websocket.send(JSON.stringify(payload)) - setTimeout(() => reject("Request timed out"), 10000); + setTimeout(() => reject("Request timed out"), 10000); + } + + if (websocket.readyState == 0) { + websocket.addEventListener("open", requestInner); + setTimeout(() => reject("Request timed out"), 10000); + } else { + requestInner(); + } }) } @@ -79,14 +89,6 @@ async function onError() { websocket.addEventListener("error", onError); } -/** - * Recreate WebSocket connection (useful when user logs in) - */ -export function reconnectWebSocket(): void { - websocket = create(); - websocket.addEventListener("error", onError); -} - // -------------- // Initialization // --------------