diff --git a/mzta-background.js b/mzta-background.js index 681ed7ac..4c0832a3 100644 --- a/mzta-background.js +++ b/mzta-background.js @@ -186,6 +186,24 @@ async function _reload_menus() { return true; } +async function _getActiveSpecialIds() { + let prefs_reload = await browser.storage.sync.get({add_tags: prefs_default.add_tags, get_calendar_event: prefs_default.get_calendar_event, get_calendar_event_from_clipboard: prefs_default.get_calendar_event_from_clipboard, get_task: prefs_default.get_task, connection_type: prefs_default.connection_type, spamfilter: prefs_default.spamfilter, summarize: prefs_default.summarize, translate: prefs_default.translate}); + let getCalendarEvent = doGetSparkFeature(prefs_reload.get_calendar_event); + let getCalendarEventFromClipboard = doGetSparkFeature(prefs_reload.get_calendar_event_from_clipboard); + let getTask = doGetSparkFeature(prefs_reload.get_task); + return getActiveSpecialPromptsIDs({ + addtags: prefs_reload.add_tags, + addtags_api: hasSpecificIntegration(prefs_init.add_tags_use_specific_integration, prefs_init.add_tags_connection_type), + get_calendar_event: getCalendarEvent, + get_calendar_event_from_clipboard: getCalendarEventFromClipboard, + get_task: getTask, + spamfilter: prefs_reload.spamfilter, + summarize: prefs_reload.summarize, + translate: prefs_reload.translate, + is_chatgpt_web: (prefs_reload.connection_type === "chatgpt_web") + }); +} + 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]; @@ -506,6 +524,9 @@ messenger.runtime.onMessage.addListener((message, sender, sendResponse) => { case 'reload_menus': return _reload_menus(); break; + case 'get_active_special_ids': + return _getActiveSpecialIds(); + break; case 'shortcut_do_prompt': taLog.log("Executing shortcut, promptId: " + message.promptId); return menus.executeMenuAction(message.promptId); diff --git a/pages/menu_order/mzta-menu-order.js b/pages/menu_order/mzta-menu-order.js index 3335fa0e..55a81785 100644 --- a/pages/menu_order/mzta-menu-order.js +++ b/pages/menu_order/mzta-menu-order.js @@ -20,6 +20,7 @@ import { getPrompts, setDefaultPromptsProperties, setCustomPrompts, setSpecialPr import { i18nConditionalGet } from '../../js/mzta-utils.js'; let allPrompts = []; +let allExcludedSpecialPrompts = []; // special prompts excluded from UI (hidden + inactive features), preserved on save let currentPopupView = 'display'; // 'display' or 'compose' let hasUnsavedChanges = false; @@ -27,8 +28,14 @@ document.addEventListener('DOMContentLoaded', async () => { allPrompts = await getPrompts(false, [], true); // Exclude special prompts that are defined with show_in: "none" (internal prompts, not user-toggleable) + // and special prompts whose feature is not active (e.g. add_tags disabled, sparks not present) const hiddenSpecialIds = getHiddenSpecialPromptIds(); - allPrompts = allPrompts.filter(p => !hiddenSpecialIds.includes(p.id)); + const activeSpecialIds = await browser.runtime.sendMessage({ command: "get_active_special_ids" }); + allExcludedSpecialPrompts = allPrompts.filter(p => + hiddenSpecialIds.includes(p.id) || + (String(p.is_special) === '1' && !activeSpecialIds.includes(p.id)) + ); + allPrompts = allPrompts.filter(p => !allExcludedSpecialPrompts.some(e => e.id === p.id)); // Resolve i18n names and assign initial position_context if missing let contextPos = 1; @@ -297,7 +304,7 @@ async function saveAll() { const defaultPromptsToSave = allPrompts.filter(p => String(p.is_default) === '1' && String(p.is_special) !== '1'); const customPromptsToSave = allPrompts.filter(p => String(p.is_default) === '0' && String(p.is_special) !== '1'); - const specialPromptsToSave = allPrompts.filter(p => String(p.is_special) === '1'); + const specialPromptsToSave = allPrompts.filter(p => String(p.is_special) === '1').concat(allExcludedSpecialPrompts); await setDefaultPromptsProperties(defaultPromptsToSave); await setCustomPrompts(customPromptsToSave);