Manage the options when using the API. Fixes #93

This commit is contained in:
mic 2024-07-22 23:00:35 +02:00
parent 94e5398b02
commit 283e6fda3d
8 changed files with 142 additions and 38 deletions

View file

@ -386,5 +386,21 @@
"customprompts_form_label_define_response_lang": { "customprompts_form_label_define_response_lang": {
"message": "Definieren Sie die Antwortsprache im Prompt.", "message": "Definieren Sie die Antwortsprache im Prompt.",
"description": "" "description": ""
},
"prefs_Connection_type": {
"message": "Verbindungstyp",
"description": ""
},
"prefs_Connection_type_ChatGTP_Web": {
"message": "ChatGTP Weboberfläche",
"description": ""
},
"prefs_Connection_type_ChatGTP_API": {
"message": "ChatGTP OpenAI API",
"description": ""
},
"prefs_prefs_ChatGPT_API_Key": {
"message": "ChatGPT API-Schlüssel",
"description": ""
} }
} }

View file

@ -386,5 +386,21 @@
"customprompts_form_label_define_response_lang": { "customprompts_form_label_define_response_lang": {
"message": "Define the reponse languange in the prompt", "message": "Define the reponse languange in the prompt",
"description": "" "description": ""
},
"prefs_Connection_type": {
"message": "Connection Type",
"description": ""
},
"prefs_Connection_type_ChatGTP_Web": {
"message": "ChatGTP Web Interface",
"description": ""
},
"prefs_Connection_type_ChatGTP_API": {
"message": "ChatGTP OpenAI API",
"description": ""
},
"prefs_prefs_ChatGPT_API_Key": {
"message": "ChatGPT API Key",
"description": ""
} }
} }

View file

@ -386,5 +386,21 @@
"customprompts_form_label_define_response_lang": { "customprompts_form_label_define_response_lang": {
"message": "Définir la langue de réponse dans le prompt.", "message": "Définir la langue de réponse dans le prompt.",
"description": "" "description": ""
},
"prefs_Connection_type": {
"message": "Type de connexion",
"description": ""
},
"prefs_Connection_type_ChatGTP_Web": {
"message": "Interface Web ChatGTP",
"description": ""
},
"prefs_Connection_type_ChatGTP_API": {
"message": "API OpenAI ChatGTP",
"description": ""
},
"prefs_prefs_ChatGPT_API_Key": {
"message": "Clé API ChatGPT",
"description": ""
} }
} }

View file

@ -386,5 +386,21 @@
"customprompts_form_label_define_response_lang": { "customprompts_form_label_define_response_lang": {
"message": "Definisci la lingua di risposta nel prompt.", "message": "Definisci la lingua di risposta nel prompt.",
"description": "" "description": ""
},
"prefs_Connection_type": {
"message": "Tipo di connessione",
"description": ""
},
"prefs_Connection_type_ChatGTP_Web": {
"message": "Interfaccia Web ChatGTP",
"description": ""
},
"prefs_Connection_type_ChatGTP_API": {
"message": "API OpenAI per ChatGTP",
"description": ""
},
"prefs_prefs_ChatGPT_API_Key": {
"message": "Chiave API ChatGPT",
"description": ""
} }
} }

View file

@ -147,7 +147,8 @@ async function openChatGPT(promptText, action, curr_tabId, prompt_name = '', do_
return; return;
} }
if(!prefs.api_active){ switch(prefs.connection_type){
case 'chatgpt_web':
// We are using the ChatGPT web interface // We are using the ChatGPT web interface
let newWindow = await browser.windows.create({ let newWindow = await browser.windows.create({
url: "https://chatgpt.com", url: "https://chatgpt.com",
@ -198,34 +199,35 @@ async function openChatGPT(promptText, action, curr_tabId, prompt_name = '', do_
.catch(err => { .catch(err => {
console.error("[ThunderAI] ChatGPT web interface error injecting the script: ", err); console.error("[ThunderAI] ChatGPT web interface error injecting the script: ", err);
}); });
}else{ break; // chatgpt_web
case 'chatgpt_api':
// We are using the ChatGPT API // We are using the ChatGPT API
let newWindow = await browser.windows.create({ let newWindow2 = await browser.windows.create({
url: browser.runtime.getURL('api_webchat/index.html'), url: browser.runtime.getURL('api_webchat/index.html'),
type: "popup", type: "popup",
width: prefs.chatgpt_win_width, width: prefs.chatgpt_win_width,
height: prefs.chatgpt_win_height height: prefs.chatgpt_win_height
}); });
createdWindowID = newWindow.id; createdWindowID = newWindow2.id;
let createdTab = newWindow.tabs[0]; let createdTab2 = newWindow2.tabs[0];
// Wait for tab loaded. // TODO This is needed in 128+, but doesn't work in 115 // Wait for tab loaded. // TODO This is needed in 128+, but doesn't work in 115
// await new Promise(resolve => { // await new Promise(resolve => {
// const tabIsLoaded = tab => { // const tabIsLoaded2 = tab => {
// return tab.status == "complete" && tab.url != "about:blank"; // return tab.status == "complete" && tab.url != "about:blank";
// }; // };
// const listener = (tabId, changeInfo, updatedTab) => { // const listener2 = (tabId, changeInfo, updatedTab) => {
// if (tabIsLoaded(updatedTab)) { // if (tabIsLoaded2(updatedTab)) {
// browser.tabs.onUpdated.removeListener(listener); // browser.tabs.onUpdated.removeListener(listener2);
// resolve(); // resolve();
// } // }
// } // }
// // Early exit if loaded already // // Early exit if loaded already
// if (tabIsLoaded(createdTab)) { // if (tabIsLoaded2(createdTab2)) {
// resolve(); // resolve();
// } else { // } else {
// browser.tabs.onUpdated.addListener(listener); // browser.tabs.onUpdated.addListener(listener2);
// } // }
// }); // });
@ -233,7 +235,8 @@ async function openChatGPT(promptText, action, curr_tabId, prompt_name = '', do_
let mailMessageId = -1; let mailMessageId = -1;
if(mailMessage) mailMessageId = mailMessage.id; if(mailMessage) mailMessageId = mailMessage.id;
browser.tabs.sendMessage(createdTab.id, { command: "chatgpt_send", prompt: promptText, action: action, tabId: curr_tabId, mailMessageId: mailMessageId}); browser.tabs.sendMessage(createdTab2.id, { command: "chatgpt_send", prompt: promptText, action: action, tabId: curr_tabId, mailMessageId: mailMessageId});
break; // chatgpt_api
} }
} }

View file

@ -22,6 +22,6 @@ export const prefs_default = {
chatpgt_use_gpt4: false, chatpgt_use_gpt4: false,
chatgpt_keep_formatting: false, chatgpt_keep_formatting: false,
default_chatgpt_lang: '', default_chatgpt_lang: '',
api_active: false, connection_type: 'chatgpt_web', //Other values: 'chatgpt_api'
api_key_chatgpt: '', api_key_chatgpt: '',
} }

View file

@ -6,7 +6,7 @@
</head> </head>
<body> <body>
<div id="miczRelNotes"><a href="mzta-release-notes.html">__MSG_prefs_OptionText_release_notes__</a></div> <div id="miczRelNotes"><a href="mzta-release-notes.html">__MSG_prefs_OptionText_release_notes__</a></div>
<div id="miczStatusPage"><a href="https://micz.it/thunderbird-addon-thunderai/status/">__MSG_prefs_status_page__</a></div> <div id="miczStatusPage" class="conntype_chatgpt_web"><a href="https://micz.it/thunderbird-addon-thunderai/status/">__MSG_prefs_status_page__</a></div>
<table id="miczPrefs"> <table id="miczPrefs">
<tr> <tr>
<td><span>__MSG_prefs_OptionText_chatgpt_win_text__</span></td> <td><span>__MSG_prefs_OptionText_chatgpt_win_text__</span></td>
@ -60,6 +60,22 @@
</td> </td>
</tr> </tr>
<tr> <tr>
<td>
<label>
<span>__MSG_prefs_Connection_type__</span>
</label>
</td>
<td>
<label>
<select id="connection_type" name="connection_type" class="option-input">
<option value="chatgpt_web">__MSG_prefs_Connection_type_ChatGTP_Web__</option>
<option value="chatgpt_api">__MSG_prefs_Connection_type_ChatGTP_API__</option>
</select>
</label>
</td>
</tr>
<tr>
<tr class="conntype_chatgpt_web">
<td><label> <td><label>
<span>__MSG_prefs_OptionText_chatpgt_keep_formatting__</span> <span>__MSG_prefs_OptionText_chatpgt_keep_formatting__</span>
</label></td> </label></td>
@ -70,7 +86,7 @@
</label> </label>
</td> </td>
</tr> </tr>
<tr> <tr class="conntype_chatgpt_web">
<td><label> <td><label>
<span>__MSG_prefs_OptionText_chatpgt_use_gpt4__</span> <span>__MSG_prefs_OptionText_chatpgt_use_gpt4__</span>
</label></td> </label></td>
@ -81,24 +97,13 @@
</label> </label>
</td> </td>
</tr> </tr>
<tr> <tr class="conntype_chatgpt_api">
<td><label> <td><label>
<span>API Activate</span> <span>__MSG_prefs_ChatGPT_API_Key__</span>
</label></td> </label></td>
<td> <td>
<label> <label>
<input type="checkbox" id="api_active" name="api_active" class="option-input" /> <input type="text" id="api_key_chatgpt" name="api_key_chatgpt" class="option-input" style="width:28em" />
&nbsp;<span>Use that OpenAI API!</span>
</label>
</td>
</tr>
<tr>
<td><label>
<span>ChatGPT API Key</span>
</label></td>
<td>
<label>
<input type="text" id="api_key_chatgpt" name="api_key_chatgpt" class="option-input" />
&nbsp;<span></span> &nbsp;<span></span>
</label> </label>
</td> </td>

View file

@ -45,9 +45,10 @@ function saveOptions(e) {
browser.storage.sync.set(options); browser.storage.sync.set(options);
} }
function restoreOptions() { async function restoreOptions() {
function setCurrentChoice(result) { function setCurrentChoice(result) {
document.querySelectorAll(".option-input").forEach(element => { document.querySelectorAll(".option-input").forEach(element => {
//console.log("[ThunderAI] Options restoring " + element.id + " = " + result[element.id]);
switch (element.type) { switch (element.type) {
case 'checkbox': case 'checkbox':
element.checked = result[element.id] || false; element.checked = result[element.id] || false;
@ -67,6 +68,7 @@ function restoreOptions() {
if (element.tagName === 'SELECT') { if (element.tagName === 'SELECT') {
let default_select_value = ''; let default_select_value = '';
if(element.id == 'reply_type') default_select_value = 'reply_all'; if(element.id == 'reply_type') default_select_value = 'reply_all';
if(element.id == 'connection_type') default_select_value = 'chatgpt_web';
element.value = result[element.id] || default_select_value; element.value = result[element.id] || default_select_value;
if (element.value === '') { if (element.value === '') {
element.selectedIndex = -1; element.selectedIndex = -1;
@ -78,20 +80,47 @@ function restoreOptions() {
}); });
} }
function onError(error) { let getting = await browser.storage.sync.get(prefs_default);
console.log(`[ThunderAI] Error: ${error}`); setCurrentChoice(getting);
}
let getting = browser.storage.sync.get(null);
getting.then(setCurrentChoice, onError);
} }
document.addEventListener('DOMContentLoaded', () => { function showConnectionOptions() {
restoreOptions(); let chatgpt_web_display = 'table-row';
let chatgpt_api_display = 'none';
if (document.getElementById("connection_type").value === "chatgpt_web") {
chatgpt_web_display = 'table-row';
}else{
chatgpt_web_display = 'none';
}
if (document.getElementById("connection_type").value === "chatgpt_api") {
chatgpt_api_display = 'table-row';
}else{
chatgpt_api_display = 'none';
}
document.querySelectorAll(".conntype_chatgpt_web").forEach(element => {
element.style.display = chatgpt_web_display;
});
document.querySelectorAll(".conntype_chatgpt_api").forEach(element => {
element.style.display = chatgpt_api_display;
});
}
function warnAPIKeyEmpty() {
let apiKeyInput = document.getElementById('api_key_chatgpt');
if(apiKeyInput.value === ''){
apiKeyInput.style.border = '2px solid red';
}else{
apiKeyInput.style.border = 'none';
}
}
document.addEventListener('DOMContentLoaded', async () => {
await restoreOptions();
i18n.updateDocument(); i18n.updateDocument();
document.querySelectorAll(".option-input").forEach(element => { document.querySelectorAll(".option-input").forEach(element => {
element.addEventListener("change", saveOptions); element.addEventListener("change", saveOptions);
}); });
showConnectionOptions();
document.getElementById('btnManagePrompts').addEventListener('click', () => { document.getElementById('btnManagePrompts').addEventListener('click', () => {
// check if the tab is already there // check if the tab is already there
browser.tabs.query({url: browser.runtime.getURL('../customprompts/mzta-custom-prompts.html')}).then((tabs) => { browser.tabs.query({url: browser.runtime.getURL('../customprompts/mzta-custom-prompts.html')}).then((tabs) => {
@ -104,4 +133,7 @@ document.addEventListener('DOMContentLoaded', () => {
} }
}) })
}); });
document.getElementById("connection_type").addEventListener("change", showConnectionOptions);
document.getElementById("connection_type").addEventListener("change", warnAPIKeyEmpty);
document.getElementById("api_key_chatgpt").addEventListener("change", warnAPIKeyEmpty);
}, { once: true }); }, { once: true });