migrateMenuOrderAlphabetic implemented. see #680
This commit is contained in:
parent
8522a28a7d
commit
a98e2edafe
2 changed files with 49 additions and 1 deletions
|
|
@ -674,6 +674,52 @@ export function getHiddenSpecialPromptIds() {
|
|||
return specialPrompts.filter(p => p.show_in === "none").map(p => p.id);
|
||||
}
|
||||
|
||||
// Migration: if dynamic_menu_order_alphabet was true (or unset), assign initial positions
|
||||
// so that prompts appear alphabetically with special prompts first, then disable the flag
|
||||
// to switch to position-based ordering permanently.
|
||||
export async function migrateMenuOrderAlphabetic() {
|
||||
const prefs = await browser.storage.sync.get({ dynamic_menu_order_alphabet: true });
|
||||
if (!prefs.dynamic_menu_order_alphabet) {
|
||||
return;
|
||||
}
|
||||
|
||||
const allPrompts = await getPrompts(false, [], true);
|
||||
const hiddenSpecialIds = getHiddenSpecialPromptIds();
|
||||
const visiblePrompts = allPrompts.filter(p => !hiddenSpecialIds.includes(p.id));
|
||||
|
||||
const resolveName = (p) => {
|
||||
const n = p.name || '';
|
||||
if (n.startsWith('__MSG_') && n.endsWith('__')) {
|
||||
return browser.i18n.getMessage(n.substring(6, n.length - 2));
|
||||
}
|
||||
return n;
|
||||
};
|
||||
|
||||
const specials = visiblePrompts.filter(p => String(p.is_special) === '1')
|
||||
.sort((a, b) => resolveName(a).localeCompare(resolveName(b)));
|
||||
const others = visiblePrompts.filter(p => String(p.is_special) !== '1')
|
||||
.sort((a, b) => resolveName(a).localeCompare(resolveName(b)));
|
||||
const ordered = specials.concat(others);
|
||||
|
||||
ordered.forEach((prompt, idx) => {
|
||||
const pos = idx + 1;
|
||||
prompt.position_display = pos;
|
||||
prompt.position_compose = pos;
|
||||
prompt.position_context = pos;
|
||||
});
|
||||
|
||||
const defaultPromptsToSave = ordered.filter(p => String(p.is_default) === '1' && String(p.is_special) !== '1');
|
||||
const customPromptsToSave = ordered.filter(p => String(p.is_default) === '0' && String(p.is_special) !== '1');
|
||||
const visibleSpecialsToSave = ordered.filter(p => String(p.is_special) === '1');
|
||||
const hiddenSpecialsToPreserve = allPrompts.filter(p => hiddenSpecialIds.includes(p.id));
|
||||
|
||||
await setDefaultPromptsProperties(defaultPromptsToSave);
|
||||
await setCustomPrompts(customPromptsToSave);
|
||||
await setSpecialPrompts(visibleSpecialsToSave.concat(hiddenSpecialsToPreserve));
|
||||
|
||||
await browser.storage.sync.set({ dynamic_menu_order_alphabet: false });
|
||||
}
|
||||
|
||||
export async function getSpamFilterPrompt(){
|
||||
return (await getSpecialPrompts()).find(prompt => prompt.id == 'prompt_spamfilter');
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,7 +53,8 @@ import {
|
|||
import { taPromptUtils } from './js/mzta-utils-prompt.js';
|
||||
import { mzta_specialCommand } from './js/mzta-special-commands.js';
|
||||
import {
|
||||
getSpamFilterPrompt
|
||||
getSpamFilterPrompt,
|
||||
migrateMenuOrderAlphabetic
|
||||
} from './js/mzta-prompts.js';
|
||||
import { taSpamReport } from './js/mzta-spamreport.js';
|
||||
import { taSummaryStore } from './js/mzta-summarystore.js';
|
||||
|
|
@ -1571,6 +1572,7 @@ function setupPermissionsRemovedListener() {
|
|||
setupPermissionsRemovedListener();
|
||||
|
||||
// Menus handling
|
||||
await migrateMenuOrderAlphabetic();
|
||||
const menus = new mzta_Menus(openChatGPT, prefs_init.do_debug);
|
||||
menus.loadMenus(special_prompts_ids);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue