diff --git a/_locales/en/messages.json b/_locales/en/messages.json index ae9f9c66..73a0c196 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -1563,5 +1563,13 @@ "chatgpt_win_change_reply_type": { "message": "Click to change the reply type", "description": "" + }, + "prefs_OptionText_add_tags_exclusions_exact_match": { + "message": "Exclusions exact match", + "description": "" + }, + "prefs_OptionText_add_tags_exclusions_exact_match_Info": { + "message": "If checked, the tags in the exclusion list will be matched exactly, otherwise they will be matched partially.", + "description": "" } } \ No newline at end of file diff --git a/js/mzta-addatags-exclusion-list.js b/js/mzta-addatags-exclusion-list.js index 06a103bd..47e35ece 100644 --- a/js/mzta-addatags-exclusion-list.js +++ b/js/mzta-addatags-exclusion-list.js @@ -26,4 +26,15 @@ export async function addTags_getExclusionList() { export function addTags_setExclusionList(add_tags_exclusions) { browser.storage.local.set({add_tags_exclusions: add_tags_exclusions}); +} + +export function checkExcludedTag(tag, excluded_word, exact_match = false) { + // Check if the tag is in the exclusion list + if (excluded_word === '') { + return false; // No exclusion word, so no exclusion + } + if(exact_match) { + return tag.toLowerCase() === excluded_word.toLowerCase(); + } + return tag.toLowerCase().includes(excluded_word.toLowerCase()); } \ No newline at end of file diff --git a/js/mzta-compose-script.js b/js/mzta-compose-script.js index 1f462054..cf1f1306 100644 --- a/js/mzta-compose-script.js +++ b/js/mzta-compose-script.js @@ -335,6 +335,17 @@ switch (message.command) { function addTags_setExclusionList(add_tags_exclusions) { browser.storage.local.set({add_tags_exclusions: add_tags_exclusions}); } + + function checkExcludedTag(tag, excluded_word, exact_match = false) { + // Check if the tag is in the exclusion list + if (excluded_word === '') { + return false; // No exclusion word, so no exclusion + } + if(exact_match) { + return tag.toLowerCase() === excluded_word.toLowerCase(); + } + return tag.toLowerCase().includes(excluded_word.toLowerCase()); + } // =================================================================================== // Create and append the styles @@ -463,7 +474,7 @@ switch (message.command) { no_submit = true; } - let prefs_tags = await browser.storage.sync.get({add_tags_hide_exclusions: false}); + let prefs_tags = await browser.storage.sync.get({add_tags_hide_exclusions: false, add_tags_exclusions_exact_match: false}); let add_tags_exclusions_list = await addTags_getExclusionList(); // console.log(">>>>>>>>>>>>> add_tags_exclusions_list: " + JSON.stringify(add_tags_exclusions_list)); @@ -472,7 +483,7 @@ switch (message.command) { .filter(word => word !== '') .map(word => { const isExcluded = add_tags_exclusions_list.some(exclusion => - word.toLowerCase().includes(exclusion.toLowerCase()) + checkExcludedTag(word, exclusion, prefs_tags.add_tags_exclusions_exact_match) ); return { diff --git a/mzta-background.js b/mzta-background.js index 8ae9d156..da7ed450 100644 --- a/mzta-background.js +++ b/mzta-background.js @@ -26,7 +26,7 @@ import { mzta_specialCommand } from './js/mzta-special-commands.js'; import { getSpamFilterPrompt } from './js/mzta-prompts.js'; import { taSpamReport } from './js/mzta-spamreport.js'; import { taWorkingStatus } from './js/mzta-working-status.js'; -import { addTags_getExclusionList } from './js/mzta-addatags-exclusion-list.js'; +import { addTags_getExclusionList, checkExcludedTag } from './js/mzta-addatags-exclusion-list.js'; browser.runtime.onInstalled.addListener(({ reason, previousVersion }) => { // console.log(">>>>>>>>>>> onInstalled: " + JSON.stringify(reason) + ", previousVersion: " + previousVersion); @@ -155,7 +155,7 @@ async function _reload_menus() { return true; } -async function _assign_tags(_data, create_new_tags = true) { +async function _assign_tags(_data, create_new_tags = true, exclusions_exact_match = false) { let all_tags_list = await getTagsList(); all_tags_list = all_tags_list[1]; // console.log(">>>>>>>>>>>>>>> all_tags_list: " + JSON.stringify(all_tags_list)); @@ -165,7 +165,7 @@ async function _assign_tags(_data, create_new_tags = true) { taLog.log("add_tags_exclusions_list: " + JSON.stringify(add_tags_exclusions_list)); const tags_final = _data.tags.filter(tag => !add_tags_exclusions_list.some(exclusion => - tag.toLowerCase().includes(exclusion.toLowerCase()) + checkExcludedTag(tag, exclusion, exclusions_exact_match) ) ); if(!create_new_tags){ @@ -216,15 +216,15 @@ messenger.runtime.onMessage.addListener((message, sender, sendResponse) => { async function _replyMessage(message) { let paragraphsHtmlString = message.text; //console.log(">>>>>>>>>>>> paragraphsHtmlString: " + paragraphsHtmlString); - let prefs = await browser.storage.sync.get({reply_type: prefs_default.reply_type, composing_plain_text: prefs_default.composing_plain_text}); - if(prefs.composing_plain_text){ + let prefs_reply = await browser.storage.sync.get({reply_type: prefs_default.reply_type, composing_plain_text: prefs_default.composing_plain_text}); + if(prefs_reply.composing_plain_text){ paragraphsHtmlString = stripHtmlKeepLines(paragraphsHtmlString); } - //console.log('reply_type: ' + prefs.reply_type); + //console.log('reply_type: ' + prefs_reply.reply_type); let replyType = 'replyToAll'; // console.log(">>>>>>>>>>> chatgpt_replyMessage replyType: " + message.replyType); if (typeof message.replyType === "undefined" || message.replyType === null || message.replyType === "") { - message.replyType = prefs.reply_type; + message.replyType = prefs_reply.reply_type; } if(message.replyType === 'reply_sender'){ replyType = 'replyToSender'; @@ -301,7 +301,11 @@ messenger.runtime.onMessage.addListener((message, sender, sendResponse) => { return _popup_menu_ready(); break; case 'assign_tags': - return _assign_tags(message); + async function _do_assign_tags(message) { + let prefs_assign_tags = await browser.storage.sync.get({add_tags_exclusions_exact_match: prefs_default.add_tags_exclusions_exact_match}); + return _assign_tags(message,true, prefs_assign_tags.add_tags_exclusions_exact_match); + } + return _do_assign_tags(message); break; case 'api_send_custom_text': browser.tabs.sendMessage(message.tabId, { command: "api_send_custom_text", custom_text: message.custom_text }); @@ -951,7 +955,16 @@ const newEmailListener = (folder, messagesList) => { async function processEmails(messages, addTagsAuto, spamFilter) { taWorkingStatus.startWorking(); - let prefs_aats = await browser.storage.sync.get({ add_tags_maxnum: prefs_default.add_tags_maxnum, connection_type: prefs_default.connection_type, add_tags_force_lang: prefs_default.add_tags_force_lang, default_chatgpt_lang: prefs_default.default_chatgpt_lang, add_tags_auto_force_existing: prefs_default.add_tags_auto_force_existing, add_tags_enabled_accounts: prefs_default.add_tags_enabled_accounts, spamfilter_enabled_accounts: prefs_default.spamfilter_enabled_accounts }); + let prefs_aats = await browser.storage.sync.get({ + add_tags_maxnum: prefs_default.add_tags_maxnum, + connection_type: prefs_default.connection_type, + add_tags_force_lang: prefs_default.add_tags_force_lang, + default_chatgpt_lang: prefs_default.default_chatgpt_lang, + add_tags_auto_force_existing: prefs_default.add_tags_auto_force_existing, + add_tags_enabled_accounts: prefs_default.add_tags_enabled_accounts, + add_tags_exclusions_exact_match: prefs_default.add_tags_exclusions_exact_match, + spamfilter_enabled_accounts: prefs_default.spamfilter_enabled_accounts, + }); for await (let message of messages) { let curr_fullMessage = null; @@ -990,7 +1003,7 @@ async function processEmails(messages, addTagsAuto, spamFilter) { } taLog.log("tags_current_email: " + tags_current_email); let _data = { messageId: message.id, tags: tags_current_email.split(/,\s*/) }; - _assign_tags(_data, !prefs_aats.add_tags_auto_force_existing); + _assign_tags(_data, !prefs_aats.add_tags_auto_force_existing, prefs_aats.add_tags_exclusions_exact_match); } if (spamFilter) { diff --git a/options/mzta-options-default.js b/options/mzta-options-default.js index e3525108..16530072 100644 --- a/options/mzta-options-default.js +++ b/options/mzta-options-default.js @@ -56,6 +56,7 @@ export const prefs_default = { add_tags: false, add_tags_maxnum: 3, add_tags_hide_exclusions: false, + add_tags_exclusions_exact_match: false, add_tags_first_uppercase: true, add_tags_force_lang: true, add_tags_auto: false, diff --git a/pages/addtags/mzta-add-tags.html b/pages/addtags/mzta-add-tags.html index 451100e7..5eb06f88 100644 --- a/pages/addtags/mzta-add-tags.html +++ b/pages/addtags/mzta-add-tags.html @@ -22,6 +22,15 @@ + + __MSG_prefs_OptionText_add_tags_exclusions_exact_match__ + + + + __MSG_prefs_OptionText_add_tags_hide_exclusions__