gmail-mbox-stats
Version:
Nice tool to analyze Gmail MBOX file
161 lines (144 loc) • 4.44 kB
text/typescript
import { ParsedMail, Headers as TyMailparserHeaders } from "mailparser";
import { step } from "../gloAccu";
import {
TyMainInfoForMail,
TyMboxMailHeaders,
TyZenMainInfoForMail,
} from "../types/mailparserTypes";
import { getZenParticipantsFromFamily } from "./sweetUtils";
import { addOneMailInfoToStats } from "./statsBuilder";
export const scanHeaders = (
headersMap: TyMailparserHeaders,
): TyMainInfoForMail => {
const headers = headersMap as TyMboxMailHeaders;
const init_From = headers.get("from");
const init_To = headers.get("to");
// const init_deliveredTo = headers.get("delivered-to");
const init_cc = headers.get("cc");
const init_bcc = headers.get("bcc");
//
const init_date = headers.get("date");
const init_messageId = headers.get("message-id");
// for testing:
/*
if ([7, 14].includes(step.v)) {
init_From?.value?.forEach((val, index) => {
// @ts-ignore
val.address = `hidden${index}${step.v}`;
});
}
if ([21].includes(step.v)) {
init_From = undefined;
}
if ([29, 30].includes(step.v)) {
init_From?.value?.forEach((val) => {
// @ts-ignore
val.address = ``;
// val.name = ``;
});
}
*/
// if (
// init_messageId ===
// "<CAA_p-vxkKrYGM+QcZMbjvTkxQ6biC+6zdH4Mcp+bmAYzBXaxfQ@mail.gmail.com>"
// ) {
// console.log("baaa", JSON.stringify([...headers]));
// }
const initialMainInfoForThisMail: TyMainInfoForMail = {
from: init_From,
to: init_To,
// "delivered-to": init_deliveredTo,
cc: init_cc,
bcc: init_bcc,
//
date: init_date,
["message-id"]: init_messageId,
};
return initialMainInfoForThisMail;
// if (step.v === 23) {
// const rrr = initialMainInfoForThisMail.to?.value;
// if (rrr) {
// rrr.forEach((x) => {
// x.address = undefined;
// });
// }
// const rrr2 = initialMainInfoForThisMail["delivered-to"]?.value;
// if (rrr2) {
// rrr2.forEach((x) => {
// x.address = undefined;
// });
// }
// console.log(initialMainInfoForThisMail["message-id"]);
// }
};
export const processParsedMail = (theParsedMail: ParsedMail) => {
const initialMainInfoForThisMail = scanHeaders(theParsedMail.headers);
// MB => million bytes
const sumOfSizesOfAttachmentsOfOneMail =
theParsedMail.attachments.reduce((accu, curr) => accu + curr.size, 0) /
1000000;
const countOfAttachmentsInThisMail = theParsedMail.attachments.length;
const zenMainInfoForThisMail: TyZenMainInfoForMail = {
from: getZenParticipantsFromFamily({
family: initialMainInfoForThisMail.from,
step: step.succeededV,
familyKind: "from",
messageId: initialMainInfoForThisMail["message-id"],
fromCombiner: false,
}),
// zenTo: combineTwoFamiliesIntoZenArr({
// step: step.v,
// messageId: initialMainInfoForThisMail["message-id"],
// twoFamilies: [
// {
// familyKind: "to",
// participationInfo: initialMainInfoForThisMail.to,
// },
// {
// familyKind: "delivered-to",
// participationInfo: initialMainInfoForThisMail["delivered-to"],
// },
// ],
// }),
zenTo: getZenParticipantsFromFamily({
family: initialMainInfoForThisMail.to,
step: step.succeededV,
familyKind: "to",
messageId: initialMainInfoForThisMail["message-id"],
fromCombiner: false,
}),
cc: getZenParticipantsFromFamily({
family: initialMainInfoForThisMail.cc,
step: step.succeededV,
familyKind: "cc",
messageId: initialMainInfoForThisMail["message-id"],
fromCombiner: false,
}),
bcc: getZenParticipantsFromFamily({
family: initialMainInfoForThisMail.bcc,
step: step.succeededV,
familyKind: "bcc",
messageId: initialMainInfoForThisMail["message-id"],
fromCombiner: false,
}),
//
date: initialMainInfoForThisMail.date,
"message-id": initialMainInfoForThisMail["message-id"],
};
// TODO: maybe for future
/*
handleOneLineOfMailboxIndex({
stepV: step.v,
zenMainInfoForThisMail,
});
*/
//
// maybe more logical for "addOneMailInfoToStats" to be here:
addOneMailInfoToStats({
oneMail: zenMainInfoForThisMail,
stepN: step.succeededV,
//
sumOfSizesOfAttachmentsOfOneMail,
countOfAttachmentsInThisMail,
});
};