From 7f84496d367aa5dd87106f1e274da4b903524ab8 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Sat, 1 Feb 2025 20:10:00 +0100 Subject: [PATCH] feat classification for folder added --- src/background.js | 66 +++++++++++++++++++++++++++++++++++++++++++---- src/manifest.json | 2 +- 2 files changed, 62 insertions(+), 6 deletions(-) diff --git a/src/background.js b/src/background.js index 22813fd..06bceae 100644 --- a/src/background.js +++ b/src/background.js @@ -235,12 +235,27 @@ function createContextMenu() { }); // Hauptmenüeintrag für PrioMailbox + // Context menu for messages messenger.menus.create({ id: "priomailbox", title: "PrioMailbox", contexts: ["message_list"], }); + // Context menu for folders + messenger.menus.create({ + id: "priomailbox-folder", + title: "PrioMailbox", + contexts: ["folder_pane"], + }); + + messenger.menus.create({ + id: "classify-folder", + parentId: "priomailbox-folder", + title: trans("classifyMenu"), + contexts: ["folder_pane"] + }); + if (selectedTags.length === 0) { // Menüeintrag "Schlagwort auswählen" wenn keine Tags ausgewählt sind messenger.menus.create({ @@ -350,29 +365,39 @@ messenger.storage.onChanged.addListener((changes, area) => { messenger.menus.onClicked.addListener((info, tab) => { console.log("Menu item clicked:", info.menuItemId); console.log("Info object:", info); - + + if (info.menuItemId === "classify-folder") { + if (info.selectedFolder) { + classifyFolder(info.selectedFolder); + } else { + console.error("No folder selected for classification."); + } + return; + } + if (info.selectedMessages && info.selectedMessages.messages.length > 0) { const messageId = info.selectedMessages.messages[0].id; - + if (info.menuItemId === "select_tag") { messenger.runtime.openOptionsPage().catch((error) => { console.error("Error opening settings page:", error); }); return; } - + selectMessage(messageId) .then(() => { handleMenuClick(info, messageId); }) .catch((error) => { console.error("Error selecting message:", error); - }); + }); } else { - console.error("No message selected."); + console.log("No message selected. Assuming folder operation."); } }); + function handleMenuClick(info, messageId) { // Lade die neuesten bayesData bei jedem Klick messenger.storage.local @@ -424,6 +449,37 @@ function handleMenuClick(info, messageId) { }); } + +async function classifyFolder(folder) { + console.log("classifyFolder executed for", folder); + + let folderToQuery = { + accountId: folder.accountId, + path: folder.path + }; + + try { + let page = await messenger.messages.list(folderToQuery); + + while (true) { + for (let message of page.messages) { + console.log("Verarbeite Nachricht:", message); + classifyEmail(message.id); + } + + if (page.id) { + page = await messenger.messages.continueList(page.id); + } else { + break; + } + } + } catch (error) { + console.error("Error retrieving messages:", error); + } + openPopupWithMessage(trans("classificationCompleteMessage")); +} + + function selectMessage(messageId) { return messenger.mailTabs .setSelectedMessages([messageId]) diff --git a/src/manifest.json b/src/manifest.json index 4966c45..cc93282 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 2, "name": "PrioMailbox", - "version": "1.3.4", + "version": "1.4.0", "default_locale": "en", "description": "PrioMailbox organizes your emails in Thunderbird with intelligent, trainable tags. Important messages are highlighted, while unimportant ones are hidden.", "icons": {