diff --git a/src/background/background.js b/src/background/background.js index 1f76e0cbf79a0a4cd3b2de0e060350ce4475b71c..be0c8146c0d5e9f201c74f66b686ac592e061558 100644 --- a/src/background/background.js +++ b/src/background/background.js @@ -10,7 +10,7 @@ const AUTH_LOGIN_URL = "https://prisms.lezinter.net/fr/login"; const AUTH_BALEX_URL = "https://prisms.lezinter.net/fr/headquarters/balex"; // ───────────────────────────────────────────────────────────────────────────── -// Logs de démarrage +// Logs de démarrage et initialisation // ───────────────────────────────────────────────────────────────────────────── log("🚀 ff2BaLex (background) chargé."); @@ -22,6 +22,11 @@ browser.runtime.onStartup.addListener(() => { log("🔄 Extension démarrée (onStartup)."); }); +browser.runtime.onInstalled.addListener(() => { + browser.storage.local.set({ extensionActive: false }); + log("🔔 Extension installée, état initialisé à désactivé."); +}); + // ───────────────────────────────────────────────────────────────────────────── // Suivi des changements dans le stockage // ───────────────────────────────────────────────────────────────────────────── @@ -225,13 +230,11 @@ browser.runtime.onMessage.addListener(async (message, sender, sendResponse) => { const tabs = await browser.tabs.query({active: true, currentWindow: true}); if (tabs[0]) { try { - // S'assurer que le script est injecté await browser.scripting.executeScript({ target: { tabId: tabs[0].id }, files: ["src/utils/highlighting.js"] }); - // Envoyer le message d'activation await browser.tabs.sendMessage(tabs[0].id, { command: message.isActive ? "activate-highlighting" : "deactivate-highlighting", lexiconId: message.lexiconId @@ -248,6 +251,14 @@ browser.runtime.onMessage.addListener(async (message, sender, sendResponse) => { log("📠Script de surlignage enregistré pour l'onglet", sender.tab.id); break; } + + case "toggleExtension": { + const newState = message.isActive; + isExtensionActive = newState; + browser.storage.local.set({ extensionActive: isExtensionActive }); + log("État de l'extension mis à jour :", isExtensionActive); + break; + } default: break; diff --git a/src/context_menu/browser_context_menu.js b/src/context_menu/browser_context_menu.js index 1486eff316d702277eae81370a8dda21ade0ac04..cd98a6f297007beac7902932d13bc43505cacf24 100644 --- a/src/context_menu/browser_context_menu.js +++ b/src/context_menu/browser_context_menu.js @@ -25,8 +25,10 @@ async function loadAuthToken() { async function createContextMenu() { await browser.contextMenus.removeAll(); - if (authToken) { - // Item 1 : Recherche dans les lexiques de l’utilisateur + const { extensionActive } = await browser.storage.local.get("extensionActive"); + log("État de l'extension :", extensionActive); + + if (extensionActive) { browser.contextMenus.create({ id: "searchInLexicons", title: "Rechercher dans mes lexiques", @@ -34,7 +36,6 @@ async function createContextMenu() { icons: { "16": "src/assets/icons/quel_lexique.png" }, }); - // Item 2 : Ajouter le mot au(x) lexique(s) de l’utilisateur browser.contextMenus.create({ id: "addToLexicon", title: "Ajouter ce mot à mes lexiques", @@ -42,30 +43,22 @@ async function createContextMenu() { icons: { "16": "src/assets/icons/ajout_lexique.png" }, }); - // Item 3 : Recherche globale de définition (Lexiques + Wiktionnaire) browser.contextMenus.create({ id: "getDefinition", title: "Obtenir une définition", contexts: ["selection"], icons: { "16": "src/assets/icons/definition.png" }, }); - } - - // Séparateur - browser.contextMenus.create({ - id: "separatorExtension", - type: "separator", - contexts: ["all"], - }); + browser.contextMenus.create({ + id: "separatorExtension", + type: "separator", + contexts: ["all"], + }); + } else { + log("âš ï¸ L'extension est désactivée, aucune option d'analyse ne sera affichée."); + } - browser.contextMenus.create({ - id: "separatorAfterExtension", - type: "separator", - contexts: ["all"], - }); - - // Item de connexion/déconnexion browser.contextMenus.create({ id: "login", title: authToken ? "Se déconnecter de BaLex" : "Se connecter à BaLex", @@ -73,10 +66,11 @@ async function createContextMenu() { }); } + loadAuthToken().then(createContextMenu); browser.runtime.onMessage.addListener((message) => { - if (message.action === "refreshUI") { + if (message.action === "refreshUI" || message.action === "updateUI") { log("🔄 refreshUI reçu dans browser_context_menu.js"); loadAuthToken().then(createContextMenu); } diff --git a/src/context_menu/custom_context_menu.js b/src/context_menu/custom_context_menu.js index 14517921997c030e0ef3fc2dc4dca615a6dd8da9..0c74f175906ad8750c62d8d3d8bcfb04c1343a10 100644 --- a/src/context_menu/custom_context_menu.js +++ b/src/context_menu/custom_context_menu.js @@ -159,7 +159,12 @@ function getSelectedWord() { /** * Affiche le menu contextuel à la position du clic. */ -function showWhiteBox(event, selectedText) { +async function showWhiteBox(event, selectedText) { + const { extensionActive } = await browser.storage.local.get("extensionActive") || { extensionActive: false }; + if (!extensionActive || !authToken) { + hideWhiteBox(); + return; + } const whiteBox = getOrCreateWhiteBox(); const selectedWordElement = document.getElementById("selectedWord"); selectedWordElement.textContent = selectedText; diff --git a/src/popup/popup.js b/src/popup/popup.js index 62250bd2e677dc160c86216a16a48a6ab3795041..0a2f83e7db5df114d0930e82b0330e7068f3150e 100644 --- a/src/popup/popup.js +++ b/src/popup/popup.js @@ -247,8 +247,12 @@ async function proceedToggleExtension() { extensionActive: false, isTrackingActive: false }); + log("État actuel de extensionActive avant changement :", extensionActive); + const newState = !extensionActive; await browser.storage.local.set({ extensionActive: newState }); + log("Nouvel état de extensionActive :", newState); + browser.runtime.sendMessage({ action: "updateUI", extensionActive: newState }); if (!newState) {