From d244273e4453b763b15f21a0e692e2f5f2486203 Mon Sep 17 00:00:00 2001 From: Kendrick Bollens Date: Wed, 22 Jul 2026 14:24:43 +0200 Subject: [PATCH] =?UTF-8?q?Release=20v2.4.0=20=E2=80=94=20Erzwungene=20Ein?= =?UTF-8?q?stellungen:=20about:config-Prefs=20bei=20jedem=20Start=20setzen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Neuer forcedPrefs-WebExtension-Experiment (Services.prefs) setzt beim Start globale Prefs (Startseite aus, Kartenansicht, nicht gruppiert, absteigend, 3-Spalten-Layout, nicht auto-gelesen) sowie pro Identität die Signatur-/ Antwort-Einstellungen. Pro Setting im Options-Dialog (⚙-Tab) abschaltbar. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_015PZHd9vRsBiH8cKYdQo1Yv --- background.js | 49 ++++++++++++++++++ experiments/prefs/api.js | 61 +++++++++++++++++++++++ experiments/prefs/schema.json | 29 +++++++++++ lib/forced-prefs-list.js | 52 +++++++++++++++++++ manifest.json | 13 ++++- templates-reply-hotel.xpi | Bin 677020 -> 681621 bytes templates_options/templates_options.html | 9 ++++ templates_options/templates_options.js | 48 ++++++++++++++++++ 8 files changed, 260 insertions(+), 1 deletion(-) create mode 100644 experiments/prefs/api.js create mode 100644 experiments/prefs/schema.json create mode 100644 lib/forced-prefs-list.js diff --git a/background.js b/background.js index 4e7a143..39a2360 100644 --- a/background.js +++ b/background.js @@ -98,6 +98,55 @@ browser.storage.onChanged.addListener((changes, area) => { }); updateErledigtPopup(); +// ── about:config-Prefs bei jedem Start erzwingen ── +// +// Manche Thunderbird-Einstellungen (Startseite, Ansicht, Layout, pro Konto das +// Signatur-/Antwort-Verhalten) „springen zurück" und müssen sonst von Hand +// nachgezogen werden. Wir setzen sie bei JEDEM Start neu über den privilegierten +// forcedPrefs-Experiment (Services.prefs). Die Liste liegt in +// lib/forced-prefs-list.js (globale FORCED_PREFS / FORCED_IDENTITY_PREFS). +// Pro Eintrag kann der Client im Options-Dialog opt-outen (forced_prefs_optout). +const FORCED_PREFS_OPTOUT_KEY = 'forced_prefs_optout'; + +async function enforceForcedPrefs() { + const stored = await browser.storage.local.get(FORCED_PREFS_OPTOUT_KEY); + const disabled = new Set(stored[FORCED_PREFS_OPTOUT_KEY] || []); + + // Globale Prefs + for (const p of FORCED_PREFS) { + if (disabled.has(p.id)) continue; + try { + await browser.forcedPrefs.setPref(p.name, p.type, p.value); + } catch (e) { + console.error('[forcedPrefs] konnte', p.name, 'nicht setzen:', e); + } + } + + // Pro-Identität-Prefs — über alle Konten/Identitäten iterieren + const accounts = await browser.accounts.list(); + for (const acc of accounts) { + for (const ident of (acc.identities || [])) { + for (const p of FORCED_IDENTITY_PREFS) { + if (disabled.has(p.id)) continue; + const name = `mail.identity.${ident.id}.${p.suffix}`; + try { + await browser.forcedPrefs.setPref(name, p.type, p.value); + } catch (e) { + console.error('[forcedPrefs] konnte', name, 'nicht setzen:', e); + } + } + } + } +} + +enforceForcedPrefs(); // Top-Level = läuft einmal pro TB-Start + +// Wird eine Pref im Options-Dialog wieder AKTIVIERT, sofort anwenden +// (statt bis zum nächsten Neustart zu warten). +browser.storage.onChanged.addListener((changes, area) => { + if (area === 'local' && changes[FORCED_PREFS_OPTOUT_KEY]) enforceForcedPrefs(); +}); + // ── Signatur in neuen Compose-Fenstern automatisch aktualisieren ── // // Thunderbird merkt sich die Signatur einer Identität pro Sitzung. Öffnet der diff --git a/experiments/prefs/api.js b/experiments/prefs/api.js new file mode 100644 index 0000000..dd3af94 --- /dev/null +++ b/experiments/prefs/api.js @@ -0,0 +1,61 @@ +"use strict"; + +// Privilegierter Parent-Scope: schreibt/liest about:config-Prefs über Services.prefs. +// Der Modulpfad von ExtensionCommon wechselte mitten im TB-Lebenszyklus: +// TB 115+ -> ExtensionCommon.sys.mjs (ESM) +// TB 109-114 -> ExtensionCommon.jsm (JSM) +// Deshalb defensiv laden, damit dieselbe api.js über die Flotte funktioniert. +var { ExtensionCommon } = (() => { + try { + return ChromeUtils.importESModule( + "resource://gre/modules/ExtensionCommon.sys.mjs" + ); + } catch (e) { + return ChromeUtils.import("resource://gre/modules/ExtensionCommon.jsm"); + } +})(); + +// `Services` ist im privilegierten ExtensionAPI-Sandbox in TB 109+ global +// (stellt Services.prefs = nsIPrefBranch bereit); kein Import nötig. + +this.forcedPrefs = class extends ExtensionCommon.ExtensionAPI { + getAPI(context) { + return { + forcedPrefs: { + async setPref(name, type, value) { + switch (type) { + case "bool": + Services.prefs.setBoolPref(name, !!value); + break; + case "int": + Services.prefs.setIntPref(name, value | 0); + break; + case "string": + // setStringPref ist unicode-sicher (im Gegensatz zu setCharPref). + Services.prefs.setStringPref(name, String(value)); + break; + default: + throw new Error("forcedPrefs.setPref: unknown type " + type); + } + return true; + }, + + async getPref(name, type) { + if (Services.prefs.getPrefType(name) === Services.prefs.PREF_INVALID) { + return null; + } + switch (type) { + case "bool": + return Services.prefs.getBoolPref(name, false); + case "int": + return Services.prefs.getIntPref(name, 0); + case "string": + return Services.prefs.getStringPref(name, ""); + default: + throw new Error("forcedPrefs.getPref: unknown type " + type); + } + }, + }, + }; + } +}; diff --git a/experiments/prefs/schema.json b/experiments/prefs/schema.json new file mode 100644 index 0000000..0936c35 --- /dev/null +++ b/experiments/prefs/schema.json @@ -0,0 +1,29 @@ +[ + { + "namespace": "forcedPrefs", + "description": "Read/write about:config preferences from a privileged parent context.", + "functions": [ + { + "name": "setPref", + "type": "function", + "async": true, + "description": "Force an about:config pref to a fixed value. type is one of 'bool','int','string'.", + "parameters": [ + { "name": "name", "type": "string" }, + { "name": "type", "type": "string", "enum": ["bool", "int", "string"] }, + { "name": "value", "type": "any" } + ] + }, + { + "name": "getPref", + "type": "function", + "async": true, + "description": "Read an about:config pref; returns null if unset.", + "parameters": [ + { "name": "name", "type": "string" }, + { "name": "type", "type": "string", "enum": ["bool", "int", "string"] } + ] + } + ] + } +] diff --git a/lib/forced-prefs-list.js b/lib/forced-prefs-list.js new file mode 100644 index 0000000..dd82e79 --- /dev/null +++ b/lib/forced-prefs-list.js @@ -0,0 +1,52 @@ +"use strict"; + +// Single Source of Truth für die about:config-Prefs, die bei jedem TB-Start +// erzwungen werden. Wird als klassisches Script in BEIDEN Kontexten geladen +// (Background + Options-Seite), definiert also nur globale Variablen — keine +// import/export-Mechanik. +// +// Jeder Eintrag: +// id - stabiler Opt-out-Key (NIE umbenennen/wiederverwenden; landet in storage) +// label - Text im Options-Dialog +// type - "bool" | "int" | "string" +// value - der bei jedem Start erzwungene Wert +// FORCED_PREFS zusätzlich: name - voller about:config-Pref-Name +// FORCED_IDENTITY_PREFS: suffix - voller Name = mail.identity.. +// +// WICHTIG: Werte an einem korrekt eingerichteten Referenz-Thunderbird +// (Doku-Seite „Thunderbird einrichten", Page 99) per about:config gegenprüfen — +// dieser Code läuft privilegiert auf allen Clients, ein Tippfehler trifft alle. + +var FORCED_PREFS = [ + { id: "start_page_off", label: "Startseite beim Öffnen ausblenden", + name: "mailnews.start_page.enabled", type: "bool", value: false }, + { id: "listview_cards", label: "Kartenansicht (statt Tabelle)", + name: "mail.threadpane.listview", type: "int", value: 0 }, + { id: "no_grouping", label: "Nachrichten nicht gruppieren", + name: "mailnews.default_view_flags", type: "int", value: 0 }, + { id: "sort_descending", label: "Neue Nachrichten oben (absteigend)", + name: "mailnews.default_sort_order", type: "int", value: 2 }, + { id: "layout_3col", label: "3-Spalten-Ansicht (vertikales Layout)", + name: "mail.pane_config.dynamic", type: "int", value: 2 }, + { id: "no_auto_read", label: "Nachrichten nicht automatisch als gelesen markieren", + name: "mailnews.mark_message_read.auto", type: "bool", value: false }, +]; + +// Pro Identität angewandt: voller Name = mail.identity.. +var FORCED_IDENTITY_PREFS = [ + { id: "reply_on_top", label: "Antwort über dem Zitat", + suffix: "reply_on_top", type: "int", value: 1 }, + // sig_bottom=false -> Signatur direkt unter der Antwort, VOR dem Zitat. + // (true wäre ganz unten nach dem Zitat.) + { id: "sig_bottom", label: "Signatur unter Antwort / vor dem Zitat", + suffix: "sig_bottom", type: "bool", value: false }, + { id: "sig_on_reply", label: "Signatur bei Antworten beifügen", + suffix: "sig_on_reply", type: "bool", value: true }, + { id: "sig_on_fwd", label: "Signatur beim Weiterleiten beifügen", + suffix: "sig_on_fwd", type: "bool", value: true }, +]; + +if (typeof globalThis !== "undefined") { + globalThis.FORCED_PREFS = FORCED_PREFS; + globalThis.FORCED_IDENTITY_PREFS = FORCED_IDENTITY_PREFS; +} diff --git a/manifest.json b/manifest.json index 2c586b2..833100f 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 2, "name": "HPS Vorlagen & Signaturen", - "version": "2.3.6", + "version": "2.4.0", "description": "Vorlagen- und Signaturverwaltung für Hotel Park Soltau mit Git-Sync", "browser_specific_settings": { "gecko": { @@ -29,11 +29,22 @@ ], "background": { "scripts": [ + "lib/forced-prefs-list.js", "lib/gitea-sync.js", "background.js" ], "persistent": true }, + "experiment_apis": { + "forcedPrefs": { + "schema": "experiments/prefs/schema.json", + "parent": { + "scopes": ["addon_parent"], + "paths": [["forcedPrefs"]], + "script": "experiments/prefs/api.js" + } + } + }, "browser_action": { "default_icon": { "16": "icons/icon.png", diff --git a/templates-reply-hotel.xpi b/templates-reply-hotel.xpi index d01d95981aad835261075a44e723879f57a6c639..227a645c8efe142ca7920d42e71750297da9e6c3 100644 GIT binary patch delta 20987 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 WO(NpG&mlVeQx30VRkXyvfc^&?W1GSN delta 16273 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 + +
+
Erzwungene Einstellungen
+
Diese Thunderbird-Einstellungen werden bei jedem Start automatisch gesetzt (sie „springen" sonst zurück). Zum Abschalten den jeweiligen Haken entfernen — der bisherige Wert wird dabei nicht wiederhergestellt, es wird nur nicht mehr erzwungen.
+
+
+
@@ -1088,6 +1095,8 @@ + + diff --git a/templates_options/templates_options.js b/templates_options/templates_options.js index b5d73cd..dc92e61 100644 --- a/templates_options/templates_options.js +++ b/templates_options/templates_options.js @@ -1978,3 +1978,51 @@ window.addEventListener('load', async () => { } }); }); + +// ── Opt-out-Schalter für erzwungene Prefs ── +// FORCED_PREFS / FORCED_IDENTITY_PREFS stammen aus ../lib/forced-prefs-list.js +// (im HTML vor diesem Script geladen). Gespeichert werden die ids der +// DEAKTIVIERTEN Prefs unter 'forced_prefs_optout'; Haken = wird erzwungen. +const FORCED_PREFS_OPTOUT_KEY = 'forced_prefs_optout'; + +async function renderForcedPrefsToggles() { + const container = document.getElementById('forced-prefs-list'); + if (!container || typeof FORCED_PREFS === 'undefined') return; + + const stored = await browser.storage.local.get(FORCED_PREFS_OPTOUT_KEY); + const disabled = new Set(stored[FORCED_PREFS_OPTOUT_KEY] || []); + + container.textContent = ''; + const entries = [...FORCED_PREFS, ...(typeof FORCED_IDENTITY_PREFS !== 'undefined' ? FORCED_IDENTITY_PREFS : [])]; + for (const p of entries) { + const row = document.createElement('label'); + row.className = 'forced-pref-row'; + row.style.display = 'flex'; + row.style.alignItems = 'center'; + row.style.gap = '8px'; + row.style.padding = '4px 0'; + row.style.cursor = 'pointer'; + + const cb = document.createElement('input'); + cb.type = 'checkbox'; + cb.checked = !disabled.has(p.id); // Haken = wird erzwungen + cb.addEventListener('change', () => setForcedPrefEnabled(p.id, cb.checked)); + + const span = document.createElement('span'); + span.textContent = p.label; + + row.append(cb, span); + container.appendChild(row); + } +} + +async function setForcedPrefEnabled(id, enabled) { + const stored = await browser.storage.local.get(FORCED_PREFS_OPTOUT_KEY); + const disabled = new Set(stored[FORCED_PREFS_OPTOUT_KEY] || []); + if (enabled) disabled.delete(id); + else disabled.add(id); + await browser.storage.local.set({ [FORCED_PREFS_OPTOUT_KEY]: [...disabled] }); + // background.js lauscht auf storage.onChanged und wendet Aktivierungen sofort an. +} + +document.addEventListener('DOMContentLoaded', renderForcedPrefsToggles);