register flags

This commit is contained in:
grimhilt
2023-04-07 17:59:24 +02:00
parent 46ed3a1f41
commit af76e8f2f9
6 changed files with 49 additions and 343 deletions

View File

@@ -1,5 +1,5 @@
import { getAddresseId } from "../../db/utils/mail";
import {simpleParser} from "mailparser";
import { getAddresseId, getFlagId } from "../../db/utils/mail";
import { EmailAddress, ParsedMail, simpleParser } from "mailparser";
import moment from "moment";
import Imap from "imap";
import {
@@ -10,6 +10,7 @@ import {
registerBodypart,
saveBodypart,
saveSource,
registerFlag,
} from "../../db/message/storeMessage-db";
import { getFieldId } from "../../db/utils/mail";
@@ -25,11 +26,13 @@ export function saveMessage(attrs: AttrsWithEnvelope, mailboxId: number, imap: I
return new Promise((resolve, reject) => {
registerMessage(ts, rfc822size, messageID)
.then((messageId) => {
const isSeen: boolean = attrs.flags.includes("\\Seen");
const deleted: boolean = attrs.flags.includes("\\Deleted");
registerMailbox_message(mailboxId, attrs.uid, messageId, attrs?.modseq || 0, isSeen, deleted);
registerFlags(messageId, attrs.flags);
// fetch message to save everything
const f = imap.fetch(attrs.uid, { bodies: "" });
let buffer = "";
@@ -70,14 +73,24 @@ export function saveMessage(attrs: AttrsWithEnvelope, mailboxId: number, imap: I
});
}
async function saveFromParsedData(parsed, messageId) {
function registerFlags(messageId: number, flags: string[]) {
flags.forEach((flag) => {
getFlagId(flag).then((flagId) => {
registerFlag(messageId, flagId);
}).catch((err: Error) => {
logger.err(err);
});
});
}
async function saveFromParsedData(parsed: ParsedMail, messageId: number) {
const promises: Promise<any>[] = [];
Object.keys(parsed).forEach((key) => {
if (["from", "to", "cc", "bcc", "replyTo"].includes(key)) {
promises.push(
// save address field
getFieldId(key).then((fieldId) => {
parsed[key].value.forEach((addr, nb) => {
parsed[key].value.forEach((addr: EmailAddress, nb: number) => {
getAddresseId(addr.address, addr.name).then(async (addressId) => {
await saveAddress_fields(messageId, fieldId, addressId, nb);
});
@@ -121,7 +134,6 @@ async function saveFromParsedData(parsed, messageId) {
// todo when transfered
}
if (process.env["NODE_DEV"] == "TEST") {
module.exports = {
saveFromParsedData,