change handlermanager to use Map to prevent garbage

This commit is contained in:
marlon-erler
2026-04-13 20:27:18 +00:00
parent d71b3893a4
commit 79f4a26f23
11 changed files with 48 additions and 49 deletions
+2 -2
View File
@@ -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,
);
}
+1 -1
View File
@@ -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,
);
}
+6 -8
View File
@@ -173,22 +173,20 @@ export function checkDoesObjectMatchSearch<T>(
export type Handler<T> = (item: T) => void;
export class HandlerManager<T> {
handlers = new Set<Handler<T>>();
handlers = new Map<string, Handler<T>>();
// manage
addHandler = (handler: Handler<T>): void => {
this.handlers.add(handler);
setHandler = (id: string, handler: Handler<T>): void => {
this.handlers.set(id, handler);
};
deleteHandler = (handler: Handler<T>): 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));
};
}
+2 -2
View File
@@ -173,7 +173,7 @@ export default class ChatViewModel extends ContextHost<ChatPageTypes> {
);
// 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<ChatPageTypes> {
this.notificationViewModel.showNotification(chatMessage);
},
);
chatModel.reactionHandlerManager.addHandler(
chatModel.reactionHandlerManager.setHandler(this.chatModel.id,
(reaction: ChatMessageReaction) => {
this.messagePageViewModel.handleReaction(reaction);
},
+2 -1
View File
@@ -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,
);
}
+2 -1
View File
@@ -100,7 +100,8 @@ export class Context {
this.keystrokes.set(key, fn);
};
constructor(public contextDebugDescription: string) {}
constructor(public contextDebugDescription: string) {
}
}
export class ContextHost<T> extends Context {
@@ -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(),
);
+1 -1
View File
@@ -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);
+1 -1
View File
@@ -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);
},
+1 -1
View File
@@ -175,7 +175,7 @@ export default class TaskPageViewModel extends ContextHost<string> {
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();