From 79f4a26f236fa56f5dbe821c34d1b8df93512ee0 Mon Sep 17 00:00:00 2001 From: marlon-erler Date: Mon, 13 Apr 2026 20:27:18 +0000 Subject: [PATCH] change handlermanager to use Map to prevent garbage --- dist/index.js | 57 +++++++++---------- src/Model/Chat/chatListModel.ts | 4 +- src/Model/Global/fileTransferModel.ts | 2 +- src/Model/Utility/utility.ts | 14 ++--- src/ViewModel/Chat/chatViewModel.ts | 4 +- src/ViewModel/Global/connectionViewModel.ts | 3 +- src/ViewModel/Global/coreViewModel.ts | 3 +- src/ViewModel/Global/fileTransferViewModel.ts | 4 +- src/ViewModel/Pages/boardViewModel.ts | 2 +- src/ViewModel/Pages/calendarPageViewModel.ts | 2 +- src/ViewModel/Pages/taskPageViewModel.ts | 2 +- 11 files changed, 48 insertions(+), 49 deletions(-) diff --git a/dist/index.js b/dist/index.js index 1d5683b6..76296fa9 100644 --- a/dist/index.js +++ b/dist/index.js @@ -346,19 +346,18 @@ } var HandlerManager = class { constructor() { - this.handlers = /* @__PURE__ */ new Set(); + this.handlers = /* @__PURE__ */ new Map(); // manage - this.addHandler = (handler) => { - this.handlers.add(handler); + this.setHandler = (id, handler) => { + this.handlers.set(id, handler); + console.log(this.handlers.size); }; - this.deleteHandler = (handler) => { - this.handlers.delete(handler); + this.deleteHandler = (id) => { + this.handlers.delete(id); }; // trigger this.trigger = (item) => { - for (const handler of this.handlers) { - handler(item); - } + [...this.handlers.values()].forEach((handler) => handler(item)); }; } }; @@ -1618,8 +1617,9 @@ this.settingsModel = settingsModel2; this.connectionModel = connectionModel2; this.loadChats(); - connectionModel2.messageHandlerManager.addHandler(this.messageHandler); - connectionModel2.messageSentHandlerManager.addHandler( + connectionModel2.messageHandlerManager.setHandler("chat-list", this.messageHandler); + connectionModel2.messageSentHandlerManager.setHandler( + "chat-list", this.messageSentHandler ); } @@ -2258,14 +2258,6 @@ this.BUILD = "Build 26.04.13.E"; // CONTEXT this.contextStack = /* @__PURE__ */ new Map(); - this.logContexts = () => { - console.log( - "context", - this.contexts.map( - (x) => x.contextDebugDescription + "-" + x.contextId - ) - ); - }; this.closeContext = (contextId) => { if (!this.contexts.map((context) => context.contextId).includes(contextId)) return; @@ -2274,7 +2266,6 @@ this.contextStack.delete(currentContext.contextId); if (currentContext.contextId == contextId) break; } - this.logContexts(); }; this.handleKeyDown = (e) => { if (_CoreViewModel.checkIsKeystroke(e) == false) return; @@ -2305,7 +2296,6 @@ set context(context) { if (this.contextStack.has(context.contextId)) return; this.contextStack.set(context.contextId, context); - this.logContexts(); } // util static checkIsKeystroke(e) { @@ -2747,7 +2737,8 @@ bulkSubscribe([this.selectedYear, this.selectedMonth], () => { this.loadMonthTasks(); }); - boardsAndTasksModel.taskHandlerManager.addHandler( + boardsAndTasksModel.taskHandlerManager.setHandler( + "calendar" + this.chatViewModel.chatModel.id, (taskFileContent) => { this.showTask(taskFileContent); } @@ -3355,7 +3346,8 @@ this.selectedPage.subscribeSilent(() => { this.storeLastUsedView(); }); - boardsAndTasksModel.taskHandlerManager.addHandler( + boardsAndTasksModel.taskHandlerManager.setHandler( + this.boardInfo.fileId, (taskFileContent) => { if (taskFileContent.boardId != this.boardInfo.fileId) return; this.showTask(taskFileContent); @@ -3504,7 +3496,8 @@ this.chatViewModel = chatViewModel; this.chatViewModel.registerContext("tasks" /* Tasks */, this); this.selectedBoardId.subscribeSilent(this.updateContexts); - boardsAndTasksModel.boardHandlerManager.addHandler( + boardsAndTasksModel.boardHandlerManager.setHandler( + "task-page" + this.chatViewModel.chatModel.id, (boardInfoFileContent) => { this.showBoardInList(boardInfoFileContent); this.updateBoardIndices(); @@ -3634,14 +3627,16 @@ this.coreViewModel, this ); - chatModel.chatMessageHandlerManager.addHandler( + chatModel.chatMessageHandlerManager.setHandler( + this.chatModel.id, (chatMessage) => { this.messagePageViewModel.showChatMessage(chatMessage); this.updateReadStatus(); this.notificationViewModel.showNotification(chatMessage); } ); - chatModel.reactionHandlerManager.addHandler( + chatModel.reactionHandlerManager.setHandler( + this.chatModel.id, (reaction) => { this.messagePageViewModel.handleReaction(reaction); } @@ -5958,7 +5953,8 @@ ); }; this.updatePreviousAddresses(); - coreViewModel2.connectionModel.connectionChangeHandlerManager.addHandler( + coreViewModel2.connectionModel.connectionChangeHandlerManager.setHandler( + "connection-view-model", this.connectionChangeHandler ); } @@ -6093,10 +6089,12 @@ this.coreViewModel.closeContext(this.contextId); this.presentedModal.value = void 0; }; - this.coreViewModel.fileTransferModel.fileHandlerManager.addHandler( + this.coreViewModel.fileTransferModel.fileHandlerManager.setHandler( + "file-transfer-view-model", this.handleReceivedFile ); - this.coreViewModel.fileTransferModel.readyToSendHandlerManager.addHandler( + this.coreViewModel.fileTransferModel.readyToSendHandlerManager.setHandler( + "file-transfer-view-model", () => this.initiateTransfer() ); this.registerKeyStroke("backspace" /* CloseOrCancel */, this.hideModal); @@ -6442,7 +6440,8 @@ }; this.storageModel = storageModel2; this.connectionModel = connectionModel2; - this.connectionModel.messageHandlerManager.addHandler( + this.connectionModel.messageHandlerManager.setHandler( + "file-transfer", this.handleMessage ); } diff --git a/src/Model/Chat/chatListModel.ts b/src/Model/Chat/chatListModel.ts index 960b0dae..79f77a77 100644 --- a/src/Model/Chat/chatListModel.ts +++ b/src/Model/Chat/chatListModel.ts @@ -108,8 +108,8 @@ export default class ChatListModel { this.connectionModel = connectionModel; this.loadChats(); - connectionModel.messageHandlerManager.addHandler(this.messageHandler); - connectionModel.messageSentHandlerManager.addHandler( + connectionModel.messageHandlerManager.setHandler("chat-list", this.messageHandler); + connectionModel.messageSentHandlerManager.setHandler("chat-list", this.messageSentHandler, ); } diff --git a/src/Model/Global/fileTransferModel.ts b/src/Model/Global/fileTransferModel.ts index e3cdc62f..06bf9ddb 100644 --- a/src/Model/Global/fileTransferModel.ts +++ b/src/Model/Global/fileTransferModel.ts @@ -133,7 +133,7 @@ export default class FileTransferModel { this.storageModel = storageModel; this.connectionModel = connectionModel; - this.connectionModel.messageHandlerManager.addHandler( + this.connectionModel.messageHandlerManager.setHandler("file-transfer", this.handleMessage, ); } diff --git a/src/Model/Utility/utility.ts b/src/Model/Utility/utility.ts index 9fe41a33..1c39b64d 100644 --- a/src/Model/Utility/utility.ts +++ b/src/Model/Utility/utility.ts @@ -173,22 +173,20 @@ export function checkDoesObjectMatchSearch( export type Handler = (item: T) => void; export class HandlerManager { - handlers = new Set>(); + handlers = new Map>(); // manage - addHandler = (handler: Handler): void => { - this.handlers.add(handler); + setHandler = (id: string, handler: Handler): void => { + this.handlers.set(id, handler); }; - deleteHandler = (handler: Handler): void => { - this.handlers.delete(handler); + deleteHandler = (id: string): void => { + this.handlers.delete(id); }; // trigger trigger = (item: T): void => { - for (const handler of this.handlers) { - handler(item); - } + [...this.handlers.values()].forEach((handler) => handler(item)); }; } diff --git a/src/ViewModel/Chat/chatViewModel.ts b/src/ViewModel/Chat/chatViewModel.ts index f72c6785..d981dab1 100644 --- a/src/ViewModel/Chat/chatViewModel.ts +++ b/src/ViewModel/Chat/chatViewModel.ts @@ -173,7 +173,7 @@ export default class ChatViewModel extends ContextHost { ); // handlers - chatModel.chatMessageHandlerManager.addHandler( + chatModel.chatMessageHandlerManager.setHandler(this.chatModel.id, (chatMessage: ChatMessage) => { this.messagePageViewModel.showChatMessage(chatMessage); this.updateReadStatus(); @@ -181,7 +181,7 @@ export default class ChatViewModel extends ContextHost { this.notificationViewModel.showNotification(chatMessage); }, ); - chatModel.reactionHandlerManager.addHandler( + chatModel.reactionHandlerManager.setHandler(this.chatModel.id, (reaction: ChatMessageReaction) => { this.messagePageViewModel.handleReaction(reaction); }, diff --git a/src/ViewModel/Global/connectionViewModel.ts b/src/ViewModel/Global/connectionViewModel.ts index 6a8da2dd..8e3f5d80 100644 --- a/src/ViewModel/Global/connectionViewModel.ts +++ b/src/ViewModel/Global/connectionViewModel.ts @@ -90,7 +90,8 @@ export default class ConnectionViewModel { constructor(public readonly coreViewModel: CoreViewModel) { this.updatePreviousAddresses(); - coreViewModel.connectionModel.connectionChangeHandlerManager.addHandler( + coreViewModel.connectionModel.connectionChangeHandlerManager.setHandler( + "connection-view-model", this.connectionChangeHandler, ); } diff --git a/src/ViewModel/Global/coreViewModel.ts b/src/ViewModel/Global/coreViewModel.ts index 00f7d0b9..a79767e2 100644 --- a/src/ViewModel/Global/coreViewModel.ts +++ b/src/ViewModel/Global/coreViewModel.ts @@ -100,7 +100,8 @@ export class Context { this.keystrokes.set(key, fn); }; - constructor(public contextDebugDescription: string) {} + constructor(public contextDebugDescription: string) { + } } export class ContextHost extends Context { diff --git a/src/ViewModel/Global/fileTransferViewModel.ts b/src/ViewModel/Global/fileTransferViewModel.ts index 3ca1b8a5..ce7372a7 100644 --- a/src/ViewModel/Global/fileTransferViewModel.ts +++ b/src/ViewModel/Global/fileTransferViewModel.ts @@ -173,11 +173,11 @@ export default class FileTransferViewModel extends Context { constructor(public readonly coreViewModel: CoreViewModel) { super("file-transfer"); - this.coreViewModel.fileTransferModel.fileHandlerManager.addHandler( + this.coreViewModel.fileTransferModel.fileHandlerManager.setHandler("file-transfer-view-model", this.handleReceivedFile, ); - this.coreViewModel.fileTransferModel.readyToSendHandlerManager.addHandler( + this.coreViewModel.fileTransferModel.readyToSendHandlerManager.setHandler("file-transfer-view-model", () => this.initiateTransfer(), ); diff --git a/src/ViewModel/Pages/boardViewModel.ts b/src/ViewModel/Pages/boardViewModel.ts index d71f5f65..fb661916 100644 --- a/src/ViewModel/Pages/boardViewModel.ts +++ b/src/ViewModel/Pages/boardViewModel.ts @@ -278,7 +278,7 @@ export default class BoardViewModel extends TaskContainingPageViewModel { }); // handlers - boardsAndTasksModel.taskHandlerManager.addHandler( + boardsAndTasksModel.taskHandlerManager.setHandler(this.boardInfo.fileId, (taskFileContent: TaskFileContent) => { if (taskFileContent.boardId != this.boardInfo.fileId) return; this.showTask(taskFileContent); diff --git a/src/ViewModel/Pages/calendarPageViewModel.ts b/src/ViewModel/Pages/calendarPageViewModel.ts index 81a9e2eb..6b4460fb 100644 --- a/src/ViewModel/Pages/calendarPageViewModel.ts +++ b/src/ViewModel/Pages/calendarPageViewModel.ts @@ -200,7 +200,7 @@ export default class CalendarPageViewModel extends TaskContainingPageViewModel { }); // handlers - boardsAndTasksModel.taskHandlerManager.addHandler( + boardsAndTasksModel.taskHandlerManager.setHandler("calendar" + this.chatViewModel.chatModel.id, (taskFileContent: TaskFileContent) => { this.showTask(taskFileContent); }, diff --git a/src/ViewModel/Pages/taskPageViewModel.ts b/src/ViewModel/Pages/taskPageViewModel.ts index c4ab812b..80d3f8de 100644 --- a/src/ViewModel/Pages/taskPageViewModel.ts +++ b/src/ViewModel/Pages/taskPageViewModel.ts @@ -175,7 +175,7 @@ export default class TaskPageViewModel extends ContextHost { this.selectedBoardId.subscribeSilent(this.updateContexts); // handlers - boardsAndTasksModel.boardHandlerManager.addHandler( + boardsAndTasksModel.boardHandlerManager.setHandler("task-page" + this.chatViewModel.chatModel.id, (boardInfoFileContent: BoardInfoFileContent) => { this.showBoardInList(boardInfoFileContent); this.updateBoardIndices();