Initial commit
This commit is contained in:
97
lib/settings.js
Normal file
97
lib/settings.js
Normal file
@@ -0,0 +1,97 @@
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
Reference in New Issue
Block a user