This commit is contained in:
2025-09-06 12:05:27 +03:00
Unverified
parent 7a9feda991
commit 7429289dc6
4 changed files with 27 additions and 24 deletions
+7 -3
View File
@@ -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":
+1 -1
View File
@@ -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
+1 -4
View File
@@ -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<AppState>((set, get) => ({
}
}));
// Reconnect WebSocket with new auth token
reconnectWebSocket();
try {
const payload: WebSocketMessage = {
type: "ping",
+18 -16
View File
@@ -44,16 +44,26 @@ export function setGlobalMessageHandler(handler: ((response: WebSocketMessage) =
}
export function request(payload: WebSocketMessage): Promise<WebSocketMessage> {
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
// --------------