@bobfrankston/rmfmail 1.0.607 → 1.0.619

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/client/app.ts CHANGED
@@ -11,8 +11,36 @@ import * as messageState from "./lib/message-state.js";
11
11
 
12
12
  // ── New message badge (favicon + title) ──
13
13
  /** The user-visible app name. Single point of change for the rename;
14
- * every UI surface that shows "rmfmail" reads from here. */
14
+ * every UI surface that shows "rmfmail" reads from here. Static HTML
15
+ * uses placeholder text that `propagateAppName` (called immediately
16
+ * below) overwrites — so the constant is the only place the literal
17
+ * string lives. */
15
18
  export const APP_NAME = "rmfmail";
19
+
20
+ /** Stamp APP_NAME into every static HTML element that should show it.
21
+ * Runs synchronously at module load — before paint when imports are
22
+ * fast, with a sub-frame flash of the placeholder otherwise. Add new
23
+ * surfaces here, never inline literals. */
24
+ function propagateAppName(): void {
25
+ const set = (id: string, fn: (v: string) => string): void => {
26
+ const el = document.getElementById(id);
27
+ if (el) el.textContent = fn(APP_NAME);
28
+ };
29
+ document.title = APP_NAME;
30
+ set("startup-status", n => `Starting ${n}…`);
31
+ set("status-version", n => n);
32
+ set("app-version", n => n);
33
+ // About-button label / restart-button hover-titles live in HTML
34
+ // attributes; rewrite the ones that include the name.
35
+ const aboutBtn = document.getElementById("btn-about");
36
+ if (aboutBtn) aboutBtn.title = `Show version and build info`;
37
+ const aboutText = aboutBtn?.textContent || "";
38
+ if (aboutBtn && aboutText.toLowerCase().includes("about")) {
39
+ aboutBtn.textContent = `About ${APP_NAME}...`;
40
+ }
41
+ }
42
+ propagateAppName();
43
+
16
44
  let baseTitle = APP_NAME;
17
45
  let lastSeenCount = 0;
18
46
  let badgeCount = 0;
@@ -895,10 +923,33 @@ async function deleteSelectedMessages(): Promise<void> {
895
923
 
896
924
  const statusSync = document.getElementById("status-sync");
897
925
 
926
+ // Optimistic UI: remove from list IMMEDIATELY, then queue the IPC.
927
+ // Old order awaited the daemon round-trip (IPC + DB updates) before
928
+ // the rows disappeared, which felt sluggish on bigger selections or
929
+ // when the IPC was congested. Spam button already worked this way;
930
+ // trash now matches. If the IPC fails, the next folder reload
931
+ // re-populates the row and the catch block surfaces the error.
932
+ const snapshot = [...selected];
933
+ removeMessagesAndReconcile(selected);
934
+
935
+ // Undo support set immediately too — Ctrl+Z works the moment rows
936
+ // disappear from the list, not only after the daemon ACKs.
937
+ if (snapshot.length === 1) {
938
+ lastDeleted = { ...snapshot[0], subject: "" };
939
+ if (statusSync) statusSync.textContent = `Trashed 1 message (syncing) — Ctrl+Z to undo`;
940
+ } else {
941
+ lastDeleted = null;
942
+ if (statusSync) statusSync.textContent = `Trashed ${snapshot.length} messages (syncing)`;
943
+ }
944
+ if (undoTimeout) clearTimeout(undoTimeout);
945
+ undoTimeout = setTimeout(() => {
946
+ lastDeleted = null;
947
+ if (statusSync?.textContent?.includes("undo")) statusSync.textContent = "";
948
+ }, 30000);
949
+
898
950
  try {
899
- // Delete on server — group by account for bulk operations
900
951
  const byAccount = new Map<string, number[]>();
901
- for (const msg of selected) {
952
+ for (const msg of snapshot) {
902
953
  const uids = byAccount.get(msg.accountId) || [];
903
954
  uids.push(msg.uid);
904
955
  byAccount.set(msg.accountId, uids);
@@ -906,29 +957,9 @@ async function deleteSelectedMessages(): Promise<void> {
906
957
  for (const [accountId, uids] of byAccount) {
907
958
  await deleteMessages(accountId, uids);
908
959
  }
909
-
910
- // Undo supports the last batch
911
- if (selected.length === 1) {
912
- lastDeleted = { ...selected[0], subject: "" };
913
- if (statusSync) statusSync.textContent = `Trashed 1 message (syncing) — Ctrl+Z to undo`;
914
- } else {
915
- lastDeleted = null;
916
- if (statusSync) statusSync.textContent = `Trashed ${selected.length} messages (syncing)`;
917
- }
918
-
919
- if (undoTimeout) clearTimeout(undoTimeout);
920
- undoTimeout = setTimeout(() => {
921
- lastDeleted = null;
922
- if (statusSync?.textContent?.includes("undo")) statusSync.textContent = "";
923
- }, 30000);
924
-
925
- // Remove via the list controller — single transaction filters
926
- // state, deletes DOM rows, hands focus to a survivor (or clears
927
- // the viewer). Replaces the old "state.removeMessages broadcasts
928
- // a removed event, list+viewer subscribe independently" model.
929
- removeMessagesAndReconcile(selected);
930
960
  } catch (e: any) {
931
961
  console.error(`Delete failed: ${e.message}`);
962
+ if (statusSync) statusSync.textContent = `Delete failed: ${e?.message || e}`;
932
963
  }
933
964
  }
934
965
 
@@ -1728,7 +1759,7 @@ window.addEventListener("message", (e) => {
1728
1759
  // instantly and lingers when the user moves to do anything else,
1729
1760
  // including punching through the compose overlay (which sits at
1730
1761
  // z-index 1000 — popover was at 10000, hence the bug in the
1731
- // screenshot). Now: 500ms hover delay; suppressed entirely when
1762
+ // screenshot). Now: 1500ms hover delay; suppressed entirely when
1732
1763
  // any overlay (compose, modal) is open; auto-dismissed on click,
1733
1764
  // scroll, blur, or any keypress.
1734
1765
  const w = window as any;
@@ -1743,7 +1774,7 @@ window.addEventListener("message", (e) => {
1743
1774
  const source = e.source;
1744
1775
  w._linkHoverShowTimer = setTimeout(() => {
1745
1776
  // Re-check overlay state at fire time — overlay may have appeared
1746
- // during the 500ms wait.
1777
+ // during the 1500ms wait.
1747
1778
  if (document.querySelector(".compose-overlay, .mailx-modal-backdrop")) return;
1748
1779
  if (!pop) {
1749
1780
  pop = document.createElement("div");
@@ -1773,7 +1804,7 @@ window.addEventListener("message", (e) => {
1773
1804
  pop.style.left = x + "px";
1774
1805
  pop.style.top = y + "px";
1775
1806
  }
1776
- }, 500);
1807
+ }, 1500);
1777
1808
  }
1778
1809
  if (e.data?.type === "previewKey" && typeof e.data.key === "string") {
1779
1810
  // Re-dispatch as a real keydown on document so the hotkey handler
@@ -2327,11 +2358,18 @@ document.addEventListener("keydown", (e) => {
2327
2358
  // Ctrl+D or Delete = Delete selected messages.
2328
2359
  // P15: don't hijack Delete inside text inputs / textareas / contenteditable
2329
2360
  // — JSONC editor's Delete key was being eaten because we always preventDefault'd.
2361
+ // 2026-05-09 fix: if the LIST has multiple selected rows, the user
2362
+ // clearly means "delete those" regardless of where focus is — search
2363
+ // input retaining focus after filtering shouldn't make the key dead.
2364
+ // Only defer to native behavior when there's no list selection AND
2365
+ // focus is in a text-editing surface.
2330
2366
  if ((e.ctrlKey && e.key === "d") || e.key === "Delete") {
2331
2367
  const t = e.target as HTMLElement | null;
2332
2368
  const tag = t?.tagName;
2333
2369
  const editable = t?.isContentEditable;
2334
- if (tag === "INPUT" || tag === "TEXTAREA" || tag === "SELECT" || editable) return;
2370
+ const inEditable = tag === "INPUT" || tag === "TEXTAREA" || tag === "SELECT" || editable;
2371
+ const listSelectionCount = document.querySelectorAll("#ml-body .ml-row.selected").length;
2372
+ if (inEditable && listSelectionCount === 0) return;
2335
2373
  e.preventDefault();
2336
2374
  deleteSelection();
2337
2375
  }
@@ -123,158 +123,75 @@ function formatWhen(ms) {
123
123
  }
124
124
  let currentPopup = null;
125
125
  let firedThisSession = new Set();
126
- function showPopup(items) {
127
- if (currentPopup)
128
- return; // another popup already up
129
- if (items.length === 0)
130
- return;
131
- const overlay = document.createElement("div");
132
- overlay.className = "alarm-overlay";
133
- const panel = document.createElement("div");
134
- panel.className = "alarm-panel";
135
- panel.innerHTML = `
136
- <div class="alarm-head">
137
- <span class="alarm-icon">⏰</span>
138
- <span class="alarm-title">${items.length} reminder${items.length > 1 ? "s" : ""}</span>
139
- <button type="button" class="alarm-close" aria-label="Close">&times;</button>
140
- </div>
141
- <div class="alarm-list"></div>
142
- <div class="alarm-foot">
143
- <label class="alarm-snooze-label">Snooze for
144
- <select class="alarm-snooze-sel">
145
- <option value="5">5 minutes</option>
146
- <option value="15" selected>15 minutes</option>
147
- <option value="30">30 minutes</option>
148
- <option value="60">1 hour</option>
149
- <option value="240">4 hours</option>
150
- <option value="1440">1 day</option>
151
- <option value="custom">custom…</option>
152
- </select>
153
- </label>
154
- <span style="flex:1"></span>
155
- <button type="button" class="alarm-btn alarm-btn-snooze">Snooze all</button>
156
- <button type="button" class="alarm-btn alarm-btn-primary alarm-btn-dismiss">Dismiss all</button>
157
- </div>
158
- `;
159
- const list = panel.querySelector(".alarm-list");
160
- for (const it of items) {
161
- const row = document.createElement("div");
162
- row.className = "alarm-row";
163
- row.dataset.uuid = it.uuid;
164
- row.innerHTML = `
165
- <div class="alarm-row-main">
166
- <span class="alarm-row-kind">${it.kind === "calendar" ? "📅" : "☑"}</span>
167
- <span class="alarm-row-title"></span>
168
- <span class="alarm-row-when"></span>
169
- </div>
170
- <div class="alarm-row-actions">
171
- ${it.htmlLink ? `<button type="button" class="alarm-row-link" data-link="${it.htmlLink}" title="View in browser">↗</button>` : ""}
172
- <button type="button" class="alarm-row-dismiss" title="Dismiss this one">✕</button>
126
+ /** uuids whose popup is currently visible on screen — set when the
127
+ * popup opens, cleared when the user resolves it (button or close).
128
+ * pollAlarms skips uuids in here so a tick that lands while a popup is
129
+ * still up doesn't open a second window for the same event. Distinct
130
+ * from `firedThisSession` (which is "shown at any point this session"
131
+ * and gets cleared by snooze) — `openPopups` is "right now on screen". */
132
+ let openPopups = new Set();
133
+ function escapeHtml(s) {
134
+ return s.replace(/[&<>"']/g, c => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", "\"": "&quot;", "'": "&#39;" }[c]));
135
+ }
136
+ /** Render the popup using an inline DOM overlay — used when no msger
137
+ * host is available (browser mode, Android shells without
138
+ * showReminderPopup wired). Returns the same shape as the msger path
139
+ * so the caller can switch on `r.button` uniformly. */
140
+ function showInWebViewPopup(opts) {
141
+ return new Promise(resolve => {
142
+ const overlay = document.createElement("div");
143
+ overlay.className = "alarm-overlay";
144
+ const panel = document.createElement("div");
145
+ panel.className = "alarm-panel";
146
+ const buttonsHtml = opts.buttons.map(b => `<button type="button" class="alarm-btn${b === "Open" || b === "Dismiss" ? " alarm-btn-primary" : ""}" data-button="${escapeHtml(b)}">${escapeHtml(b)}</button>`).join("");
147
+ panel.innerHTML = `
148
+ <div class="alarm-head">
149
+ <span class="alarm-icon">⏰</span>
150
+ <span class="alarm-title">${escapeHtml(opts.title)}</span>
151
+ <button type="button" class="alarm-close" data-button="" aria-label="Close">&times;</button>
173
152
  </div>
153
+ <div class="alarm-body">${opts.html}</div>
154
+ <div class="alarm-foot">${buttonsHtml}</div>
174
155
  `;
175
- row.querySelector(".alarm-row-title").textContent = it.title;
176
- row.querySelector(".alarm-row-when").textContent = formatWhen(it.whenMs);
177
- list.appendChild(row);
178
- }
179
- overlay.appendChild(panel);
180
- document.body.appendChild(overlay);
181
- currentPopup = overlay;
182
- // Pin the mailx window above other apps while a reminder is showing —
183
- // matches Thunderbird's reminder dialog behavior. Cleared on close so
184
- // the window doesn't stay always-on-top once the user has acknowledged.
185
- // No-op in browser fallback (msgapi only present in WebView2).
186
- const msgapi = window.msgapi;
187
- try {
188
- msgapi?.setAlwaysOnTop?.(true);
189
- }
190
- catch { /* */ }
191
- const snoozeMinutes = () => {
192
- const sel = panel.querySelector(".alarm-snooze-sel");
193
- if (sel.value === "custom") {
194
- const v = prompt("Snooze for how many minutes?", "30");
195
- const n = parseInt(v || "", 10);
196
- return Number.isFinite(n) && n > 0 ? n : null;
197
- }
198
- return parseInt(sel.value, 10);
199
- };
200
- const snoozeAll = (minutes) => {
201
- const now = Date.now();
202
- const map = loadSnoozed();
203
- for (const it of items)
204
- map[it.uuid] = now + minutes * 60_000;
205
- saveSnoozed(map);
206
- for (const it of items)
207
- firedThisSession.delete(it.uuid);
208
- close();
209
- };
210
- const dismissAll = () => {
211
- const map = loadDismissed();
212
- for (const it of items)
213
- map[it.uuid] = true;
214
- saveDismissed(map);
215
- close();
216
- };
217
- const close = () => {
218
- overlay.remove();
219
- currentPopup = null;
156
+ overlay.appendChild(panel);
157
+ document.body.appendChild(overlay);
158
+ currentPopup = overlay;
159
+ const msgapi = window.msgapi;
220
160
  try {
221
- msgapi?.setAlwaysOnTop?.(false);
161
+ msgapi?.setAlwaysOnTop?.(true);
222
162
  }
223
163
  catch { /* */ }
224
- };
225
- panel.querySelector(".alarm-close")?.addEventListener("click", close);
226
- panel.querySelector(".alarm-btn-snooze")?.addEventListener("click", () => {
227
- const n = snoozeMinutes();
228
- if (n)
229
- snoozeAll(n);
230
- });
231
- panel.querySelector(".alarm-btn-dismiss")?.addEventListener("click", dismissAll);
232
- panel.querySelectorAll(".alarm-row-dismiss").forEach(btn => {
233
- btn.addEventListener("click", () => {
234
- const row = btn.closest(".alarm-row");
235
- const uuid = row?.dataset.uuid;
236
- if (!uuid)
237
- return;
238
- const map = loadDismissed();
239
- map[uuid] = true;
240
- saveDismissed(map);
241
- row.remove();
242
- if (panel.querySelector(".alarm-list")?.childElementCount === 0)
243
- close();
244
- });
245
- });
246
- panel.querySelectorAll(".alarm-row-link").forEach(btn => {
247
- btn.addEventListener("click", () => {
248
- const url = btn.dataset.link;
249
- if (!url)
250
- return;
251
- const api = window.mailxapi;
252
- if (api?.openExternal)
253
- api.openExternal(url);
254
- else
255
- window.open(url, "_blank");
164
+ const cleanup = (button) => {
165
+ overlay.remove();
166
+ currentPopup = null;
167
+ try {
168
+ msgapi?.setAlwaysOnTop?.(false);
169
+ }
170
+ catch { /* */ }
171
+ document.removeEventListener("keydown", onKey, true);
172
+ resolve({ button });
173
+ };
174
+ const onKey = (e) => {
175
+ if (e.key === "Escape") {
176
+ e.stopPropagation();
177
+ cleanup("");
178
+ }
179
+ };
180
+ document.addEventListener("keydown", onKey, true);
181
+ panel.querySelectorAll("[data-button]").forEach(btn => {
182
+ btn.addEventListener("click", () => cleanup(btn.dataset.button || ""));
256
183
  });
257
184
  });
258
- // Escape closes without action (same as X) — user can re-open with next
259
- // poll tick by not acting on it.
260
- const onKey = (e) => {
261
- if (e.key === "Escape") {
262
- e.stopPropagation();
263
- close();
264
- document.removeEventListener("keydown", onKey, true);
265
- }
266
- };
267
- document.addEventListener("keydown", onKey, true);
268
- }
269
- /** Fire one OS-level always-on-top popup per due item. Each popup is its
270
- * own msger window — visible above other apps, not tied to mailx focus.
271
- * Buttons returned by msger map to local state changes (snooze/dismiss)
272
- * and the optional Google Calendar deep-link. The in-WebView popup stays
273
- * as a fallback for the browser-mode build (no msger host). */
274
- function escapeHtml(s) {
275
- return s.replace(/[&<>"']/g, c => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", "\"": "&quot;", "'": "&#39;" }[c]));
276
185
  }
277
- async function showOsPopupForItem(item) {
186
+ async function firePopupForItem(item) {
187
+ // Already-showing guard. The popup chain is fire-and-forget so
188
+ // without an explicit registry there's nothing stopping a second
189
+ // window for the same uuid (e.g., a 2-min Open snooze expires while
190
+ // the user is still looking at the first popup). `openPopups` tracks
191
+ // "currently on screen" — pollAlarms also checks it.
192
+ if (openPopups.has(item.uuid))
193
+ return;
194
+ openPopups.add(item.uuid);
278
195
  const html = `<!DOCTYPE html>
279
196
  <html><head><meta charset="utf-8"><style>
280
197
  body { font: 13px system-ui, sans-serif; margin: 0; padding: 16px 18px; background: #fff; color: #222; }
@@ -292,16 +209,26 @@ async function showOsPopupForItem(item) {
292
209
  // event as a fresh entry — if the user moves the start time during
293
210
  // the edit, the new alarm fires off the new time, not the old one.
294
211
  // Tasks have no htmlLink so Open is skipped for them.
295
- const buttons = [];
296
- buttons.push("Snooze 15m", "Snooze 1h", "Dismiss");
212
+ const buttons = ["Snooze 15m", "Snooze 1h", "Dismiss"];
297
213
  if (item.htmlLink)
298
214
  buttons.push("Open");
299
- const r = await showReminderPopup({
300
- title: item.kind === "calendar" ? "Calendar reminder" : "Task reminder",
301
- html,
302
- buttons,
303
- size: { width: 480, height: 210 },
304
- });
215
+ const title = item.kind === "calendar" ? "Calendar reminder" : "Task reminder";
216
+ const hasHost = !!window.mailxapi?.showReminderPopup;
217
+ let r;
218
+ try {
219
+ if (hasHost) {
220
+ r = await showReminderPopup({
221
+ title, html, buttons,
222
+ size: { width: 480, height: 210 },
223
+ });
224
+ }
225
+ else {
226
+ r = await showInWebViewPopup({ title, html, buttons });
227
+ }
228
+ }
229
+ finally {
230
+ openPopups.delete(item.uuid);
231
+ }
305
232
  const api = window.mailxapi;
306
233
  const openLink = () => {
307
234
  if (!item.htmlLink)
@@ -370,34 +297,25 @@ function snoozeItem(item, minutes) {
370
297
  }
371
298
  async function pollAlarms() {
372
299
  if (document.hidden)
373
- return; // don't fire while tab hidden
300
+ return; // don't tick while tab hidden
374
301
  const now = Date.now();
375
302
  pruneState(now);
376
303
  const due = await collectDueAlarms(now);
377
- // Only show items we haven't already fired this session (prevents the
378
- // popup from immediately re-appearing if the user closes it without
379
- // dismissing the item still matches the "due" filter next tick).
380
- const fresh = due.filter(d => !firedThisSession.has(d.uuid));
304
+ // Two filters: skip uuids already fired this session (Snooze + an
305
+ // expired snooze re-allows them; Dismiss permanently suppresses via
306
+ // localStorage), and skip uuids whose popup is currently visible
307
+ // (race guard for fire-and-forget OS popups).
308
+ const fresh = due.filter(d => !firedThisSession.has(d.uuid) && !openPopups.has(d.uuid));
381
309
  if (fresh.length === 0)
382
310
  return;
383
311
  for (const d of fresh)
384
312
  firedThisSession.add(d.uuid);
385
- // Prefer OS-level always-on-top popup when running in WebView (msger
386
- // host); fall back to the in-WebView aggregated popup in the browser
387
- // build. The msgapi check is the same gate the in-WebView popup uses
388
- // for setAlwaysOnTop.
389
- const hasHost = !!window.mailxapi?.showReminderPopup;
390
- if (hasHost) {
391
- for (const item of fresh) {
392
- // Fire-and-forget — popups are independent processes; we don't
393
- // serialize them. Errors get logged but never block.
394
- showOsPopupForItem(item).catch(e => console.error(` [alarm] OS popup failed: ${e?.message || e}`));
395
- }
396
- }
397
- else {
398
- if (currentPopup)
399
- return;
400
- showPopup(fresh);
313
+ // One unified path. firePopupForItem picks render target (msger OS
314
+ // window vs in-WebView DOM overlay) internally; same buttons,
315
+ // same post-click logic, same dedup. Fire-and-forget per item —
316
+ // errors logged but never block the poll loop.
317
+ for (const item of fresh) {
318
+ firePopupForItem(item).catch(e => console.error(` [alarm] popup failed: ${e?.message || e}`));
401
319
  }
402
320
  }
403
321
  /** Start the alarm poller. Called from app.ts on startup. */
@@ -1 +1 @@
1
- {"version":3,"file":"alarms.js","sourceRoot":"","sources":["alarms.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"alarms.js","sourceRoot":"","sources":["alarms.ts"],"names":[],"mappings":"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"}