// Hintergrund-Skript: Button + Kontextmenü, öffnet den Ablage-Dialog. const DIALOG_URL = "dialog/dialog.html"; function openDialog(messageIds) { const ids = Array.isArray(messageIds) ? messageIds : [messageIds]; // Pro Nachricht ein eigenes Ablagefenster (leicht versetzt gestapelt). ids.forEach((id, i) => { const url = browser.runtime.getURL(`${DIALOG_URL}?messageId=${id}`); browser.windows.create({ url, type: "popup", width: 720, height: 820, left: 100 + i * 28, top: 80 + i * 28, }); }); } // Button in der geöffneten Nachricht browser.messageDisplayAction.onClicked.addListener(async (tab) => { const msg = await browser.messageDisplay.getDisplayedMessage(tab.id); if (msg) openDialog([msg.id]); }); // Kontextmenü-Eintrag in der Nachrichtenliste browser.menus.create({ id: "docuware-archive", title: "In DocuWare ablegen", contexts: ["message_list"], }); browser.menus.onClicked.addListener((info) => { if (info.menuItemId !== "docuware-archive") return; const msgs = info.selectedMessages && info.selectedMessages.messages; if (msgs && msgs.length > 0) openDialog(msgs.map((m) => m.id)); }); // Tastenkürzel (Strg+Alt+I): angezeigte bzw. alle markierten Nachrichten ablegen. browser.commands.onCommand.addListener(async (command) => { if (command !== "open-archive-dialog") return; const ids = await currentMessageIds(); if (ids.length) openDialog(ids); }); // Ermittelt die "aktiven" Nachrichten: erst die im Reader angezeigte, sonst // alle im Nachrichtenlisten-Tab markierten. async function currentMessageIds() { try { const [tab] = await browser.tabs.query({ active: true, currentWindow: true }); if (tab) { const shown = await browser.messageDisplay .getDisplayedMessage(tab.id) .catch(() => null); if (shown) return [shown.id]; } const sel = await browser.mailTabs.getSelectedMessages().catch(() => null); if (sel && sel.messages && sel.messages.length) return sel.messages.map((m) => m.id); } catch (_) {} return []; }