Handle new mail classification

This commit is contained in:
Jordan Wages 2025-06-24 17:31:03 -05:00
commit 1c052a7090

View file

@ -11,10 +11,17 @@
"use strict"; "use strict";
let logger; let logger;
let AiClassifier;
// Startup // Startup
(async () => { (async () => {
logger = await import(browser.runtime.getURL("logger.js")); logger = await import(browser.runtime.getURL("logger.js"));
logger.aiLog("background.js loaded ready to classify", {debug: true}); logger.aiLog("background.js loaded ready to classify", {debug: true});
try {
({ AiClassifier } = ChromeUtils.import("resource://aifilter/modules/AiClassifier.jsm"));
logger.aiLog("AiClassifier imported", {debug: true});
} catch (e) {
logger.aiLog("failed to import AiClassifier", {level: 'error'}, e);
}
try { try {
const store = await browser.storage.local.get(["endpoint", "templateName", "customTemplate", "customSystemPrompt", "aiParams", "debugLogging"]); const store = await browser.storage.local.get(["endpoint", "templateName", "customTemplate", "customSystemPrompt", "aiParams", "debugLogging"]);
logger.setDebug(store.debugLogging); logger.setDebug(store.debugLogging);
@ -60,6 +67,25 @@ browser.runtime.onMessage.addListener(async (msg) => {
} }
}); });
// Automatically classify new messages
browser.messages.onNewMailReceived.addListener(async (folder, messages) => {
logger.aiLog("onNewMailReceived", {debug: true}, messages);
for (const msg of (messages?.messages || messages || [])) {
const id = msg.id ?? msg;
try {
const full = await browser.messages.getFull(id);
const text = full?.parts?.[0]?.body || "";
const criterion = (await browser.storage.local.get("autoCriterion")).autoCriterion || "";
const matched = await AiClassifier.classifyText(text, criterion);
if (matched) {
await browser.messages.update(id, {tags: ["$label1"]});
}
} catch (e) {
logger.aiLog("failed to classify new mail", {level: 'error'}, e);
}
}
});
// Catch any unhandled rejections // Catch any unhandled rejections
window.addEventListener("unhandledrejection", ev => { window.addEventListener("unhandledrejection", ev => {
logger.aiLog("Unhandled promise rejection", {level: 'error'}, ev.reason); logger.aiLog("Unhandled promise rejection", {level: 'error'}, ev.reason);