feat(calendar): libpst (readpst) download button in Settings, matching the Import dialog's tool buttons (FR-CAL-1, ADR-0008)

This commit is contained in:
iamdoubz committed 2026-07-15 20:28:19 -05:00
1 parent 29bb636cb5
commit c9643cd79b
1 file changed
+41 -1
+41 -1
View File
@@ -286,6 +286,11 @@
}
// ---- Calendar / .pst import (T6.1/T6.2/T6.3, FR-CAL-1/2) ----
// .pst import shells out to readpst (libpst, ADR-0008) — external like
// ffmpeg/yt-dlp, so link the same kind of download button as the Import
// dialog's. ezwinports is the maintained Windows build of libpst.
const LIBPST_URL =
"https://sourceforge.net/projects/ezwinports/files/libpst-0.6.63-w32-bin.zip/download";
let pstPath = $state("");
let pstPassword = $state("");
let eventTitleFilter = $state("");
@@ -987,7 +992,9 @@
<p class="muted">{t("settings.hardware.stress_hint")}</p>
<button onclick={runStressTest} disabled={stressRunning}>
<Zap size={13} aria-hidden="true" />
{stressRunning ? t("settings.hardware.stress_running") : t("settings.hardware.stress_run")}
{stressRunning
? t("settings.hardware.stress_running")
: t("settings.hardware.stress_run")}
</button>
{#if stressProgress}
<p class="muted">{t("settings.hardware.stress_progress", { pair: stressProgress })}</p>
@@ -1344,6 +1351,12 @@
{t("settings.calendar.intro_1")} <code>.pst</code>
{t("settings.calendar.intro_2")}
</p>
<div class="tools">
<span class="muted small">{t("settings.calendar.requires")}</span>
<button class="tool" type="button" onclick={() => api.openUrl(LIBPST_URL)}>
<Download size={12} aria-hidden="true" /> libpst (readpst)
</button>
</div>
<div class="grid">
<label class="wide"
>{t("settings.calendar.pst_file")}
@@ -2384,6 +2397,33 @@
font-size: 0.85rem;
line-height: 1.5;
}
/* External-tool download chip — identical to the Import dialog's
ffmpeg/yt-dlp buttons (ImportMeeting.svelte). */
.tools {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 0.4rem;
margin-top: 0.9rem;
}
.tool {
display: inline-flex;
align-items: center;
gap: 0.25rem;
background: var(--bg-hover, transparent);
color: var(--accent);
border: 1px solid var(--border);
border-radius: var(--radius-sm);
padding: 0.2rem 0.5rem;
font-size: 0.78rem;
cursor: pointer;
}
.tool:hover {
border-color: var(--accent);
}
.tools .small {
font-size: 0.8rem;
}
.footnote {
margin-top: 1rem;
border-top: 1px solid var(--border);