From 2b88ac155618bb36801eb8230cf2b6817fae839b Mon Sep 17 00:00:00 2001 From: sai-kamal0905 Date: Tue, 24 Feb 2026 22:51:09 +0530 Subject: [PATCH 1/2] Fix translation active state and promise handling --- src/plugins/translate/TranslationManager.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/plugins/translate/TranslationManager.js b/src/plugins/translate/TranslationManager.js index 8279a6f08..a5d907b20 100644 --- a/src/plugins/translate/TranslationManager.js +++ b/src/plugins/translate/TranslationManager.js @@ -101,10 +101,11 @@ export class TranslationManager { */ getTranslation = async (fromLang, toLang, pageIndex, paragraphIndex, text, priority) => { - this.active = true; - if (fromLang == toLang || !fromLang || !toLang) { - return; + if (fromLang == toLang || !fromLang || !toLang) { + return ""; } + this.active = true; + const key = `${fromLang}${toLang}-${pageIndex}:${paragraphIndex}`; const cachedEntry = this.alreadyTranslated.entries.find(x => x.index == key); From 06748ff9ccfaf12e3a606be914f1b34d3323b05c Mon Sep 17 00:00:00 2001 From: sai-kamal0905 Date: Tue, 24 Feb 2026 23:03:52 +0530 Subject: [PATCH 2/2] Improve translation state handling and cleanup --- src/plugins/translate/TranslationManager.js | 24 +++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/plugins/translate/TranslationManager.js b/src/plugins/translate/TranslationManager.js index a5d907b20..cd64ea1b1 100644 --- a/src/plugins/translate/TranslationManager.js +++ b/src/plugins/translate/TranslationManager.js @@ -101,13 +101,16 @@ export class TranslationManager { */ getTranslation = async (fromLang, toLang, pageIndex, paragraphIndex, text, priority) => { + if (!this.translator) { //Ensure translator is initialized before use + await this.initWorker(); +} if (fromLang == toLang || !fromLang || !toLang) { return ""; - } - this.active = true; + } + this.active = true; //Moved active = true after validation to avoid setting active when no translation is performed (prevents infinite loading state). const key = `${fromLang}${toLang}-${pageIndex}:${paragraphIndex}`; - const cachedEntry = this.alreadyTranslated.entries.find(x => x.index == key); + const cachedEntry = this.alreadyTranslated.entries.find(x => x.index == key); //If Cache supports .get() method, better use that. if (cachedEntry) { return cachedEntry.response; @@ -130,10 +133,11 @@ export class TranslationManager { reject: _reject, }; - if (!text) { + if (!text) { //Handle empty text safely this.currentlyTranslating[key].reject("No text was provided"); + delete this.currentlyTranslating[key]; return promise; - } +} this.translator.translate({ to: toLang, from: fromLang, @@ -144,7 +148,15 @@ export class TranslationManager { const response = resp; this.currentlyTranslating[key].resolve(response.target.text); this.alreadyTranslated.add({index: key, response: response.target.text}); - delete this.currentlyTranslating[key]; + }).catch((error) => { + console.error("Translation failed:", error); + this.currentlyTranslating[key].reject(error); + }) + .finally(() => { //Proper cleanup after translation completes + delete this.currentlyTranslating[key]; + if (Object.keys(this.currentlyTranslating).length === 0) { + this.active = false; + } }); return promise;