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);
|
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(){
|
export async function getSpamFilterPrompt(){
|
||||||
return (await getSpecialPrompts()).find(prompt => prompt.id == 'prompt_spamfilter');
|
return (await getSpecialPrompts()).find(prompt => prompt.id == 'prompt_spamfilter');
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,8 @@ import {
|
||||||
import { taPromptUtils } from './js/mzta-utils-prompt.js';
|
import { taPromptUtils } from './js/mzta-utils-prompt.js';
|
||||||
import { mzta_specialCommand } from './js/mzta-special-commands.js';
|
import { mzta_specialCommand } from './js/mzta-special-commands.js';
|
||||||
import {
|
import {
|
||||||
getSpamFilterPrompt
|
getSpamFilterPrompt,
|
||||||
|
migrateMenuOrderAlphabetic
|
||||||
} from './js/mzta-prompts.js';
|
} from './js/mzta-prompts.js';
|
||||||
import { taSpamReport } from './js/mzta-spamreport.js';
|
import { taSpamReport } from './js/mzta-spamreport.js';
|
||||||
import { taSummaryStore } from './js/mzta-summarystore.js';
|
import { taSummaryStore } from './js/mzta-summarystore.js';
|
||||||
|
|
@ -1571,6 +1572,7 @@ function setupPermissionsRemovedListener() {
|
||||||
setupPermissionsRemovedListener();
|
setupPermissionsRemovedListener();
|
||||||
|
|
||||||
// Menus handling
|
// Menus handling
|
||||||
|
await migrateMenuOrderAlphabetic();
|
||||||
const menus = new mzta_Menus(openChatGPT, prefs_init.do_debug);
|
const menus = new mzta_Menus(openChatGPT, prefs_init.do_debug);
|
||||||
menus.loadMenus(special_prompts_ids);
|
menus.loadMenus(special_prompts_ids);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue