Files
CT/src/Model/chatListModel.ts
T

62 lines
1.5 KiB
TypeScript
Raw Normal View History

2024-07-20 04:43:16 +02:00
import StorageModel, { storageKeys } from "./storageModel";
import { ChatModel } from "./chatModel";
import { v4 } from "uuid";
export default class ChatListModel {
storageModel: StorageModel;
// data
2024-07-20 16:38:06 +02:00
chatModels = new Set<ChatModel>();
2024-07-20 16:49:01 +02:00
sortedPrimaryChannels: string[] = [];
2024-07-20 04:43:16 +02:00
// store & add
2024-07-20 05:10:50 +02:00
addChatModel = (chatModel: ChatModel) => {
2024-07-20 16:38:06 +02:00
this.chatModels.add(chatModel);
2024-07-20 16:49:01 +02:00
this.updateIndices();
2024-07-20 05:10:50 +02:00
};
2024-07-20 04:43:16 +02:00
2024-07-20 05:10:50 +02:00
createChat = (primaryChannel: string): ChatModel => {
2024-07-20 04:43:16 +02:00
const id: string = v4();
2024-07-20 14:16:26 +02:00
const chatModel = new ChatModel(this.storageModel, this, id);
2024-07-20 04:43:16 +02:00
chatModel.setPrimaryChannel(primaryChannel);
this.addChatModel(chatModel);
2024-07-20 05:10:50 +02:00
return chatModel;
2024-07-20 04:43:16 +02:00
};
2024-07-20 05:10:50 +02:00
untrackChat = (chat: ChatModel): void => {
2024-07-20 16:38:06 +02:00
this.chatModels.delete(chat);
2024-07-20 16:49:01 +02:00
this.updateIndices();
};
// sorting
updateIndices = () => {
this.sortedPrimaryChannels = [];
let allChannels: string[] = [];
for (const chatModel of this.chatModels) {
allChannels.push(chatModel.info.primaryChannel);
}
this.sortedPrimaryChannels = allChannels.sort((a, b) => a.localeCompare(b));
2024-07-20 04:43:16 +02:00
};
// restore
loadChats = (): void => {
const chatDir = storageKeys.chats;
2024-07-20 05:10:50 +02:00
const chatIds = this.storageModel.list(chatDir);
for (const chatId of chatIds) {
2024-07-20 14:16:26 +02:00
const chatModel = new ChatModel(this.storageModel, this, chatId);
2024-07-20 04:43:16 +02:00
this.addChatModel(chatModel);
}
};
// init
constructor(storageModel: StorageModel) {
this.storageModel = storageModel;
2024-07-20 05:10:50 +02:00
this.loadChats();
2024-07-20 04:43:16 +02:00
}
}