2022-10-26 11:41:08 +02:00
|
|
|
import { randomUUID } from "crypto";
|
2022-09-26 23:11:43 +02:00
|
|
|
import { DateTime } from "luxon";
|
2024-02-18 17:19:37 +01:00
|
|
|
import { type Message, MessageType } from "../types/message.js";
|
2022-09-26 23:11:43 +02:00
|
|
|
|
|
|
|
const maxMessageLength = 255;
|
|
|
|
|
|
|
|
class MessageManager {
|
|
|
|
private messages: Message[] = [];
|
|
|
|
|
2024-02-19 10:52:37 +01:00
|
|
|
public addMessage(
|
|
|
|
type: MessageType,
|
|
|
|
message: string,
|
|
|
|
detail?: string,
|
|
|
|
isImportant = false
|
|
|
|
) {
|
|
|
|
this.messages.unshift({
|
2022-10-26 11:41:08 +02:00
|
|
|
id: randomUUID(),
|
2022-09-26 23:11:43 +02:00
|
|
|
message: message,
|
|
|
|
type: type,
|
|
|
|
time: DateTime.now(),
|
2022-09-27 23:38:40 +02:00
|
|
|
viewed: !isImportant,
|
2024-02-19 10:52:37 +01:00
|
|
|
detail: detail,
|
2022-09-26 23:11:43 +02:00
|
|
|
});
|
|
|
|
if (this.messages.length > maxMessageLength) {
|
|
|
|
this.messages.shift();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public error(message: string, detail?: string) {
|
2022-09-27 23:38:40 +02:00
|
|
|
this.addMessage(MessageType.ERROR, message, detail, true);
|
2022-09-26 23:11:43 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public warn(message: string, detail?: string) {
|
|
|
|
this.addMessage(MessageType.WARN, message, detail);
|
|
|
|
}
|
|
|
|
|
|
|
|
public info(message: string, detail?: string) {
|
|
|
|
this.addMessage(MessageType.INFO, message, detail);
|
|
|
|
}
|
|
|
|
|
|
|
|
public success(message: string, detail?: string) {
|
|
|
|
this.addMessage(MessageType.SUCCESS, message, detail);
|
|
|
|
}
|
2022-10-13 17:11:55 +02:00
|
|
|
|
2024-02-19 10:52:37 +01:00
|
|
|
public get() {
|
2022-10-13 17:11:55 +02:00
|
|
|
return this.messages;
|
|
|
|
}
|
2022-10-26 14:09:10 +02:00
|
|
|
|
2024-02-19 10:52:37 +01:00
|
|
|
public getById(id: string) {
|
|
|
|
return this.messages.find((value) => value.id == id);
|
|
|
|
}
|
2022-10-26 14:09:10 +02:00
|
|
|
|
2024-02-19 10:52:37 +01:00
|
|
|
public markReaded(id: string) {
|
|
|
|
const index = this.messages.findIndex((value) => value.id == id);
|
|
|
|
if (index == -1) {
|
2022-10-26 14:09:10 +02:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
this.messages[index].viewed = true;
|
|
|
|
return true;
|
|
|
|
}
|
2024-02-19 10:52:37 +01:00
|
|
|
public markAllReaded() {
|
|
|
|
this.messages.forEach((value: Message) => {
|
|
|
|
value.viewed = true;
|
|
|
|
});
|
|
|
|
}
|
2022-09-26 23:11:43 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
const messageManager = new MessageManager();
|
|
|
|
export default messageManager;
|