From edb979a1b2dd01beea8ff989ba47823fbf044389 Mon Sep 17 00:00:00 2001 From: Kendrick Bollens Date: Wed, 3 Jun 2026 14:02:56 +0200 Subject: [PATCH] =?UTF-8?q?Toolbar-Button=20Fix,=20QuickMove-Tab,=20Schlag?= =?UTF-8?q?w=C3=B6rter-Sync,=20Abteilungsverwaltung?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Toolbar-Button öffnet Settings via browserAction.onClicked statt defektem Popup - Button-Label "Vorlagen & Signaturen" statt Icon - Tab "Erledigt" → "QuickMove" umbenannt - QuickMove: E-Mails markieren + in Zielordner verschieben - Schlagwörter-Sync aus Gitea (_config/schlagwoerter.json) - Abteilungen anlegen (+Button) - attachSignature-Fix entfernt - message_display_action für QuickMove-Button Co-Authored-By: Claude Opus 4.6 (1M context) --- background.js | 106 +++++++++++++++- lib/gitea-sync.js | 151 ++++++++++++++++++++-- manifest.json | 25 +++- message_popup.html | 50 ++++++++ message_popup.js | 21 ++++ templates-reply-hotel.xpi | Bin 430248 -> 435300 bytes templates_options/templates_options.html | 20 +++ templates_options/templates_options.js | 152 +++++++++++++++++++++-- toolbar_popup.html | 9 ++ 9 files changed, 509 insertions(+), 25 deletions(-) create mode 100644 message_popup.html create mode 100644 message_popup.js create mode 100644 toolbar_popup.html diff --git a/background.js b/background.js index 8465da5..0274d07 100644 --- a/background.js +++ b/background.js @@ -1,5 +1,109 @@ +// ── Toolbar button: open settings page ── + +browser.browserAction.onClicked.addListener(() => { + browser.runtime.openOptionsPage(); +}); + +// ── "Erledigt" button in message display ── + +async function executeErledigtAction(tab, actionConfig) { + const message = await messenger.messageDisplay.getDisplayedMessage(tab.id); + if (!message) { + browser.notifications.create({ type: 'basic', iconUrl: browser.runtime.getURL('icons/icon.png'), title: 'Fehler', message: 'Keine Nachricht ausgewählt.' }); + return; + } + + const storage = await browser.storage.local.get(['gitea_config', 'schlagwoerter_cache']); + const config = storage.gitea_config || {}; + const schlagwoerter = storage.schlagwoerter_cache; + + // Apply user's tag + let tagKey = null; + if (Array.isArray(schlagwoerter) && config.authorName) { + const match = schlagwoerter.find(u => u.name.toLowerCase() === config.authorName.toLowerCase()); + if (match) { + tagKey = `$hps_${match.name.toLowerCase().replace(/\s+/g, '_')}`; + } + } + + if (tagKey) { + const currentTags = message.tags || []; + if (!currentTags.includes(tagKey)) { + await messenger.messages.update(message.id, { tags: [...currentTags, tagKey] }); + } + } + + // Move to target folder + if (actionConfig.targetFolder) { + const folderInfo = JSON.parse(actionConfig.targetFolder); + await messenger.messages.move([message.id], folderInfo); + } + + // Feedback + const parts = []; + if (tagKey) parts.push('markiert'); + if (actionConfig.targetFolder) parts.push('verschoben'); + const title = actionConfig.name || 'Erledigt'; + browser.notifications.create({ + type: 'basic', + iconUrl: browser.runtime.getURL('icons/icon.png'), + title, + message: parts.length ? `Nachricht ${parts.join(' & ')}.` : 'Kein Schlagwort oder Zielordner konfiguriert.' + }); +} + +// Single action: direct click without popup +messenger.messageDisplayAction.onClicked.addListener(async (tab) => { + try { + const result = await browser.storage.local.get('erledigt_config'); + const actions = (result.erledigt_config || {}).actions || []; + await executeErledigtAction(tab, actions[0] || {}); + } catch (e) { + console.error('Erledigt-Button Fehler:', e); + browser.notifications.create({ type: 'basic', iconUrl: browser.runtime.getURL('icons/icon.png'), title: 'Fehler', message: e.message }); + } +}); + +// Toggle popup vs direct click based on action count +async function updateErledigtPopup() { + const result = await browser.storage.local.get('erledigt_config'); + const actions = (result.erledigt_config || {}).actions || []; + if (actions.length > 1) { + await messenger.messageDisplayAction.setPopup({ popup: 'message_popup.html' }); + await messenger.messageDisplayAction.setTitle({ title: 'Aktion wählen' }); + } else { + await messenger.messageDisplayAction.setPopup({ popup: '' }); + await messenger.messageDisplayAction.setTitle({ title: actions[0]?.name || 'Erledigt' }); + } +} + +// Update on config change +browser.storage.onChanged.addListener((changes, area) => { + if (area === 'local' && changes.erledigt_config) updateErledigtPopup(); +}); +updateErledigtPopup(); + +// ── Template insertion ── + browser.runtime.onMessage.addListener((msg, sender, sendResponse) => { - if (msg.action !== 'insertTemplate') return false; + if (msg.action === 'erledigtAction') { + (async () => { + try { + const [tab] = await browser.tabs.query({ active: true, currentWindow: true }); + const result = await browser.storage.local.get('erledigt_config'); + const actions = (result.erledigt_config || {}).actions || []; + const action = actions[msg.index] || {}; + await executeErledigtAction(tab, action); + sendResponse({ success: true }); + } catch (e) { + console.error('Erledigt-Action Fehler:', e); + browser.notifications.create({ type: 'basic', iconUrl: browser.runtime.getURL('icons/icon.png'), title: 'Fehler', message: e.message }); + sendResponse({ success: false, error: e.message }); + } + })(); + return true; + } + if (msg.action !== 'insertTemplate') return; handleInsertTemplate(msg).then(() => sendResponse()) .catch(err => sendResponse({ error: err.message })); diff --git a/lib/gitea-sync.js b/lib/gitea-sync.js index 52747d2..e81e8c0 100644 --- a/lib/gitea-sync.js +++ b/lib/gitea-sync.js @@ -8,6 +8,7 @@ const FULL_SYNC_COOLDOWN_MS = 10 * 1000; // min 10s between full pulls const SHARED_FOLDER = '_gemeinsam'; const USER_FOLDER = '_benutzer'; const CONFIG_FOLDER = '_config'; +const SCHLAGWOERTER_CACHE_KEY = 'schlagwoerter_cache'; // ── Gitea API Client ── @@ -146,6 +147,16 @@ class GiteaClient { return null; } } + + async getSchlagwoerter() { + const data = await this.getFile(`${CONFIG_FOLDER}/schlagwoerter.json`); + if (!data) return null; + try { + return JSON.parse(GiteaClient.fromBase64(data.content)); + } catch (_) { + return null; + } + } } // ── Sync Manager ── @@ -545,7 +556,6 @@ class SyncManager { await browser.identities.update(identity.id, { signature: fullSig, signatureIsPlainText: false, - attachSignature: false }); updated++; } @@ -563,7 +573,6 @@ class SyncManager { await browser.identities.update(id, { signature: fullSig, signatureIsPlainText: false, - attachSignature: false }); loadedHeaders[email] = srcHeader; updated++; @@ -685,6 +694,98 @@ class SyncManager { return { success: true }; } + static hslToHex(h, s, l) { + s /= 100; l /= 100; + const a = s * Math.min(l, 1 - l); + const f = n => { const k = (n + h / 30) % 12; return l - a * Math.max(-1, Math.min(k - 3, 9 - k, 1)); }; + const toHex = x => Math.round(x * 255).toString(16).padStart(2, '0'); + return `#${toHex(f(0))}${toHex(f(8))}${toHex(f(4))}`; + } + + /** + * Sync Schlagwörter (tags) from Gitea config to Thunderbird. + * Auto-registers the current user if not yet listed. + * Tags are never removed so they remain traceable forever. + * Format: [ {"name": "Kenny", "color": "#e74c3c"}, ... ] + */ + async syncTags() { + if (!this.isConfigured) return { success: true, created: 0, updated: 0 }; + + const userName = this.config.authorName; + + // Pull current file (may be null if it doesn't exist yet) + const fileData = await this.client.getFile(`${CONFIG_FOLDER}/schlagwoerter.json`); + let schlagwoerter = []; + let fileSha = null; + if (fileData) { + fileSha = fileData.sha; + try { schlagwoerter = JSON.parse(GiteaClient.fromBase64(fileData.content)); } catch (_) {} + } + if (!Array.isArray(schlagwoerter)) schlagwoerter = []; + + // Auto-register current user if not yet listed + let pushed = false; + if (userName) { + const exists = schlagwoerter.some(u => u.name.toLowerCase() === userName.toLowerCase()); + if (!exists) { + const hue = Math.abs([...userName].reduce((h, c) => ((h << 5) - h + c.charCodeAt(0)) | 0, 0)) % 360; + const color = SyncManager.hslToHex(hue, 65, 45); + schlagwoerter.push({ name: userName, color }); + + const json = JSON.stringify(schlagwoerter, null, 2); + const commitMsg = `Schlagwort für ${userName} hinzugefügt`; + if (fileSha) { + await this.client.updateFile(`${CONFIG_FOLDER}/schlagwoerter.json`, json, fileSha, commitMsg); + } else { + await this.client.createFile(`${CONFIG_FOLDER}/schlagwoerter.json`, json, commitMsg); + } + pushed = true; + console.log(`[Sync] Benutzer "${userName}" als Schlagwort registriert`); + } + } + + // Cache for background.js access + await browser.storage.local.set({ [SCHLAGWOERTER_CACHE_KEY]: schlagwoerter }); + + // Create/update Thunderbird tags + const existingTags = await messenger.messages.tags.list(); + const existingByKey = {}; + for (const t of existingTags) existingByKey[t.key] = t; + + let created = 0, updated = 0; + + for (const user of schlagwoerter) { + const key = `$hps_${user.name.toLowerCase().replace(/\s+/g, '_')}`; + const color = user.color || '#999999'; + + if (existingByKey[key]) { + if (existingByKey[key].color !== color) { + await messenger.messages.tags.update(key, { color }); + updated++; + } + } else { + await messenger.messages.tags.create(key, user.name, color); + created++; + } + } + + return { success: true, created, updated, pushed }; + } + + /** + * Get the current user's tag key based on config + */ + getMyTagKey(schlagwoerter) { + if (!this.config || !Array.isArray(schlagwoerter)) return null; + const name = this.config.authorName; + if (!name) return null; + + const match = schlagwoerter.find(u => u.name.toLowerCase() === name.toLowerCase()); + if (!match) return null; + + return `$hps_${match.name.toLowerCase().replace(/\s+/g, '_')}`; + } + async testConnection() { if (!this.isConfigured) throw new Error('Sync nicht konfiguriert'); const repoInfo = await this.client.testConnection(); @@ -699,7 +800,7 @@ const syncManager = new SyncManager(); // ── Background message handler for sync ── browser.runtime.onMessage.addListener(async (msg, sender) => { - const syncActions = ['testConnection', 'pullTemplates', 'pushTemplates', 'pullSingleTemplate', 'pushSingleTemplate', 'deleteRemoteTemplate', 'listDepartments', 'checkRemoteShas', 'pullSignatures', 'pushSignatures', 'loadSignatureTemplate', 'loadFooter', 'pushFooter', 'autoDetect']; + const syncActions = ['testConnection', 'pullTemplates', 'pushTemplates', 'pullSingleTemplate', 'pushSingleTemplate', 'deleteRemoteTemplate', 'listDepartments', 'addDepartment', 'checkRemoteShas', 'pullSignatures', 'pushSignatures', 'loadSignatureTemplate', 'loadFooter', 'pushFooter', 'autoDetect', 'syncTags', 'getMyTagKey']; if (!syncActions.includes(msg.action)) return; try { @@ -717,6 +818,14 @@ browser.runtime.onMessage.addListener(async (msg, sender) => { case 'listDepartments': return await syncManager.listDepartments(); + case 'addDepartment': { + if (!syncManager.isConfigured) throw new Error('Sync nicht konfiguriert'); + const name = msg.name?.trim(); + if (!name) throw new Error('Kein Name angegeben'); + await syncManager.client.createFile(`${name}/.gitkeep`, '', `Abteilung "${name}" angelegt`); + return { success: true }; + } + case 'checkRemoteShas': return await syncManager.checkRemoteShas(); @@ -754,6 +863,15 @@ browser.runtime.onMessage.addListener(async (msg, sender) => { const config = await syncManager.autoDetect(); return { success: true, config }; + case 'syncTags': + return await syncManager.syncTags(); + + case 'getMyTagKey': { + const cached = (await browser.storage.local.get(SCHLAGWOERTER_CACHE_KEY))[SCHLAGWOERTER_CACHE_KEY]; + const tagKey = syncManager.getMyTagKey(cached); + return { success: !!tagKey, tagKey }; + } + default: return { success: false, error: 'Unbekannte Aktion' }; } @@ -767,7 +885,9 @@ browser.runtime.onMessage.addListener(async (msg, sender) => { let lastKnownShas = null; let lastFullSync = 0; +let lastTagSync = 0; let syncInProgress = false; +const TAG_SYNC_INTERVAL_MS = 60 * 1000; const HASH_STORAGE_KEY_BG = 'sync_hashes'; function simpleHashBg(str) { @@ -808,18 +928,30 @@ async function smartSync() { const initialized = await syncManager.init(); if (!initialized) return; - // Lightweight SHA check + syncInProgress = true; + + // Tag sync every 60s (schlagwoerter.json is not in SHA-checked folders) + const now = Date.now(); + if (now - lastTagSync >= TAG_SYNC_INTERVAL_MS) { + lastTagSync = now; + try { + const tagResult = await syncManager.syncTags(); + if (tagResult.created || tagResult.pushed) console.log('[Sync] Tags synchronisiert:', tagResult); + } catch (e) { + console.error('[Sync] Tag-Sync fehlgeschlagen:', e); + } + } + + // Lightweight SHA check for templates + signatures const shaResult = await syncManager.checkRemoteShas(); - if (!shaResult?.success) return; + if (!shaResult?.success) { syncInProgress = false; return; } const currentShas = JSON.stringify(shaResult.remoteShas); // First run or SHAs changed → full pull if (lastKnownShas === null || currentShas !== lastKnownShas) { - const now = Date.now(); - if (now - lastFullSync < FULL_SYNC_COOLDOWN_MS) return; + if (now - lastFullSync < FULL_SYNC_COOLDOWN_MS) { syncInProgress = false; return; } - syncInProgress = true; lastFullSync = now; console.log('[Sync] Änderung erkannt, lade Vorlagen...'); @@ -831,8 +963,8 @@ async function smartSync() { console.log('[Sync] Signaturen geladen:', sigResult); lastKnownShas = JSON.stringify((await syncManager.checkRemoteShas()).remoteShas || {}); - syncInProgress = false; } + syncInProgress = false; } catch (err) { console.error('[Sync] Check fehlgeschlagen:', err); syncInProgress = false; @@ -841,3 +973,4 @@ async function smartSync() { smartSync(); setInterval(smartSync, SHA_CHECK_INTERVAL_MS); + diff --git a/manifest.json b/manifest.json index 24b7bb8..ff4db73 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 2, "name": "HPS Vorlagen & Signaturen", - "version": "2.2.0", + "version": "2.3.0", "description": "Vorlagen- und Signaturverwaltung für Hotel Park Soltau mit Git-Sync", "browser_specific_settings": { "gecko": { @@ -15,7 +15,13 @@ "notifications", "tabs", "accountsRead", - "accountsIdentities" + "accountsIdentities", + "messagesTagsList", + "messagesTags", + "messagesRead", + "messagesUpdate", + "messagesMove", + "accountsFolders" ], "optional_permissions": [ "*://*/*" @@ -24,6 +30,14 @@ "scripts": ["lib/gitea-sync.js", "background.js"], "persistent": true }, + "browser_action": { + "default_icon": { + "16": "icons/icon.png", + "32": "icons/icon.png" + }, + "default_title": "Vorlagen & Signaturen verwalten", + "default_label": "Vorlagen & Signaturen" + }, "compose_action": { "default_icon": { "16": "icons/icon.png", @@ -32,6 +46,13 @@ "default_popup": "popup.html", "default_label": "Vorlagen" }, + "message_display_action": { + "default_icon": { + "16": "icons/icon.png", + "32": "icons/icon.png" + }, + "default_label": "QuickMove" + }, "options_ui": { "page": "templates_options/templates_options.html", "browser_style": true diff --git a/message_popup.html b/message_popup.html new file mode 100644 index 0000000..ac7f16f --- /dev/null +++ b/message_popup.html @@ -0,0 +1,50 @@ + + + + + Aktion wählen + + + +
+ + + diff --git a/message_popup.js b/message_popup.js new file mode 100644 index 0000000..3565a72 --- /dev/null +++ b/message_popup.js @@ -0,0 +1,21 @@ +(async () => { + const result = await browser.storage.local.get('erledigt_config'); + const actions = (result.erledigt_config || {}).actions || []; + const list = document.getElementById('action-list'); + + if (actions.length === 0) { + list.innerHTML = '
Keine Aktionen konfiguriert.
'; + return; + } + + for (let i = 0; i < actions.length; i++) { + const action = actions[i]; + const btn = document.createElement('button'); + btn.textContent = action.name || `Aktion ${i + 1}`; + btn.addEventListener('click', async () => { + await browser.runtime.sendMessage({ action: 'erledigtAction', index: i }); + window.close(); + }); + list.appendChild(btn); + } +})(); diff --git a/templates-reply-hotel.xpi b/templates-reply-hotel.xpi index 1d4f9aeb743cda83f419cc6288b556416276180b..8409787c3486d14b68068a7c1474464a5e505dd9 100644 GIT binary patch delta 33518 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 Bz+C_U delta 28302 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 SACAa>+XgfkSaZ}r;{O8ok`wp< diff --git a/templates_options/templates_options.html b/templates_options/templates_options.html index ad92766..bf45822 100644 --- a/templates_options/templates_options.html +++ b/templates_options/templates_options.html @@ -731,6 +731,7 @@
+
@@ -990,6 +991,7 @@ +
Du erhältst Vorlagen aus deiner Abteilung + dem gemeinsamen Ordner (_gemeinsam).
@@ -1044,6 +1046,24 @@
+ +
+
+
Aktionen
+
Der Button erscheint in der Nachrichtenansicht. Ein Klick markiert die E-Mail mit deinem Schlagwort und verschiebt sie in den gewählten Ordner. Bei mehreren Aktionen öffnet sich ein Auswahlmenü.
+ +
+ +
+ +
+ +
+ +
+
+
+
Keine Internetverbindung – Synchronisation nicht möglich
diff --git a/templates_options/templates_options.js b/templates_options/templates_options.js index 7f63fd4..6edc994 100644 --- a/templates_options/templates_options.js +++ b/templates_options/templates_options.js @@ -1167,6 +1167,7 @@ function showSigStatus(message, color) { // Save signature to Thunderbird identity (header + footer) document.getElementById('sig-save-button').addEventListener('click', async () => { + try { const identityId = sigIdentitySelect.value; if (!identityId) { showSigStatus('Bitte Identität auswählen.', 'red'); @@ -1194,7 +1195,6 @@ document.getElementById('sig-save-button').addEventListener('click', async () => await browser.identities.update(identityId, { signature: fullSignature, signatureIsPlainText: false, - attachSignature: false }); if (identity) identity.signature = fullSignature; @@ -1206,28 +1206,37 @@ document.getElementById('sig-save-button').addEventListener('click', async () => await browser.identities.update(otherId.id, { signature: fullSignature, signatureIsPlainText: false, - attachSignature: false - }); + }); otherId.signature = fullSignature; } } updateSigSyncIndicator(); - // Auto-push to server + // Auto-push to server, then pull to resolve reference chains try { - const pushResult = await browser.runtime.sendMessage({ action: 'pushSignatures' }); - await loadIdentities(); - for (const id of allIdentities) { - sigSyncedHashes[id.email.toLowerCase()] = simpleHash(id.signature || ''); - } - saveSyncHashes(); - updateSigSyncIndicator(); - const label = source.startsWith('=') ? ` (von ${source.substring(1)})` : ''; - showSigStatus(`Signatur gespeichert & hochgeladen!${label}`, 'green'); + await browser.runtime.sendMessage({ action: 'pushSignatures' }); } catch (err) { showSigStatus('Gespeichert, aber Upload fehlgeschlagen: ' + err.message, '#e65100'); + return; } + + try { + await browser.runtime.sendMessage({ action: 'pullSignatures' }); + } catch (_) {} + + await loadIdentities(); + for (const id of allIdentities) { + sigSyncedHashes[id.email.toLowerCase()] = simpleHash(id.signature || ''); + } + saveSyncHashes(); + updateSigSyncIndicator(); + const label = source.startsWith('=') ? ` (von ${source.substring(1)})` : ''; + showSigStatus(`Signatur gespeichert & hochgeladen!${label}`, 'green'); + } catch (err) { + console.error('Signatur-Speichern Fehler:', err); + showSigStatus('Fehler: ' + err.message, 'red'); + } }); // Import signature from HTML file @@ -1399,6 +1408,30 @@ async function populateEmailDropdown() { } } +async function populateFolderDropdown() { + try { + let options = ''; + const accounts = await browser.accounts.list(); + for (const account of accounts) { + const folders = await browser.folders.getSubFolders(account); + const addFolders = (list, prefix) => { + for (const folder of list) { + const label = prefix ? `${prefix} / ${folder.name}` : `${account.name} / ${folder.name}`; + const val = JSON.stringify({ accountId: account.id, path: folder.path }); + options += ``; + if (folder.subFolders && folder.subFolders.length) { + addFolders(folder.subFolders, label); + } + } + }; + addFolders(folders, ''); + } + erledigtFolderOptions = options; + } catch (e) { + console.error('Ordner laden fehlgeschlagen:', e); + } +} + async function loadSyncConfig() { try { const result = await browser.storage.local.get(SYNC_CONFIG_KEY); @@ -1651,6 +1684,23 @@ for (const id of ['sync-author-name', 'sync-author-email']) { document.getElementById('refresh-departments').addEventListener('click', loadDepartments); +document.getElementById('add-department').addEventListener('click', async () => { + const name = prompt('Name der neuen Abteilung:'); + if (!name || !name.trim()) return; + try { + const result = await browser.runtime.sendMessage({ action: 'addDepartment', name: name.trim() }); + if (result?.success) { + showToast(`Abteilung "${name.trim()}" angelegt!`, 'success'); + await loadDepartments(); + document.getElementById('sync-department').value = name.trim(); + } else { + showToast(result?.error || 'Fehler beim Anlegen', 'error'); + } + } catch (e) { + showToast('Fehler: ' + e.message, 'error'); + } +}); + document.getElementById('test-sync-connection').addEventListener('click', async () => { if (!checkOnline()) return; const btn = document.getElementById('test-sync-connection'); @@ -1678,6 +1728,80 @@ document.getElementById('test-sync-connection').addEventListener('click', async btn.textContent = origText; }); +// ── Erledigt-Tab ── + +const ERLEDIGT_CONFIG_KEY = 'erledigt_config'; +let erledigtFolderOptions = ''; + +function renderErledigtAction(action, index) { + const div = document.createElement('div'); + div.className = 'form-row'; + div.style.alignItems = 'end'; + div.style.marginBottom = '8px'; + div.innerHTML = ` +
+ ${index === 0 ? '' : ''} + +
+
+ ${index === 0 ? '' : ''} + +
+ + `; + if (action.targetFolder) { + div.querySelector('.erledigt-folder').value = action.targetFolder; + } + div.querySelector('.erledigt-remove').addEventListener('click', () => { + div.remove(); + }); + return div; +} + +function renderErledigtActions(actions) { + const list = document.getElementById('erledigt-actions-list'); + list.innerHTML = ''; + actions.forEach((a, i) => list.appendChild(renderErledigtAction(a, i))); +} + +function getErledigtActionsFromForm() { + const actions = []; + const names = document.querySelectorAll('.erledigt-name'); + const folders = document.querySelectorAll('.erledigt-folder'); + for (let i = 0; i < names.length; i++) { + const name = names[i].value.trim(); + if (!name) continue; + actions.push({ name, targetFolder: folders[i].value || '' }); + } + return actions; +} + +async function loadErledigtConfig() { + const result = await browser.storage.local.get(ERLEDIGT_CONFIG_KEY); + const config = result[ERLEDIGT_CONFIG_KEY] || {}; + const actions = config.actions || []; + if (actions.length === 0) actions.push({ name: 'Erledigt', targetFolder: '' }); + renderErledigtActions(actions); +} + +document.getElementById('add-erledigt-action').addEventListener('click', () => { + const list = document.getElementById('erledigt-actions-list'); + list.appendChild(renderErledigtAction({ name: '', targetFolder: '' }, list.children.length)); +}); + +document.getElementById('save-erledigt-config').addEventListener('click', async () => { + const actions = getErledigtActionsFromForm(); + if (actions.length === 0) { + showToast('Mindestens eine Aktion mit Namen anlegen.', 'error'); + return; + } + await browser.storage.local.set({ [ERLEDIGT_CONFIG_KEY]: { actions } }); + showToast('Aktionen gespeichert!', 'success'); +}); + // ── Init ── window.addEventListener('load', async () => { @@ -1686,6 +1810,8 @@ window.addEventListener('load', async () => { renderTemplates(templates); updateTplSyncIndicator(); await populateEmailDropdown(); + await populateFolderDropdown(); + await loadErledigtConfig(); loadSyncConfig(); await loadIdentities(); diff --git a/toolbar_popup.html b/toolbar_popup.html new file mode 100644 index 0000000..0520f1f --- /dev/null +++ b/toolbar_popup.html @@ -0,0 +1,9 @@ + + + + + +