diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 4eb596ab..7cb9e10a 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -1350,5 +1350,13 @@ "ask_chatgptweb_permission_ok": { "message": "Permission granted. You can click here to close this tab and return to the main window.", "description": "" + }, + "AccountSelector_AutoTags": { + "message": "Choose the accounts where auto-tagging is enabled", + "description": "" + }, + "AccountSelector_AutoTags_infoline": { + "message": "Each change is saved immediately.", + "description": "" } } \ No newline at end of file diff --git a/js/mzta-utils.js b/js/mzta-utils.js index e4514a18..b16099a0 100644 --- a/js/mzta-utils.js +++ b/js/mzta-utils.js @@ -43,6 +43,17 @@ function fixMsgHeader(msgHeader) { return msgHeader; } +export async function getAccountsList() { + let accounts = await browser.accounts.list(); + let accounts_array = []; + for (let account of accounts) { + let account_id = account.id; + let account_name = account.name; + accounts_array.push({id: account_id, name: account_name}); + } + return accounts_array; +} + export async function getCurrentIdentity(msgHeader, getFull = false) { let identities_array = []; let fallback_identity = ''; diff --git a/options/mzta-options-default.js b/options/mzta-options-default.js index c4674218..409264dd 100644 --- a/options/mzta-options-default.js +++ b/options/mzta-options-default.js @@ -51,6 +51,7 @@ export const prefs_default = { add_tags_auto_force_existing: false, add_tags_auto_only_inbox: true, add_tags_context_menu: true, + add_tags_enabled_accounts: [], get_calendar_event: true, get_task: true, calendar_enforce_timezone: false, diff --git a/pages/addtags/mzta-add-tags.css b/pages/addtags/mzta-add-tags.css index 2899916f..729bb1b5 100644 --- a/pages/addtags/mzta-add-tags.css +++ b/pages/addtags/mzta-add-tags.css @@ -12,7 +12,7 @@ font-style: italic; } -#addtags_excl_list_container{ +#addtags_excl_list_container, #account_selector_container{ width: 90%; margin: 40px auto; } @@ -21,6 +21,15 @@ width: 30em; } +#account_selector_checkboxes{ + padding: 10px; + border: 1px solid gray; + width: 24em; + margin-bottom: 10px; + margin-top: 10px;; +} + + .btn_div{ width: 100%; display: flex; diff --git a/pages/addtags/mzta-add-tags.html b/pages/addtags/mzta-add-tags.html index 9067132c..8b75083b 100644 --- a/pages/addtags/mzta-add-tags.html +++ b/pages/addtags/mzta-add-tags.html @@ -106,6 +106,13 @@
+
+
__MSG_AccountSelector_AutoTags__ +
__MSG_AccountSelector_AutoTags_infoline__
+
+ + +
diff --git a/pages/addtags/mzta-add-tags.js b/pages/addtags/mzta-add-tags.js index ba24ca7d..2944f775 100644 --- a/pages/addtags/mzta-add-tags.js +++ b/pages/addtags/mzta-add-tags.js @@ -22,7 +22,7 @@ import { getSpecialPrompts, setSpecialPrompts } from "../../js/mzta-prompts.js"; import { getPlaceholders } from "../../js/mzta-placeholders.js"; import { textareaAutocomplete } from "../../js/mzta-placeholders-autocomplete.js"; import { addTags_getExclusionList, addTags_setExclusionList } from "../../js/mzta-addatags-exclusion-list.js"; - +import { getAccountsList } from "../../js/mzta-utils.js"; let autocompleteSuggestions = []; let taLog = new taLogger("mzta-addtags-page",true); @@ -118,6 +118,48 @@ document.addEventListener('DOMContentLoaded', async () => { document.getElementById('excl_list_unsaved').classList.add('hidden'); }); + //Accounts manager + let accounts = await getAccountsList(); + const accountsContainer = document.getElementById('account_selector_checkboxes'); + accounts.forEach(account => { + const accountLabel = document.createElement('label'); + const accountCheckbox = document.createElement('input'); + accountCheckbox.type = 'checkbox'; + accountCheckbox.classList.add('accountCheckbox'); + accountCheckbox.value = account.id; + accountLabel.appendChild(accountCheckbox); + accountLabel.appendChild(document.createTextNode(account.name)); + accountsContainer.appendChild(accountLabel); + accountsContainer.appendChild(document.createElement('br')); + }); + + let prefs_add_tags = await browser.storage.sync.get({ add_tags_enabled_accounts: [] }); + let add_tags_enabled_accounts = prefs_add_tags.add_tags_enabled_accounts; + document.querySelectorAll('.accountCheckbox').forEach(checkbox => { + if (add_tags_enabled_accounts.length === 0 || add_tags_enabled_accounts.includes(checkbox.value)) { + checkbox.checked = true; + } else { + checkbox.checked = false; + } + }); + + document.querySelectorAll('.accountCheckbox').forEach(checkbox => { + checkbox.addEventListener('change', () => { + let selectedAccounts = Array.from(document.querySelectorAll('.accountCheckbox:checked')).map(checkbox => checkbox.value); + browser.storage.sync.set({ add_tags_enabled_accounts: selectedAccounts }); + }); + }); + + document.getElementById('accounts_select_all').addEventListener('click', () => { + let checkboxes = document.querySelectorAll('.accountCheckbox'); + checkboxes.forEach(checkbox => checkbox.checked = true); + }); + + document.getElementById('accounts_deselect_all').addEventListener('click', () => { + let checkboxes = document.querySelectorAll('.accountCheckbox'); + checkboxes.forEach(checkbox => checkbox.checked = false); + }); + });