Anpassung Tagsuche, Fix Fehler bei längeren Ladezeiten

This commit is contained in:
2026-09-07 17:38:06 +02:00
parent 00ca39609f
commit fd87813cbe
11 changed files with 271 additions and 51 deletions

View File

@@ -102,7 +102,22 @@ let naechsteAuftragsnummer = 1;
// ---------------------------------------------------------------- Menüs
browser.runtime.onInstalled.addListener(() => {
/**
* Menüeinträge anlegen.
*
* NICHT in onInstalled: Eine Ereignisseite wird beendet und bei Bedarf
* neu geladen, das Skript läuft dabei erneut durch. Die Menüs überleben
* das aber - ein zweiter menus.create mit derselben Kennung scheitert
* dann mit "already exists".
*
* Deshalb erst removeAll, dann neu anlegen. Das ist bei jedem Aufwachen
* richtig und kostet nichts.
*/
async function menueAufbauen() {
try {
await browser.menus.removeAll();
} catch { /* beim ersten Lauf gibt es nichts zu entfernen */ }
browser.menus.create({
id: "paperless-anhang",
title: t("menuStoreAttachment"),
@@ -113,7 +128,9 @@ browser.runtime.onInstalled.addListener(() => {
title: t("menuStoreMessage"),
contexts: ["message_list"]
});
});
}
menueAufbauen();
browser.menus.onClicked.addListener(async (info, tab) => {
try {
@@ -249,6 +266,29 @@ async function dialogOeffnen(art, daten) {
// -------------------------------------------- Vermittlung für die Dialoge
/**
* Offene Verbindungen der Dialoge.
*
* SEHR WICHTIG: Eine Ereignisseite wird beendet, sobald keine Ereignisse
* mehr anstehen. Eine laufende Wartezeit in waitForTask zählt NICHT als
* Ereignis - mitten im Ablegen verschwindet sonst der Empfänger, und der
* Dialog bekommt "Could not establish connection. Receiving end does not
* exist."
*
* Eine offene Verbindung hält die Seite dagegen am Leben. Die Dialoge
* öffnen deshalb beim Laden eine und halten sie bis zum Schliessen.
*/
const verbindungen = new Set();
browser.runtime.onConnect.addListener((port) => {
verbindungen.add(port);
console.debug("[paperless] Dialog verbunden, offen:", verbindungen.size);
port.onDisconnect.addListener(() => {
verbindungen.delete(port);
console.debug("[paperless] Dialog getrennt, offen:", verbindungen.size);
});
});
browser.runtime.onMessage.addListener(async (nachricht, absender) => {
// Nur Nachrichten aus dieser Erweiterung annehmen. Thunderbird lässt
// fremde Absender hier zwar ohnehin nicht durch, solange kein
@@ -390,14 +430,22 @@ async function ablegen(nachricht) {
const antwort = await c.updateVersion(
nachricht.zielId, datei.blob, datei.name,
versionslabel(s.versionLabel));
const id = await c.waitForTask(antwort);
const id = await c.waitForTask(antwort, (sek) => {
if (sek % 15 === 0) {
console.debug("[paperless] warte auf Aufgabe:", sek, "s");
}
});
ergebnisse.push({ id, name: datei.name, art: "version",
zielId: nachricht.zielId });
} else {
const felder = { title: nachricht.titel || datei.name };
if (nachricht.erstellt) felder.created = nachricht.erstellt;
const antwort = await c.postDocument(datei.blob, datei.name, felder);
const id = await c.waitForTask(antwort);
const id = await c.waitForTask(antwort, (sek) => {
if (sek % 15 === 0) {
console.debug("[paperless] warte auf Aufgabe:", sek, "s");
}
});
ergebnisse.push({ id, name: datei.name, art: "neu" });
}
}