custom prompts: added base methods. see #12

This commit is contained in:
mic 2024-05-07 22:36:44 +02:00
parent 0bb946a555
commit 5ecc13ad20
2 changed files with 81 additions and 8 deletions

View file

@ -18,11 +18,12 @@
// Some original methods are derived from https://github.com/ali-raheem/Aify/blob/cfadf52f576b7be3720b5b73af7c8d3129c054da/plugin/html/actions.js
import { defaultPrompts } from './mzta-prompts.js';
import { getPrompts } from './mzta-prompts.js';
import { getLanguageDisplayName } from './mzta-utils.js'
export class mzta_Menus {
allPrompts = [];
openChatGPT = null;
menu_context_compose = 'compose_action_menu';
menu_context_display = 'message_display_action_menu';
@ -34,7 +35,13 @@ export class mzta_Menus {
constructor(openChatGPT) {
this.openChatGPT = openChatGPT;
defaultPrompts.forEach((prompt) => {
this.allPrompts = [];
}
async initialize() {
this.allPrompts = await getPrompts();
this.allPrompts.forEach((prompt) => {
this.addAction(prompt)
});
//this.addMenu(this.rootMenu);
@ -105,7 +112,8 @@ export class mzta_Menus {
}
}
loadMenus() {
async loadMenus() {
await this.initialize();
this.addMenu(this.rootMenu);
let listeners = this.menu_listeners;
browser.menus.onClicked.addListener((info, tab) => {
@ -136,7 +144,7 @@ export class mzta_Menus {
};
getContexts(id){
const curr_prompt = defaultPrompts.find(p => p.id === id);
const curr_prompt = this.allPrompts.find(p => p.id === id);
if (!curr_prompt) {
return [];
}
@ -154,7 +162,7 @@ export class mzta_Menus {
}
getCustomTextAttribute(id){
const curr_prompt = defaultPrompts.find(p => p.id === id);
const curr_prompt = this.allPrompts.find(p => p.id === id);
if (!curr_prompt) {
return "";
}

View file

@ -16,9 +16,13 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// Modified version derived from https://github.com/ali-raheem/Aify/blob/13ff87583bc520fb80f555ab90a90c5c9df797a7/plugin/html/globals.js
// Modified prompts text derived from https://github.com/ali-raheem/Aify/blob/13ff87583bc520fb80f555ab90a90c5c9df797a7/plugin/html/globals.js
/* Types (type attribute):
/* ================= PROMPTS PROPERTIES ========================================
================ BASE PROPERTIES
Types (type attribute):
0: always show (when composing a part of the text must be selected if need_selected = 1)
1: show when reading an email
2: show when composing a mail (a part of the text must be selected if need_selected = 1)
@ -39,9 +43,18 @@
Custom Text (need_custom_text attribute):
0: No custom text needed
1: Custom text needed
================ USER PROPERTIES
Enabled (enabled attribute):
0: Disabled
1: Enabled
Position (position attribute):
<num>: position number
*/
export const defaultPrompts = [
const defaultPrompts = [
{
id: 'prompt_reply',
name: "__MSG_prompt_reply__",
@ -113,3 +126,55 @@ export const defaultPrompts = [
need_custom_text: 0,
},
];
export async function getPrompts(){
//return await Promise.all([getDefaultPrompts_withProps(), getCustomPrompts()]).then(([defaultPrompts, customPrompts]) => [...defaultPrompts, ...customPrompts]);
const defaultPrompts = await getDefaultPrompts_withProps();
const customPrompts = await getCustomPrompts();
return defaultPrompts.concat(customPrompts);
}
async function getDefaultPrompts_withProps() {
let prefs = await browser.storage.sync.get({_default_prompts_properties: null});
let defaultPrompts_prop = [...defaultPrompts];
if(prefs._default_prompts_properties === null){ // no default prompts properties saved
let pos = 1;
defaultPrompts_prop.forEach((prompt) => {
prompt.position = pos;
prompt.enabled = 1;
pos++;
})
} else { // we have saved the default prompts properties
defaultPrompts_prop.forEach((prompt) => {
prompt.position = prefs._default_prompts_properties[prompt.id].position;
prompt.enabled = prefs._default_prompts_properties[prompt.id].enabled;
})
}
return defaultPrompts_prop;
}
async function getCustomPrompts() {
let prefs = await browser.storage.sync.get({_custom_prompt: null});
if(prefs._custom_prompt === null){
return [];
} else {
return prefs._custom_prompt;
}
}
export async function setDefaultPromptsProperties(prompts) {
let default_prompts_properties = {};
prompts.forEach((prompt) => {
default_prompts_properties[prompt.id] = {position: prompt.position, enabled: prompt.enabled};
});
await browser.storage.sync.set({_default_prompts_properties: default_prompts_properties});
}
export async function setCustomPrompts(prompts) {
await browser.storage.sync.set({_custom_prompt: prompts});
}