fix outbox
This commit is contained in:
Vendored
+27
-24
@@ -453,7 +453,7 @@
|
|||||||
this.messages = restoreListState(storageKeys.messages(id));
|
this.messages = restoreListState(storageKeys.messages(id));
|
||||||
this.objects = restoreMapState(storageKeys.objects(id));
|
this.objects = restoreMapState(storageKeys.objects(id));
|
||||||
this.outbox = restoreListState(storageKeys.outbox(id));
|
this.outbox = restoreListState(storageKeys.outbox(id));
|
||||||
this.objectOutbox = restoreListState(storageKeys.itemOutbox(id));
|
this.objectOutbox = restoreMapState(storageKeys.itemOutbox(id));
|
||||||
this.isOutBoxEmpty = createProxyState(
|
this.isOutBoxEmpty = createProxyState(
|
||||||
[this.outbox],
|
[this.outbox],
|
||||||
() => this.outbox.value.size == 0
|
() => this.outbox.value.size == 0
|
||||||
@@ -556,31 +556,20 @@
|
|||||||
};
|
};
|
||||||
sendMessageFromText = async (text) => {
|
sendMessageFromText = async (text) => {
|
||||||
const chatMessage = await this.createChatMessage(text);
|
const chatMessage = await this.createChatMessage(text);
|
||||||
this.sendMessage(chatMessage);
|
this.outbox.add(chatMessage);
|
||||||
|
this.sendMessagesInOutbox();
|
||||||
};
|
};
|
||||||
resendMessage = (chatMessage) => {
|
resendMessage = (chatMessage) => {
|
||||||
if (this.cannotResendMessage.value == true) return;
|
if (this.cannotResendMessage.value == true) return;
|
||||||
this.sendMessageFromText(chatMessage.body);
|
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 = () => {
|
sendMessagesInOutbox = () => {
|
||||||
this.outbox.value.forEach((message) => {
|
this.outbox.value.forEach((message) => {
|
||||||
this.sendMessage(message);
|
this.sendMessage(message);
|
||||||
this.outbox.remove(message);
|
|
||||||
});
|
});
|
||||||
this.objectOutbox.value.forEach((message) => {
|
this.objectOutbox.value.forEach(async (object) => {
|
||||||
this.sendMessage(message);
|
const chatMessage = await this.createChatMessage("", object);
|
||||||
this.objectOutbox.remove(message);
|
this.sendMessage(chatMessage);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
clearMessages = () => {
|
clearMessages = () => {
|
||||||
@@ -593,14 +582,28 @@
|
|||||||
this.outbox.remove(chatMessage);
|
this.outbox.remove(chatMessage);
|
||||||
};
|
};
|
||||||
decryptReceivedMessage = async (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();
|
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
|
// objects
|
||||||
async createObject(object) {
|
async addObjectAndSend(object) {
|
||||||
this.objects.set(object.id, object);
|
this.objects.set(object.id, object);
|
||||||
const chatMessage = await this.createChatMessage("", object);
|
await this.sendObject(object);
|
||||||
this.sendMessage(chatMessage);
|
}
|
||||||
|
async sendObject(object) {
|
||||||
|
this.objectOutbox.set(object.id, object);
|
||||||
|
this.sendMessagesInOutbox();
|
||||||
}
|
}
|
||||||
// channel
|
// channel
|
||||||
setChannel = () => {
|
setChannel = () => {
|
||||||
@@ -1126,7 +1129,7 @@
|
|||||||
}
|
}
|
||||||
function saveAndClose() {
|
function saveAndClose() {
|
||||||
object.title = editingTitle.value;
|
object.title = editingTitle.value;
|
||||||
chat.objects.set(object.id, object);
|
chat.addObjectAndSend(object);
|
||||||
closeModal();
|
closeModal();
|
||||||
}
|
}
|
||||||
function deleteAndClose() {
|
function deleteAndClose() {
|
||||||
@@ -1152,7 +1155,7 @@
|
|||||||
return ItemDetailModal(chat, selectedObject.value, isShowingObjectModal);
|
return ItemDetailModal(chat, selectedObject.value, isShowingObjectModal);
|
||||||
});
|
});
|
||||||
function createItem() {
|
function createItem() {
|
||||||
chat.createObject({
|
chat.addObjectAndSend({
|
||||||
id: UUID(),
|
id: UUID(),
|
||||||
title: "new item"
|
title: "new item"
|
||||||
});
|
});
|
||||||
@@ -1164,7 +1167,7 @@
|
|||||||
}
|
}
|
||||||
return /* @__PURE__ */ createElement("button", { "on:click": select }, object.title);
|
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
|
// src/Views/Chat/messageComposer.tsx
|
||||||
|
|||||||
+40
-30
@@ -44,7 +44,7 @@ export class Chat {
|
|||||||
messages: React.ListState<ChatMessage>;
|
messages: React.ListState<ChatMessage>;
|
||||||
objects: React.MapState<MessageObject>;
|
objects: React.MapState<MessageObject>;
|
||||||
outbox: React.ListState<ChatMessage>;
|
outbox: React.ListState<ChatMessage>;
|
||||||
objectOutbox: React.ListState<ChatMessage>;
|
objectOutbox: React.MapState<MessageObject>;
|
||||||
isOutBoxEmpty: React.State<boolean>;
|
isOutBoxEmpty: React.State<boolean>;
|
||||||
|
|
||||||
composingMessage: React.State<string>;
|
composingMessage: React.State<string>;
|
||||||
@@ -80,7 +80,7 @@ export class Chat {
|
|||||||
this.messages = React.restoreListState(storageKeys.messages(id));
|
this.messages = React.restoreListState(storageKeys.messages(id));
|
||||||
this.objects = React.restoreMapState(storageKeys.objects(id));
|
this.objects = React.restoreMapState(storageKeys.objects(id));
|
||||||
this.outbox = React.restoreListState(storageKeys.outbox(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.isOutBoxEmpty = React.createProxyState(
|
||||||
[this.outbox],
|
[this.outbox],
|
||||||
() => this.outbox.value.size == 0
|
() => this.outbox.value.size == 0
|
||||||
@@ -214,7 +214,8 @@ export class Chat {
|
|||||||
|
|
||||||
sendMessageFromText = async (text: string): Promise<void> => {
|
sendMessageFromText = async (text: string): Promise<void> => {
|
||||||
const chatMessage = await this.createChatMessage(text);
|
const chatMessage = await this.createChatMessage(text);
|
||||||
this.sendMessage(chatMessage);
|
this.outbox.add(chatMessage);
|
||||||
|
this.sendMessagesInOutbox();
|
||||||
};
|
};
|
||||||
|
|
||||||
resendMessage = (chatMessage: ChatMessage) => {
|
resendMessage = (chatMessage: ChatMessage) => {
|
||||||
@@ -222,31 +223,13 @@ export class Chat {
|
|||||||
this.sendMessageFromText(chatMessage.body);
|
this.sendMessageFromText(chatMessage.body);
|
||||||
};
|
};
|
||||||
|
|
||||||
sendMessage = async (chatMessage: ChatMessage): Promise<void> => {
|
|
||||||
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 = () => {
|
sendMessagesInOutbox = () => {
|
||||||
this.outbox.value.forEach((message) => {
|
this.outbox.value.forEach((message) => {
|
||||||
this.sendMessage(message);
|
this.sendMessage(message);
|
||||||
this.outbox.remove(message);
|
|
||||||
});
|
});
|
||||||
this.objectOutbox.value.forEach((message) => {
|
this.objectOutbox.value.forEach(async (object) => {
|
||||||
this.sendMessage(message);
|
const chatMessage = await this.createChatMessage("", object);
|
||||||
this.objectOutbox.remove(message);
|
this.sendMessage(chatMessage);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -263,16 +246,43 @@ export class Chat {
|
|||||||
};
|
};
|
||||||
|
|
||||||
decryptReceivedMessage = async (chatMessage: ChatMessage): Promise<void> => {
|
decryptReceivedMessage = async (chatMessage: ChatMessage): Promise<void> => {
|
||||||
chatMessage.body = await decryptString(chatMessage.body, this.encryptionKey.value);
|
chatMessage.body = await decryptString(
|
||||||
|
chatMessage.body,
|
||||||
|
this.encryptionKey.value
|
||||||
|
);
|
||||||
this.messages.callSubscriptions();
|
this.messages.callSubscriptions();
|
||||||
};
|
};
|
||||||
|
|
||||||
// objects
|
sendMessage = async (chatMessage: ChatMessage): Promise<void> => {
|
||||||
async createObject(object: MessageObject): Promise<void> {
|
if (isConnected.value == false || this.isSubscribed.value == false) return;
|
||||||
this.objects.set(object.id, object);
|
|
||||||
|
|
||||||
const chatMessage = await this.createChatMessage("", object);
|
const encryptedBody =
|
||||||
this.sendMessage(chatMessage);
|
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
|
// channel
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ export function ChatToolView(chat: Chat) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
function createItem() {
|
function createItem() {
|
||||||
chat.createObject({
|
chat.addObjectAndSend({
|
||||||
id: React.UUID(),
|
id: React.UUID(),
|
||||||
title: "new item",
|
title: "new item",
|
||||||
});
|
});
|
||||||
@@ -35,7 +35,7 @@ export function ChatToolView(chat: Chat) {
|
|||||||
<div class="chat-tool-view">
|
<div class="chat-tool-view">
|
||||||
<button on:click={createItem}>+</button>
|
<button on:click={createItem}>+</button>
|
||||||
<hr></hr>
|
<hr></hr>
|
||||||
<div children:append={[chat.objects, itemConverter]}></div>
|
<div children:prepend={[chat.objects, itemConverter]}></div>
|
||||||
|
|
||||||
<div children:set={objectModal}></div>
|
<div children:set={objectModal}></div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -15,7 +15,8 @@ export function ItemDetailModal(
|
|||||||
|
|
||||||
function saveAndClose() {
|
function saveAndClose() {
|
||||||
object.title = editingTitle.value;
|
object.title = editingTitle.value;
|
||||||
chat.objects.set(object.id, object);
|
|
||||||
|
chat.addObjectAndSend(object);
|
||||||
closeModal();
|
closeModal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user