diff --git a/README.md b/README.md index 81b9911..0457813 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,46 @@ # HPS Vorlagen & Signaturen -Thunderbird-Plugin (v2.2.0) zur zentralen Verwaltung von E-Mail-Vorlagen und Signaturen für Hotel Park Soltau. Vorlagen und Signaturen werden über ein Gitea/Forgejo-Repository synchronisiert und stehen so allen Mitarbeitern zur Verfügung. +Thunderbird-MailExtension zur zentralen Verwaltung von E-Mail-Vorlagen und Signaturen für +Hotel Park Soltau. Vorlagen, Signaturen und Schlagwörter werden über ein Gitea/Forgejo-Repository +synchronisiert und stehen so allen Mitarbeitern zur Verfügung. (Aktuelle Version: siehe +`manifest.json`.) ## Features -- **E-Mail-Vorlagen** erstellen, bearbeiten und per Klick in Compose-Fenster einfügen +- **E-Mail-Vorlagen** erstellen, bearbeiten und per Klick ins Compose-Fenster einfügen - **3 Sichtbarkeitsstufen** pro Vorlage: - **Persönlich** — nur für den eigenen Account, gesynct in `_benutzer/{email}/` - **Abteilung** — für alle in der Abteilung, gesynct in den Abteilungsordner - **Alle Abteilungen** — firmenweit, gesynct in `_gemeinsam/` - **Signaturen-Verwaltung** mit persönlichem Kopfbereich + gemeinsamer Fußzeile pro Abteilung +- **QuickMove** — Button in der Nachrichtenansicht: markiert die E-Mail mit deinem Schlagwort + und verschiebt sie in einen festgelegten Ordner. Mehrere Aktionen → Auswahlmenü. +- **Schlagwörter-Sync** — Benutzer-Tags werden zentral über `_config/schlagwoerter.json` + verwaltet, in Thunderbird angelegt und nie gelöscht (dauerhaft nachvollziehbar) - **Git-Sync** über Gitea/Forgejo API (Pull + Push, automatisch alle 15 Min.) - **Auto-Erkennung** von Abteilung und Benutzer via `_config/abteilungen.json` +- **Abteilungsverwaltung** — neue Abteilungen direkt aus den Einstellungen anlegen - **WYSIWYG-Editor** mit Schriftart, Farben, Listen, Bildern, Links - **Sichtbarkeit direkt änderbar** per klickbarem Badge in der Vorlagenliste +- **Auto-Update** über Gitea (siehe unten) — installierte Clients aktualisieren sich selbst +- **Toolbar-Button** öffnet direkt die Einstellungen +- **Erzwungene Thunderbird-Einstellungen** — setzt bei jedem Start bestimmte `about:config`-Prefs + (z.B. Startseite aus, Kartenansicht, „nicht automatisch als gelesen", Signatur-/Antwort-Verhalten + pro Konto); pro Einstellung im Sync-Tab abschaltbar +- **Client-Versions-Übersicht** — jeder Client meldet Plugin- und Thunderbird-Version; im + Web-Editor unter *Verwaltung → User & Versionen* einsehbar (veraltete Clients markiert) +- **[Web-Editor](web-editor/)** als optionales Web-Gegenstück (gleiche Gitea-Quelle) + +## Bedienoberfläche (Einstellungsseite) + +Vier Tabs: + +| Tab | Funktion | +|---|---| +| **Vorlagen** | Vorlagen anlegen/bearbeiten, Sichtbarkeit, manuelles Push/Pull | +| **Signaturen** | Persönlicher Kopfbereich + Fußzeile (gemeinsam / Abteilung) | +| **QuickMove** | Aktionen konfigurieren (Schlagwort + Zielordner) | +| **Sync** | Server-Verbindung, Benutzer & Abteilung, Sync auslösen, erzwungene Einstellungen (Opt-out) | ## Repository-Struktur (Gitea) @@ -25,14 +52,18 @@ repo/ │ ├── max@hotel-park-soltau.de/ │ └── anna@hotel-park-soltau.de/ ├── _config/ -│ └── abteilungen.json # E-Mail → Abteilung Mapping +│ ├── abteilungen.json # E-Mail → Abteilung Mapping +│ └── schlagwoerter.json # Benutzer-Schlagwörter (Name + Farbe) +├── _clients/ # Status-Meldungen: Plugin-/TB-Version pro User +│ └── max@hotel-park-soltau.de.json ├── Rezeption/ # Abteilungsvorlagen ├── IT/ ├── signatures/ │ ├── headers/ # Persönliche Signatur-Köpfe │ │ └── max@hotel.de.max-mustermann.html -│ └── footers/ # Gemeinsame Fußbereiche -│ └── Rezeption.html +│ └── footers/ # Fußbereiche +│ ├── _default.html # gemeinsame Standard-Fußzeile +│ └── Rezeption.html # Abteilungs-Fußzeile ``` ### `_config/abteilungen.json` @@ -48,17 +79,36 @@ Mapping von Abteilungs-E-Mail-Adressen zu Ordnernamen. Wird vom Plugin gelesen, } ``` +### `_config/schlagwoerter.json` + +Liste der Benutzer-Schlagwörter (für QuickMove/Markierung). Wird beim Sync automatisch um neue +Benutzer ergänzt und nie geleert, damit Markierungen dauerhaft nachvollziehbar bleiben: + +```json +[ + { "name": "Max Mustermann", "color": "#4a7c59" }, + { "name": "Anna Beispiel", "color": "#2874a6" } +] +``` + ## Plugin-Aufbau | Datei | Funktion | |---|---| | `manifest.json` | Extension-Manifest (Thunderbird WebExtension v2) | -| `background.js` | Template-Insertion ins Compose-Fenster | -| `popup.html` / `popup.js` | Popup beim Klick auf "Vorlagen" im Compose | -| `lib/gitea-sync.js` | Gitea-API-Client + Sync-Manager | -| `lib/mdi/` | Material Design Icons (Subset) | -| `templates_options/` | Einstellungsseite (Vorlagen, Signaturen, Verbindung) | +| `background.js` | Template-Insertion + QuickMove-Aktionen (Tag setzen, Nachricht verschieben) | +| `popup.html` / `popup.js` | Compose-Popup ("Vorlagen" beim Schreiben) | +| `message_popup.html` / `message_popup.js` | QuickMove-Popup in der Nachrichtenansicht | +| `toolbar_popup.html` | Toolbar-Button → öffnet die Einstellungen | +| `templates_options/` | Einstellungsseite (Tabs: Vorlagen, Signaturen, QuickMove, Sync) | +| `lib/gitea-sync.js` | Gitea-API-Client + Sync-Manager (inkl. Schlagwörter-Sync + Client-Status-Meldung) | +| `lib/forced-prefs-list.js` | Liste der erzwungenen `about:config`-Prefs (geteilt: Background + Optionsseite) | +| `experiments/prefs/` | Privilegierte Experiment-API zum Setzen von `about:config`-Prefs | +| `lib/mdi/` | Material Design Icons (Subset) für den Editor | | `defaults.local.json` | Optionale vorkonfigurierte Verbindungsdaten (gitignored) | +| `updates.json` | Update-Manifest für Thunderbird-Auto-Update | +| `release.sh` | Release-Skript (Build hashen, Gitea-Release anlegen, updates.json pflegen) | +| `web-editor/` | Optionaler Node/Docker-Web-Editor (eigenständig, gleiche Gitea-Quelle) | ## Installation @@ -71,17 +121,25 @@ Mapping von Abteilungs-E-Mail-Adressen zu Ordnernamen. Wird vom Plugin gelesen, ### XPI bauen -```bash -# Ohne vorkonfigurierte Verbindungsdaten: -7z a templates-reply-hotel.xpi manifest.json background.js popup.html popup.js lib/ templates_options/ icons/ +`zip` ist nicht zwingend vorhanden, `7z` reicht. Immer **ohne** `defaults.local.json` bauen — +die Datei enthält den Gitea-Token und darf nicht in eine veröffentlichte `.xpi`: -# Mit vorkonfigurierten Verbindungsdaten (für Deployment): -7z a templates-reply-hotel.xpi manifest.json background.js popup.html popup.js lib/ templates_options/ icons/ defaults.local.json +```bash +rm -f templates-reply-hotel.xpi +7z a -tzip templates-reply-hotel.xpi . \ + -xr'!.git' -xr'!node_modules' -xr'!web-editor' -xr'!.claude' \ + -xr'!defaults.local.json' -xr'!*.xpi' -xr'!release.sh' -xr'!*.md' ``` +> Eine **vorkonfigurierte** `.xpi` (mit `defaults.local.json`) ist nur für die interne +> Erstinstallation auf einer neuen Maschine gedacht und darf **niemals** als öffentliches +> Release hochgeladen werden — sonst wäre der Token auslesbar. + ### Vorkonfigurierte Verbindungsdaten (`defaults.local.json`) -Wenn eine `defaults.local.json` im Plugin-Root existiert und in die XPI eingebaut wird, werden die Verbindungsdaten beim ersten Start automatisch gesetzt. Der User muss dann nur noch "Verbindung speichern" klicken. +Wenn eine `defaults.local.json` im Plugin-Root existiert und in die XPI eingebaut wird, werden +die Verbindungsdaten **beim allerersten Start** automatisch gesetzt. Updates brauchen die Datei +nicht — bestehende Installationen behalten ihre Konfiguration in `storage.local`. ```json { @@ -107,17 +165,25 @@ Installierte Add-ons aktualisieren sich automatisch über `updates.json` in dies Neue Version veröffentlichen: -1. `version` in `manifest.json` hochzählen, `.xpi` **ohne** `defaults.local.json` neu bauen. -2. `GITEA_TOKEN=… ./release.sh` — hasht die `.xpi`, aktualisiert `updates.json`, legt das +1. **`version` in `manifest.json` hochzählen** (gleiche Version = Clients updaten nicht!). +2. `.xpi` **ohne** `defaults.local.json` neu bauen (siehe oben). +3. `GITEA_TOKEN=… ./release.sh` — hasht die `.xpi`, aktualisiert `updates.json`, legt das Gitea-Release an und lädt die `.xpi` als Asset hoch. -3. `updates.json` + `manifest.json` committen & pushen. +4. `updates.json` + `manifest.json` committen & pushen. + +Bestehende Installationen ziehen das Update dann automatisch (Prüfung ~1×/Tag, oder manuell +über Add-ons → Zahnrad → „Auf Updates prüfen"). ## Einrichtung -1. **Verbindung konfigurieren**: Einstellungen-Tab (⚙) → Server-URL, Repository, Token eingeben → Verbindung speichern (entfällt bei vorkonfigurierter XPI) -2. **Abteilung wählen** (oder automatisch erkannt via `abteilungen.json`) +1. **Verbindung konfigurieren**: Sync-Tab → Server-URL, Repository, Token eingeben → + Verbindung speichern (entfällt bei vorkonfigurierter XPI) +2. **Abteilung wählen** (oder automatisch erkannt via `abteilungen.json`; neue Abteilungen + lassen sich per **+** direkt anlegen) 3. **Vorlagen erstellen**: Vorlagen-Tab → Neue Vorlage → Sichtbarkeit wählen → Speichern 4. **Signaturen einrichten**: Signaturen-Tab → Identität wählen → Kopfbereich bearbeiten → Speichern +5. **QuickMove einrichten** (optional): QuickMove-Tab → Aktion hinzufügen (Name + Zielordner) → + Speichern. Der Button erscheint dann in der Nachrichtenansicht. ## Voraussetzungen