diff --git a/public/scripts/extensions/translate/index.js b/public/scripts/extensions/translate/index.js index 5b1e1f009..668c6d2e2 100644 --- a/public/scripts/extensions/translate/index.js +++ b/public/scripts/extensions/translate/index.js @@ -1,4 +1,13 @@ -import { eventSource, event_types, getRequestHeaders, messageFormatting, saveSettingsDebounced, substituteParams } from "../../../script.js"; +import { + callPopup, + eventSource, + event_types, + getRequestHeaders, + messageFormatting, + reloadCurrentChat, + saveSettingsDebounced, + substituteParams, +} from "../../../script.js"; import { extension_settings, getContext } from "../../extensions.js"; const autoModeOptions = { @@ -217,6 +226,54 @@ function createEventHandler(translateFunction, shouldTranslateFunction) { }; } +// Prevents the chat from being translated in parallel +let translateChatExecuting = false; + +async function onTranslateChatClick() { + if (translateChatExecuting) { + return; + } + + try { + translateChatExecuting = true; + const context = getContext(); + const chat = context.chat; + + toastr.info(`${chat.length} message(s) queued for translation.`, 'Please wait...'); + + for (let i = 0; i < chat.length; i++) { + await translateIncomingMessage(i); + } + + await context.saveChat(); + } catch (error) { + console.log(error); + toastr.error('Failed to translate chat'); + } finally { + translateChatExecuting = false; + } +} + +async function onTranslationsClearClick() { + const confirm = await callPopup('