98 lines
3.3 KiB
JavaScript
98 lines
3.3 KiB
JavaScript
/**
|
|
* settings.js - Einstellungen und gemeinsam genutzte Hilfsmittel.
|
|
*
|
|
* Die Einstellungen liegen in browser.storage.local, also im Profil von
|
|
* Thunderbird. Der Token steht dort im Klartext - das entspricht dem, was
|
|
* Erweiterungen üblicherweise tun, ist aber kein Geheimnisspeicher.
|
|
* Einzelheiten in SICHERHEIT.md.
|
|
*/
|
|
|
|
const VORGABEN = {
|
|
baseUrl: "",
|
|
token: "",
|
|
versionLabel: "Thunderbird {datum}",
|
|
shareDays: 7,
|
|
shareTag: "Sharelink",
|
|
// Anhänge, die üblicherweise keine Dokumente sind. Sie werden im
|
|
// Auswahldialog vorab abgewählt, lassen sich aber anhaken.
|
|
ignorierteTypen: ["image/gif", "image/png", "image/jpeg", "text/vcard",
|
|
"text/calendar", "application/pkcs7-signature",
|
|
"application/pgp-signature"],
|
|
ignorierteKleiner: 8192 // Bytes; darunter meist Signaturbilder
|
|
};
|
|
|
|
export async function ladeEinstellungen() {
|
|
const gespeichert = await browser.storage.local.get(Object.keys(VORGABEN));
|
|
return { ...VORGABEN, ...gespeichert };
|
|
}
|
|
|
|
export async function speichereEinstellungen(werte) {
|
|
await browser.storage.local.set(werte);
|
|
}
|
|
|
|
export function vollstaendig(s) {
|
|
return Boolean(s?.baseUrl) && Boolean(s?.token);
|
|
}
|
|
|
|
/**
|
|
* Beliebige Zeichenkette in einen unbedenklichen Dateinamen überführen.
|
|
*
|
|
* Der Name eines E-Mail-Anhangs stammt vom Absender und ist damit nicht
|
|
* vertrauenswürdig. Er wird zwar nur an Paperless weitergereicht und nicht
|
|
* ins Dateisystem geschrieben, aber ein Wert wie "../../x" hat in einem
|
|
* Dateinamen nichts zu suchen.
|
|
*/
|
|
export function sichererName(name, vorgabe = "Dokument", maxlen = 120) {
|
|
let n = String(name || "");
|
|
n = n.replace(/\\/g, "/").split("/").pop();
|
|
n = n.replace(/[<>:"|?*\u0000-\u001f]/g, "").trim();
|
|
n = n.replace(/\s+/g, " ").replace(/^[. ]+|[. ]+$/g, "");
|
|
if (!n) return vorgabe;
|
|
const reserviert = /^(CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])(\.|$)/i;
|
|
if (reserviert.test(n)) n = "_" + n;
|
|
if (n.length > maxlen) {
|
|
const punkt = n.lastIndexOf(".");
|
|
const endung = punkt > 0 && n.length - punkt <= 9 ? n.slice(punkt) : "";
|
|
n = n.slice(0, maxlen - endung.length) + endung;
|
|
}
|
|
return n || vorgabe;
|
|
}
|
|
|
|
export function versionslabel(vorlage) {
|
|
const heute = new Date().toISOString().slice(0, 10);
|
|
return String(vorlage || "Thunderbird {datum}").replace("{datum}", heute);
|
|
}
|
|
|
|
/** Kürzt einen Text für die Anzeige. */
|
|
export function kurz(text, laenge = 70) {
|
|
const t = String(text || "");
|
|
return t.length > laenge ? t.slice(0, laenge - 1) + "…" : t;
|
|
}
|
|
|
|
/** Menschenlesbare Größenangabe. */
|
|
export function groesse(bytes) {
|
|
const b = Number(bytes) || 0;
|
|
if (b < 1024) return `${b} B`;
|
|
if (b < 1024 * 1024) return `${(b / 1024).toFixed(0)} KB`;
|
|
return `${(b / 1024 / 1024).toFixed(1)} MB`;
|
|
}
|
|
|
|
/**
|
|
* Betreff einer Nachricht in einen Dokumenttitel überführen.
|
|
*
|
|
* Präfixe wie "AW:" oder "Fwd:" tragen im Archiv nichts bei und stören
|
|
* beim Sortieren.
|
|
*/
|
|
export function titelAusBetreff(betreff) {
|
|
let t = String(betreff || "").trim();
|
|
const praefixe = /^((AW|RE|WG|FWD|FW|TR|RÉF|REF)\s*(\[\d+\])?\s*:\s*)+/i;
|
|
t = t.replace(praefixe, "").trim();
|
|
return t || "E-Mail ohne Betreff";
|
|
}
|
|
|
|
/** Übersetzung über die eingebaute Verwaltung von Thunderbird. */
|
|
export function t(schluessel, ersetzungen) {
|
|
const s = browser.i18n.getMessage(schluessel, ersetzungen);
|
|
return s || schluessel;
|
|
}
|