Anpassungen für ATN-Listing
This commit is contained in:
95
README.md
95
README.md
@@ -15,6 +15,7 @@ WebExtensions, LibreOffice UNO.
|
||||
|---|---|---|
|
||||
| Kontextmenü am Anhang | Anhang in Paperless ablegen | ausgewählte Anhänge als Dokument |
|
||||
| Kontextmenü in der Nachrichtenliste | E-Mail in Paperless ablegen | als PDF mit eingebettetem Original, wahlweise als `.eml` |
|
||||
| Beides | Ablauf | Dateiauswahl, dann je Datei Ziel und Klassifizierung |
|
||||
| Schaltfläche im Nachrichtenfenster | dasselbe für die angezeigte Nachricht | |
|
||||
| Schaltfläche im Verfassenfenster | Aus Paperless einfügen | als Anhang oder als Freigabelink |
|
||||
|
||||
@@ -46,13 +47,45 @@ alle Anhänge im Original. Es geht also nichts verloren, auch wenn die
|
||||
Darstellung nicht originalgetreu ist.
|
||||
|
||||
Wer lieber die Rohfassung will, stellt das in den Einstellungen um oder
|
||||
nimmt das Häkchen im Ablegen-Dialog heraus.
|
||||
wählt im ersten Fenster je Datei „Original ablegen".
|
||||
|
||||
**Titel aus dem Betreff.** Präfixe wie `AW:` oder `Fwd:` werden entfernt —
|
||||
sie tragen im Archiv nichts bei und stören beim Sortieren.
|
||||
|
||||
**Klassifizierung direkt danach.** Sonst trägt ein neues Dokument nur den
|
||||
Titel, und nachträglich macht man es erfahrungsgemäß nicht mehr.
|
||||
**Zwei Schritte, dann je Datei einer.**
|
||||
|
||||
```
|
||||
Fenster 1 Welche Dateien sollen abgelegt werden?
|
||||
[x] Rechnung.pdf (•) Original ( ) PDF aufbereiten
|
||||
[x] Anschreiben.html (•) Original ( ) PDF aufbereiten
|
||||
|
||||
Fenster 2 Je Datei: Ziel und Klassifizierung
|
||||
┌─ Ziel ──────────┐ ┌─ Klassifizierung ─┐
|
||||
│ ( ) Neu │ │ Titel [.......] │
|
||||
│ (•) An bestehen-│ │ Erstellt[....] │
|
||||
│ des anhängen│ │ Korresp.[.......] │
|
||||
│ [suche] │ │ Typ [.......] │
|
||||
│ Trefferliste │ │ Tags [suche] │
|
||||
└─────────────────┘ └───────────────────┘
|
||||
```
|
||||
|
||||
Die Trennung hat einen praktischen Grund: **Ziel und Klassifizierung sind
|
||||
je Datei verschieden.** Ein einzelner Dialog für alle würde die Angaben
|
||||
der ersten Datei auf alle übertragen — bei einer Rechnung samt
|
||||
Lastschriftmandat wäre das falsch.
|
||||
|
||||
**Klassifizierung des Ziels wird übernommen.** Wählt man ein bestehendes
|
||||
Dokument aus der Trefferliste, stehen Titel, Datum, Korrespondent, Typ und
|
||||
Tags schon im rechten Kasten und lassen sich anpassen. Eine neue Version
|
||||
gehört inhaltlich zum selben Vorgang; die Angaben neu einzutippen wäre
|
||||
Arbeit für nichts, und ein abweichender Korrespondent brächte die Version
|
||||
vom Original weg.
|
||||
|
||||
**Ein Aufruf je Datei.** Bewusst nicht alle in einem Durchgang: Manifest V3
|
||||
beendet die Ereignisseite, sobald sie untätig scheint, und ein Aufruf über
|
||||
zehn Anhänge lief regelmäßig in `Receiving end does not exist`. Nebeneffekt:
|
||||
Der Fortschritt ist sichtbar, und scheitert eine Datei, sind die übrigen
|
||||
trotzdem abgelegt.
|
||||
|
||||
### Warum kein originalgetreues Abbild
|
||||
|
||||
@@ -173,7 +206,7 @@ Dauerhaft:
|
||||
|
||||
```
|
||||
Add-ons-Verwaltung → Zahnrad → Add-on aus Datei installieren
|
||||
→ paperless-thunderbird-1.0.0.xpi
|
||||
→ paperless-connector-<version>.xpi
|
||||
```
|
||||
|
||||
---
|
||||
@@ -228,7 +261,7 @@ bei der LibreOffice-Fassung, weil hier **keine fremden Dokumente geöffnet**
|
||||
werden — der heikelste Punkt entfällt. Die wichtigsten Maßnahmen:
|
||||
|
||||
- Zugriffsrecht nur für die eingetragene Adresse, zur Laufzeit erbeten
|
||||
- Nur die fünf tatsächlich benötigten Berechtigungen — `compose.send` war
|
||||
- Nur die sechs tatsächlich benötigten Berechtigungen — `compose.send` war
|
||||
im ersten Entwurf enthalten, ohne je benutzt zu werden, und ist entfernt
|
||||
- Nur `http` und `https` als Basisadresse
|
||||
- Dateinamen aus Anhängen werden bereinigt — sie stammen vom Absender
|
||||
@@ -248,9 +281,11 @@ background.js Menüs, Schaltflächen, Vermittlung
|
||||
lib/
|
||||
client.js REST-Client (fetch, FormData)
|
||||
settings.js Einstellungen, Dateinamen, Hilfsmittel
|
||||
pdf.js PDF-Erzeuger ohne Fremdbibliothek
|
||||
mailpdf.js Aufbereitung einer Nachricht
|
||||
ui/
|
||||
store.html/.js Ablegen: Anhänge oder ganze Nachricht
|
||||
classify.html/.js Klassifizierung direkt danach
|
||||
store.html/.js Schritt 1: welche Dateien
|
||||
schritt.html/.js Schritt 2: Ziel und Klassifizierung je Datei
|
||||
insert.html/.js Einfügen als Anhang oder Link
|
||||
options.html/.js Verbindung einrichten
|
||||
gemeinsam.js/.css geteilte Hilfsmittel
|
||||
@@ -259,11 +294,28 @@ icons/
|
||||
```
|
||||
|
||||
Die Dialoge sprechen **nicht** selbst mit Paperless, sondern lassen die
|
||||
Ereignisseite arbeiten. Dort hängt die zur Laufzeit erteilte Berechtigung;
|
||||
ein Dialogfenster müsste sie sonst erneut erbitten.
|
||||
Ereignisseite arbeiten. So liegen Token und Verbindungslogik an einer
|
||||
Stelle, und die Dialoge bleiben reine Oberfläche.
|
||||
|
||||
Damit die Ereignisseite währenddessen nicht beendet wird, hält jeder
|
||||
Dialog eine offene Verbindung dorthin und sendet alle 15 Sekunden ein
|
||||
Lebenszeichen. Manifest V3 räumt sie sonst mitten im Vorgang ab —
|
||||
Wartezeiten zählen dort nicht als Ereignis.
|
||||
|
||||
---
|
||||
|
||||
### Eine Stolperstelle bei der Gestaltung
|
||||
|
||||
Die Dialoge sind auf feste Fensterhöhe mit blätternden Listen ausgelegt.
|
||||
Drei Dinge mussten dafür stimmen, und jedes einzelne führte für sich zum
|
||||
Überlauf:
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| `height: 100vh` am Body | mit `min-height` wächst die Seite über das Fenster hinaus |
|
||||
| kein `fieldset` als Flex-Behälter | dessen innerer anonymer Kasten löst `height: 100%` nicht auf — deshalb `<section class="kasten">` |
|
||||
| kein `flex-wrap` bei den Spalten | mit Umbruch bemisst sich die Zeilenhöhe nach dem Inhalt, nicht nach dem Behälter |
|
||||
|
||||
## Vor einer Veröffentlichung
|
||||
|
||||
| Datei | Was |
|
||||
@@ -274,6 +326,28 @@ ein Dialogfenster müsste sie sonst erneut erbitten.
|
||||
Die Kennung sollte einer Domain folgen, die dir gehört. Aktuell steht dort
|
||||
`paperless@example.org`.
|
||||
|
||||
### Anforderungen der Prüfung auf addons.thunderbird.net
|
||||
|
||||
Aus der Ablehnung von 1.16.0 übernommen, seit 1.16.1 umgesetzt:
|
||||
|
||||
- **Kein async-Listener an `runtime.onMessage`.** Ein async-Listener
|
||||
gibt immer ein Promise zurück und beansprucht damit jede Nachricht. Der
|
||||
Listener prüft deshalb synchron Absender und Befehl und gibt nur für
|
||||
bekannte Befehle das Promise zurück, sonst `false`. Neue Befehle kommen
|
||||
in die Tabelle `BEFEHLE` in `background.js`.
|
||||
- **Keine ungenutzten Dateien im Paket.** `build.sh` packt nur die in
|
||||
`DATEIEN` aufgeführten Dateien und weist auf alles andere im Quellbaum
|
||||
hin. `make_icons.py` erzeugt weiterhin alle Symbole samt SVG — im Paket
|
||||
landen nur die sieben, die Manifest und Code verwenden.
|
||||
- **Beschreibung mit Bedienungsanleitung und Bildschirmfotos** auf der
|
||||
Add-on-Seite, siehe `ATN-BESCHREIBUNG.md`.
|
||||
- Vor dem Hochladen den Linter laufen lassen:
|
||||
```bash
|
||||
git clone https://github.com/thunderbird/webext-linter
|
||||
cd webext-linter && npm install
|
||||
node verify.js /pfad/zu/paperless-connector-<version>.xpi
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Lizenz
|
||||
@@ -288,6 +362,3 @@ schließt jede Gewährleistung aus.
|
||||
|
||||
Vor dem ersten produktiven Einsatz: eine Testnachricht ablegen und in
|
||||
Paperless nachsehen, ob Titel, Datum und Anhänge stimmen.
|
||||
|
||||
Es wird weder eine Gewähr noch eine Haftung übernommen. Für entstandene
|
||||
Schäden haftet der jeweilige Anwender. Die Nutzun erfolgt auf eigenes Risiko.
|
||||
|
||||
Reference in New Issue
Block a user