From fbed8f8780c26374ee765460b6a4aaefc1864da8 Mon Sep 17 00:00:00 2001 From: marlon-erler Date: Thu, 11 Jul 2024 02:09:44 +0200 Subject: [PATCH] fix outbox --- dist/index.js | 51 ++++++++++++---------- src/Model/chatModel.ts | 70 +++++++++++++++++------------- src/Views/Chat/chatToolView.tsx | 4 +- src/Views/Chat/itemDetailModal.tsx | 3 +- 4 files changed, 71 insertions(+), 57 deletions(-) diff --git a/dist/index.js b/dist/index.js index 9ecd69b0..e035d128 100644 --- a/dist/index.js +++ b/dist/index.js @@ -453,7 +453,7 @@ this.messages = restoreListState(storageKeys.messages(id)); this.objects = restoreMapState(storageKeys.objects(id)); this.outbox = restoreListState(storageKeys.outbox(id)); - this.objectOutbox = restoreListState(storageKeys.itemOutbox(id)); + this.objectOutbox = restoreMapState(storageKeys.itemOutbox(id)); this.isOutBoxEmpty = createProxyState( [this.outbox], () => this.outbox.value.size == 0 @@ -556,31 +556,20 @@ }; sendMessageFromText = async (text) => { const chatMessage = await this.createChatMessage(text); - this.sendMessage(chatMessage); + this.outbox.add(chatMessage); + this.sendMessagesInOutbox(); }; resendMessage = (chatMessage) => { if (this.cannotResendMessage.value == true) return; this.sendMessageFromText(chatMessage.body); }; - sendMessage = async (chatMessage) => { - if (isConnected.value == true && this.isSubscribed.value == true) { - const encrypted = this.encryptionKey.value == "" ? chatMessage.body : await encryptString(chatMessage.body, this.encryptionKey.value); - chatMessage.body = encrypted; - const messageString = JSON.stringify(chatMessage); - UDN.sendMessage(chatMessage.channel, messageString); - } else { - if (chatMessage.messageObject) return this.objectOutbox.add(chatMessage); - this.outbox.add(chatMessage); - } - }; sendMessagesInOutbox = () => { this.outbox.value.forEach((message) => { this.sendMessage(message); - this.outbox.remove(message); }); - this.objectOutbox.value.forEach((message) => { - this.sendMessage(message); - this.objectOutbox.remove(message); + this.objectOutbox.value.forEach(async (object) => { + const chatMessage = await this.createChatMessage("", object); + this.sendMessage(chatMessage); }); }; clearMessages = () => { @@ -593,14 +582,28 @@ this.outbox.remove(chatMessage); }; decryptReceivedMessage = async (chatMessage) => { - chatMessage.body = await decryptString(chatMessage.body, this.encryptionKey.value); + chatMessage.body = await decryptString( + chatMessage.body, + this.encryptionKey.value + ); this.messages.callSubscriptions(); }; + sendMessage = async (chatMessage) => { + if (isConnected.value == false || this.isSubscribed.value == false) return; + const encryptedBody = this.encryptionKey.value == "" ? chatMessage.body : await encryptString(chatMessage.body, this.encryptionKey.value); + chatMessage.body = encryptedBody; + const messageString = JSON.stringify(chatMessage); + UDN.sendMessage(chatMessage.channel, messageString); + this.outbox.remove(chatMessage); + }; // objects - async createObject(object) { + async addObjectAndSend(object) { this.objects.set(object.id, object); - const chatMessage = await this.createChatMessage("", object); - this.sendMessage(chatMessage); + await this.sendObject(object); + } + async sendObject(object) { + this.objectOutbox.set(object.id, object); + this.sendMessagesInOutbox(); } // channel setChannel = () => { @@ -1126,7 +1129,7 @@ } function saveAndClose() { object.title = editingTitle.value; - chat.objects.set(object.id, object); + chat.addObjectAndSend(object); closeModal(); } function deleteAndClose() { @@ -1152,7 +1155,7 @@ return ItemDetailModal(chat, selectedObject.value, isShowingObjectModal); }); function createItem() { - chat.createObject({ + chat.addObjectAndSend({ id: UUID(), title: "new item" }); @@ -1164,7 +1167,7 @@ } return /* @__PURE__ */ createElement("button", { "on:click": select }, object.title); }; - return /* @__PURE__ */ createElement("div", { class: "chat-tool-view" }, /* @__PURE__ */ createElement("button", { "on:click": createItem }, "+"), /* @__PURE__ */ createElement("hr", null), /* @__PURE__ */ createElement("div", { "children:append": [chat.objects, itemConverter] }), /* @__PURE__ */ createElement("div", { "children:set": objectModal })); + return /* @__PURE__ */ createElement("div", { class: "chat-tool-view" }, /* @__PURE__ */ createElement("button", { "on:click": createItem }, "+"), /* @__PURE__ */ createElement("hr", null), /* @__PURE__ */ createElement("div", { "children:prepend": [chat.objects, itemConverter] }), /* @__PURE__ */ createElement("div", { "children:set": objectModal })); } // src/Views/Chat/messageComposer.tsx diff --git a/src/Model/chatModel.ts b/src/Model/chatModel.ts index 4165a5ba..2a8e3d28 100644 --- a/src/Model/chatModel.ts +++ b/src/Model/chatModel.ts @@ -44,7 +44,7 @@ export class Chat { messages: React.ListState; objects: React.MapState; outbox: React.ListState; - objectOutbox: React.ListState; + objectOutbox: React.MapState; isOutBoxEmpty: React.State; composingMessage: React.State; @@ -80,7 +80,7 @@ export class Chat { this.messages = React.restoreListState(storageKeys.messages(id)); this.objects = React.restoreMapState(storageKeys.objects(id)); this.outbox = React.restoreListState(storageKeys.outbox(id)); - this.objectOutbox = React.restoreListState(storageKeys.itemOutbox(id)); + this.objectOutbox = React.restoreMapState(storageKeys.itemOutbox(id)); this.isOutBoxEmpty = React.createProxyState( [this.outbox], () => this.outbox.value.size == 0 @@ -214,7 +214,8 @@ export class Chat { sendMessageFromText = async (text: string): Promise => { const chatMessage = await this.createChatMessage(text); - this.sendMessage(chatMessage); + this.outbox.add(chatMessage); + this.sendMessagesInOutbox(); }; resendMessage = (chatMessage: ChatMessage) => { @@ -222,31 +223,13 @@ export class Chat { this.sendMessageFromText(chatMessage.body); }; - sendMessage = async (chatMessage: ChatMessage): Promise => { - if (isConnected.value == true && this.isSubscribed.value == true) { - const encrypted = - this.encryptionKey.value == "" - ? chatMessage.body - : await encryptString(chatMessage.body, this.encryptionKey.value); - - chatMessage.body = encrypted; - - const messageString = JSON.stringify(chatMessage); - UDN.sendMessage(chatMessage.channel, messageString); - } else { - if (chatMessage.messageObject) return this.objectOutbox.add(chatMessage); - this.outbox.add(chatMessage); - } - }; - sendMessagesInOutbox = () => { this.outbox.value.forEach((message) => { this.sendMessage(message); - this.outbox.remove(message); }); - this.objectOutbox.value.forEach((message) => { - this.sendMessage(message); - this.objectOutbox.remove(message); + this.objectOutbox.value.forEach(async (object) => { + const chatMessage = await this.createChatMessage("", object); + this.sendMessage(chatMessage); }); }; @@ -263,16 +246,43 @@ export class Chat { }; decryptReceivedMessage = async (chatMessage: ChatMessage): Promise => { - chatMessage.body = await decryptString(chatMessage.body, this.encryptionKey.value); + chatMessage.body = await decryptString( + chatMessage.body, + this.encryptionKey.value + ); this.messages.callSubscriptions(); }; - // objects - async createObject(object: MessageObject): Promise { - this.objects.set(object.id, object); + sendMessage = async (chatMessage: ChatMessage): Promise => { + if (isConnected.value == false || this.isSubscribed.value == false) return; - const chatMessage = await this.createChatMessage("", object); - this.sendMessage(chatMessage); + const encryptedBody = + this.encryptionKey.value == "" + ? chatMessage.body + : await encryptString(chatMessage.body, this.encryptionKey.value); + + chatMessage.body = encryptedBody; + + const messageString = JSON.stringify(chatMessage); + UDN.sendMessage(chatMessage.channel, messageString); + + this.outbox.remove(chatMessage); + }; + + // objects + addObjectAndSend(object: MessageObject): void { + this.objects.set(object.id, object); + this.sendObject(object); + } + + sendObject(object: MessageObject): void { + this.objectOutbox.set(object.id, object); + this.sendMessagesInOutbox(); + } + + deleteObject(object: MessageObject): void { + this.objects.remove(object.id); + this.objectOutbox.remove(object.id); } // channel diff --git a/src/Views/Chat/chatToolView.tsx b/src/Views/Chat/chatToolView.tsx index 3a13d9bd..0313e7f6 100644 --- a/src/Views/Chat/chatToolView.tsx +++ b/src/Views/Chat/chatToolView.tsx @@ -16,7 +16,7 @@ export function ChatToolView(chat: Chat) { }); function createItem() { - chat.createObject({ + chat.addObjectAndSend({ id: React.UUID(), title: "new item", }); @@ -35,7 +35,7 @@ export function ChatToolView(chat: Chat) {

-
+
diff --git a/src/Views/Chat/itemDetailModal.tsx b/src/Views/Chat/itemDetailModal.tsx index 5def83f9..66b9bd4e 100644 --- a/src/Views/Chat/itemDetailModal.tsx +++ b/src/Views/Chat/itemDetailModal.tsx @@ -15,7 +15,8 @@ export function ItemDetailModal( function saveAndClose() { object.title = editingTitle.value; - chat.objects.set(object.id, object); + + chat.addObjectAndSend(object); closeModal(); }