From 1c052a7090ec244cb71efba251809849523c47d8 Mon Sep 17 00:00:00 2001 From: Jordan Wages Date: Tue, 24 Jun 2025 17:31:03 -0500 Subject: [PATCH] Handle new mail classification --- background.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/background.js b/background.js index c28a265..acbe79c 100644 --- a/background.js +++ b/background.js @@ -11,10 +11,17 @@ "use strict"; let logger; +let AiClassifier; // Startup (async () => { logger = await import(browser.runtime.getURL("logger.js")); 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 { const store = await browser.storage.local.get(["endpoint", "templateName", "customTemplate", "customSystemPrompt", "aiParams", "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 window.addEventListener("unhandledrejection", ev => { logger.aiLog("Unhandled promise rejection", {level: 'error'}, ev.reason);