mail/back/mails/message/updateMessage.ts
2023-04-17 13:08:54 +02:00

44 lines
1.5 KiB
TypeScript

import { registerFlag } from "../../db/message/storeMessage-db";
import { deleteFlag, getFlags, updateMailboxDeleted, updateMailboxSeen } from "../../db/message/updateMessage-db";
import { getFlagId, getMessageIdOnUid } from "../../db/utils/mail";
export default class updateMessage {
uid: number;
flags: string[];
constructor(_uid: number, _flags: string[]) {
this.uid = _uid;
this.flags = _flags;
}
async updateFlags() {
const messageId = (await getMessageIdOnUid(this.uid))[0]?.message_id;
if (!messageId) return;
const currentFlags = await getFlags(this.uid);
const flagsToAdd = this.flags.filter((flag) => !currentFlags.find((f) => flag == f.flag_name));
const flagToRm = currentFlags.filter((f) => !this.flags.includes(f.flag_name));
flagsToAdd.forEach(async (flag) => {
const flagId = await getFlagId(flag);
registerFlag(messageId, flagId);
});
flagToRm.forEach(async (flag) => {
deleteFlag(messageId, flag.flag_id);
});
if (flagsToAdd.includes("\\Seen")) {
updateMailboxSeen(messageId, true);
} else if (flagToRm.find((f) => f.flag_name == "\\Seen")) {
updateMailboxSeen(messageId, false);
}
if (flagsToAdd.includes("\\Deleted")) {
updateMailboxDeleted(messageId, true);
} else if (flagToRm.find((f) => f.flag_name == "\\Deleted")) {
updateMailboxDeleted(messageId, false);
}
}
}