hassio-nextcloud-backup/nextcloud_backup/backend/src/tools/messageManager.ts

70 lines
1.6 KiB
TypeScript
Raw Normal View History

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({
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);
}
2024-02-19 10:52:37 +01:00
public get() {
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;