From 839e6e6b2a7a0e8b2afdcfc3f19181f772f1a04f Mon Sep 17 00:00:00 2001 From: marlon-erler Date: Mon, 22 Jul 2024 02:23:21 +0200 Subject: [PATCH] cleanup --- src/Model/Chat/chatListModel.ts | 34 +++---- src/Model/Chat/chatModel.ts | 143 ++++++++++++++-------------- src/Model/Global/connectionModel.ts | 31 +++--- src/Model/Global/settingsModel.ts | 1 + src/Model/Global/storageModel.ts | 2 +- 5 files changed, 106 insertions(+), 105 deletions(-) diff --git a/src/Model/Chat/chatListModel.ts b/src/Model/Chat/chatListModel.ts index 4364f0b2..ca6803a4 100644 --- a/src/Model/Chat/chatListModel.ts +++ b/src/Model/Chat/chatListModel.ts @@ -33,7 +33,23 @@ export default class ChatListModel { } }; - // store & add + // sorting + updateIndices = () => { + this.sortedPrimaryChannels = []; + + let allChannels: string[] = []; + for (const chatModel of this.chatModels) { + allChannels.push(chatModel.info.primaryChannel); + } + + this.sortedPrimaryChannels = allChannels.sort(localeCompare); + }; + + getIndexOfPrimaryChannel(primaryChannel: string): number { + return this.sortedPrimaryChannels.indexOf(primaryChannel); + } + + // storage addChatModel = (chatModel: ChatModel) => { this.chatModels.add(chatModel); this.updateIndices(); @@ -60,22 +76,6 @@ export default class ChatListModel { this.updateIndices(); }; - // sorting - updateIndices = () => { - this.sortedPrimaryChannels = []; - - let allChannels: string[] = []; - for (const chatModel of this.chatModels) { - allChannels.push(chatModel.info.primaryChannel); - } - - this.sortedPrimaryChannels = allChannels.sort(localeCompare); - }; - - getIndexOfPrimaryChannel(primaryChannel: string): number { - return this.sortedPrimaryChannels.indexOf(primaryChannel); - } - // load loadChats = (): void => { const chatDir = storageKeys.chats; diff --git a/src/Model/Chat/chatModel.ts b/src/Model/Chat/chatModel.ts index e2fd914c..9924f776 100644 --- a/src/Model/Chat/chatModel.ts +++ b/src/Model/Chat/chatModel.ts @@ -31,13 +31,6 @@ export default class ChatModel { chatMessageHandler: (chatMessage: ChatMessage) => void = () => {}; - // sorting - get index(): number { - return this.chatListModel.getIndexOfPrimaryChannel( - this.info.primaryChannel - ); - } - // paths get infoPath(): string[] { return storageKeys.chatInfo(this.id); @@ -55,7 +48,14 @@ export default class ChatModel { return [...this.messageDirPath, id]; }; - // set + // sorting + get index(): number { + return this.chatListModel.getIndexOfPrimaryChannel( + this.info.primaryChannel + ); + } + + // settings setPrimaryChannel = (primaryChannel: string): void => { this.info.primaryChannel = primaryChannel; this.storeInfo(); @@ -78,7 +78,69 @@ export default class ChatModel { this.storeColor(); }; - // store & add +// messaging +sendMessage = async (body: string, file?: File): Promise => { + const senderName = this.settingsModel.username; + if (senderName == "") return false; + + const allChannels = [this.info.primaryChannel]; + for (const secondaryChannel of this.info.secondaryChannels) { + allChannels.push(secondaryChannel); + } + + const combinedChannel: string = allChannels.join("/"); + + const chatMessage: ChatMessage = await ChatModel.createChatMessage( + combinedChannel, + senderName, + this.info.encryptionKey, + body, + file + ); + + this.addMessage(chatMessage); + this.connectionModel.sendMessageOrStore(chatMessage); + return true; +}; + +handleMessage = (body: string): void => { + const chatMessage: ChatMessage | null = parseValidObject( + body, + ChatMessageReference + ); + if (chatMessage == null) return; + + chatMessage.status = ChatMessageStatus.Received; + this.addMessage(chatMessage); +}; + +handleMessageSent = (chatMessage: ChatMessage): void => { + chatMessage.status = ChatMessageStatus.Sent; + this.addMessage(chatMessage); +}; + +decryptMessage = async (chatMessage: ChatMessage): Promise => { + const decryptedBody: string = await decryptString( + chatMessage.body, + this.info.encryptionKey + ); + const decryptedFile: string = await decryptString( + chatMessage.stringifiedFile ?? "", + this.info.encryptionKey + ); + chatMessage.body = decryptedBody; + chatMessage.stringifiedFile = decryptedFile; +}; + +setMessageHandler = (handler: (chatMessage: ChatMessage) => void): void => { + this.chatMessageHandler = handler; +}; + +subscribe = (): void => { + this.connectionModel.addChannel(this.info.primaryChannel); +}; + + // storage storeInfo = (): void => { this.storageModel.writeStringifiable(this.infoPath, this.info); }; @@ -101,7 +163,6 @@ export default class ChatModel { this.fileModel.handleStringifiedFile(chatMessage.stringifiedFile); }; - // delete delete = () => { // untrack this.chatListModel.untrackChat(this); @@ -153,68 +214,6 @@ export default class ChatModel { return sorted; } - // messaging - sendMessage = async (body: string, file?: File): Promise => { - const senderName = this.settingsModel.username; - if (senderName == "") return false; - - const allChannels = [this.info.primaryChannel]; - for (const secondaryChannel of this.info.secondaryChannels) { - allChannels.push(secondaryChannel); - } - - const combinedChannel: string = allChannels.join("/"); - - const chatMessage: ChatMessage = await ChatModel.createChatMessage( - combinedChannel, - senderName, - this.info.encryptionKey, - body, - file - ); - - this.addMessage(chatMessage); - this.connectionModel.sendMessageOrStore(chatMessage); - return true; - }; - - handleMessage = (body: string): void => { - const chatMessage: ChatMessage | null = parseValidObject( - body, - ChatMessageReference - ); - if (chatMessage == null) return; - - chatMessage.status = ChatMessageStatus.Received; - this.addMessage(chatMessage); - }; - - handleMessageSent = (chatMessage: ChatMessage): void => { - chatMessage.status = ChatMessageStatus.Sent; - this.addMessage(chatMessage); - }; - - decryptMessage = async (chatMessage: ChatMessage): Promise => { - const decryptedBody: string = await decryptString( - chatMessage.body, - this.info.encryptionKey - ); - const decryptedFile: string = await decryptString( - chatMessage.stringifiedFile ?? "", - this.info.encryptionKey - ); - chatMessage.body = decryptedBody; - chatMessage.stringifiedFile = decryptedFile; - }; - - setMessageHandler = (handler: (chatMessage: ChatMessage) => void): void => { - this.chatMessageHandler = handler; - }; - - subscribe = (): void => { - this.connectionModel.addChannel(this.info.primaryChannel); - }; - // init constructor( storageModel: StorageModel, diff --git a/src/Model/Global/connectionModel.ts b/src/Model/Global/connectionModel.ts index 308d78e9..d76afd55 100644 --- a/src/Model/Global/connectionModel.ts +++ b/src/Model/Global/connectionModel.ts @@ -25,19 +25,7 @@ export default class ConnectionModel { channelsToSubscribe: Set = new Set(); - // connection - connect = (address: string): void => { - this.udn.connect(address); - }; - - disconnect = (): void => { - this.udn.disconnect(); - - // do not reconnect - const reconnectAddressPath: string[] = storageKeys.reconnectAddress; - this.storageModel.remove(reconnectAddressPath); - }; - + // handlers handleMessage = (data: Message): void => { this.messageHandler(data); }; @@ -55,6 +43,19 @@ export default class ConnectionModel { this.sendMessagesInOutbox(); }; + // connection + connect = (address: string): void => { + this.udn.connect(address); + }; + + disconnect = (): void => { + this.udn.disconnect(); + + // do not reconnect + const reconnectAddressPath: string[] = storageKeys.reconnectAddress; + this.storageModel.remove(reconnectAddressPath); + }; + // mailbox requestNewMailbox = (): void => { console.trace("requesting mailbox"); @@ -178,7 +179,7 @@ export default class ConnectionModel { return this.storageModel.list(dirPath); } - // handlers + // other setConnectionChangeHandler = (handler: () => void): void => { this.connectionChangeHandler = handler; }; @@ -193,7 +194,7 @@ export default class ConnectionModel { this.messageSentHandler = handler; }; - // setup + // init constructor(storageModel: StorageModel) { // create frontend this.udn = new UDNFrontend(); diff --git a/src/Model/Global/settingsModel.ts b/src/Model/Global/settingsModel.ts index 687a01e4..cfa1b3e7 100644 --- a/src/Model/Global/settingsModel.ts +++ b/src/Model/Global/settingsModel.ts @@ -5,6 +5,7 @@ import StorageModel, { storageKeys } from "./storageModel"; export default class SettingsModel { storageModel: StorageModel; + // data username: string; firstDayOfWeek: string; diff --git a/src/Model/Global/storageModel.ts b/src/Model/Global/storageModel.ts index c758d23a..00a2dbb6 100644 --- a/src/Model/Global/storageModel.ts +++ b/src/Model/Global/storageModel.ts @@ -1,4 +1,4 @@ -// this file is responsible for reading and writing persistent data; all storage shall be handled by this file. +// this file is responsible for reading and writing persistent data. import { DATA_VERSION,