Let go of old message bodies and of exported files
Every message opened kept its full copy for as long as the tab was open. The store now holds bodies for the 40 messages most recently wanted; older ones go back to the list properties and are fetched in full again if opened. The open conversation is never released. Contact, settings and calendar exports go through downloadFile, which releases the object URL once the download has started; three of them never released it.
This commit is contained in:
1 parent
da87925b9c
commit
f123467897
6 files changed
+161
-15
No files matched your search
@@ -25,6 +25,7 @@ import {
|
||||
type DateFormat,
|
||||
} from "@/lib/datetime";
|
||||
import { isEnforced } from "@/lib/settingsPolicy";
|
||||
import { downloadFile } from "@/lib/download";
|
||||
|
||||
/** Illustrative instant used for the format previews: 22 Nov 2025, 18:23. */
|
||||
const SAMPLE = new Date(2025, 10, 22, 18, 23);
|
||||
@@ -236,7 +237,7 @@ export function GeneralSettings() {
|
||||
|
||||
<h2>{t("Backup")}</h2>
|
||||
<div className="row wrap">
|
||||
<button className="btn" onClick={() => { const blob = new Blob([exportJson()], { type: "application/json" }); const a = document.createElement("a"); a.href = URL.createObjectURL(blob); a.download = "ihasmail-settings.json"; a.click(); }}>{t("Export settings")}</button>
|
||||
<button className="btn" onClick={() => downloadFile(exportJson(), "application/json", "ihasmail-settings.json")}>{t("Export settings")}</button>
|
||||
<label className="btn">
|
||||
{t("Import settings")}
|
||||
<input type="file" accept="application/json" hidden onChange={async (e) => { const f = e.target.files?.[0]; if (!f) return; const ok = importJson(await f.text()); toast[ok ? "success" : "error"](ok ? t("Settings imported") : t("Invalid settings file")); e.target.value = ""; }} />
|
||||
|
||||
Reference in new issue
Block a user