@bobfrankston/rmfmail 1.1.5 → 1.1.6
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.bundle.js +40 -8
- package/client/app.bundle.js.map +2 -2
- package/client/app.js +15 -6
- package/client/app.js.map +1 -1
- package/client/app.ts +14 -6
- package/client/components/alarms.js +36 -10
- package/client/components/alarms.js.map +1 -1
- package/client/components/alarms.ts +32 -10
- package/client/components/message-list.js +30 -7
- package/client/components/message-list.js.map +1 -1
- package/client/components/message-list.ts +28 -6
- package/package.json +3 -3
- package/client/lib/tinymce/themes/silver/index.js +0 -7
- package/client/lib/tinymce/themes/silver/theme.js +0 -34829
- package/client/lib/tinymce/themes/silver/theme.min.js +0 -1
- package/client/lib/tinymce/tinymce.js +0 -41682
- package/client/lib/tinymce/tinymce.min.js +0 -10
- /package/packages/mailx-imap/{node_modules.npmglobalize-stash-11408 → node_modules.npmglobalize-stash-41384}/.package-lock.json +0 -0
package/client/app.bundle.js
CHANGED
|
@@ -2668,18 +2668,29 @@ function removeMessagesAndReconcile(uids) {
|
|
|
2668
2668
|
for (const row of Array.from(body.querySelectorAll(".ml-row"))) {
|
|
2669
2669
|
const el = row;
|
|
2670
2670
|
const key = `${el.dataset.accountId}:${el.dataset.uid}`;
|
|
2671
|
-
if (!stateUids.has(key))
|
|
2672
|
-
|
|
2671
|
+
if (!stateUids.has(key)) {
|
|
2672
|
+
const dead = rowByKey.get(key);
|
|
2673
|
+
if (dead)
|
|
2674
|
+
dead.detach();
|
|
2675
|
+
else
|
|
2676
|
+
el.remove();
|
|
2677
|
+
}
|
|
2673
2678
|
}
|
|
2674
2679
|
if (getMessages2().length === 0) {
|
|
2675
2680
|
body.innerHTML = `<div class="ml-empty">No messages</div>`;
|
|
2676
2681
|
}
|
|
2677
2682
|
}
|
|
2678
2683
|
if (outcome.focusedWasRemoved) {
|
|
2679
|
-
|
|
2680
|
-
|
|
2681
|
-
|
|
2684
|
+
const survivor = outcome.nextSurvivor;
|
|
2685
|
+
if (survivor && focusByIdentity(survivor.accountId, survivor.uid)) {
|
|
2686
|
+
return;
|
|
2682
2687
|
}
|
|
2688
|
+
const remaining = getMessages2();
|
|
2689
|
+
for (const m of remaining) {
|
|
2690
|
+
if (focusByIdentity(m.accountId, m.uid))
|
|
2691
|
+
return;
|
|
2692
|
+
}
|
|
2693
|
+
releaseFocus();
|
|
2683
2694
|
}
|
|
2684
2695
|
}
|
|
2685
2696
|
function reloadCurrentFolder() {
|
|
@@ -4655,7 +4666,8 @@ async function collectDueAlarms(now) {
|
|
|
4655
4666
|
try {
|
|
4656
4667
|
const events = await getCalendarEvents(now - LOOKBACK_MS, now + LOOKAHEAD_MS);
|
|
4657
4668
|
for (const ev of events) {
|
|
4658
|
-
|
|
4669
|
+
const stableId = ev.providerId || ev.uuid;
|
|
4670
|
+
if (!stableId)
|
|
4659
4671
|
continue;
|
|
4660
4672
|
const startMs = ev.startMs || 0;
|
|
4661
4673
|
if (!startMs)
|
|
@@ -4663,7 +4675,7 @@ async function collectDueAlarms(now) {
|
|
|
4663
4675
|
if (!Array.isArray(ev.reminderMinutes) || ev.reminderMinutes.length === 0)
|
|
4664
4676
|
continue;
|
|
4665
4677
|
const offsets = ev.reminderMinutes.map((m) => m * 6e4);
|
|
4666
|
-
const occBaseKey = occKey(
|
|
4678
|
+
const occBaseKey = occKey(stableId, startMs);
|
|
4667
4679
|
let pick = null;
|
|
4668
4680
|
const eligibleOffsets = [];
|
|
4669
4681
|
for (const offsetMs of offsets) {
|
|
@@ -4937,6 +4949,17 @@ async function firePopupForItem(item) {
|
|
|
4937
4949
|
snoozeItem(item, 60);
|
|
4938
4950
|
break;
|
|
4939
4951
|
case "Dismiss":
|
|
4952
|
+
case "dismissed":
|
|
4953
|
+
// msger reports window-close as r.dismissed=true → daemon
|
|
4954
|
+
// wrapper lowercases to "dismissed". Treat the same as
|
|
4955
|
+
// explicit Dismiss-button: the popup HAD a clear button
|
|
4956
|
+
// for that action, so any close that lands here is the
|
|
4957
|
+
// user's "I'm done with this reminder" — not a 15-min
|
|
4958
|
+
// snooze. Bob 2026-05-14: "I keep dismissing the
|
|
4959
|
+
// reminder but it keeps coming back" — the lowercase
|
|
4960
|
+
// path was hitting the snooze-15-min default, so the
|
|
4961
|
+
// popup re-fired every 15 min indefinitely.
|
|
4962
|
+
case "closed":
|
|
4940
4963
|
{
|
|
4941
4964
|
const m = loadDismissed();
|
|
4942
4965
|
m[item.uuid] = true;
|
|
@@ -4953,7 +4976,12 @@ async function firePopupForItem(item) {
|
|
|
4953
4976
|
deleteCalendarEvent(item.uuid).catch((e) => console.error(` [alarm] delete failed for ${item.uuid}: ${e?.message || e}`));
|
|
4954
4977
|
break;
|
|
4955
4978
|
default:
|
|
4956
|
-
|
|
4979
|
+
console.warn(`[alarm] unknown popup result: button=${JSON.stringify(r.button)}, form=${JSON.stringify(r.form)}`);
|
|
4980
|
+
{
|
|
4981
|
+
const m = loadDismissed();
|
|
4982
|
+
m[item.uuid] = true;
|
|
4983
|
+
saveDismissed(m);
|
|
4984
|
+
}
|
|
4957
4985
|
break;
|
|
4958
4986
|
}
|
|
4959
4987
|
}
|
|
@@ -7988,6 +8016,10 @@ subscribeStore("*", (ev) => {
|
|
|
7988
8016
|
document.dispatchEvent(new CustomEvent("mailx-remove-stale", {
|
|
7989
8017
|
detail: { accountId: ev.accountId, uid: ev.uid }
|
|
7990
8018
|
}));
|
|
8019
|
+
} else if (ev.kind === "messageMoved" && ev.accountId && ev.uid) {
|
|
8020
|
+
document.dispatchEvent(new CustomEvent("mailx-remove-stale", {
|
|
8021
|
+
detail: { accountId: ev.accountId, uid: ev.uid }
|
|
8022
|
+
}));
|
|
7991
8023
|
}
|
|
7992
8024
|
});
|
|
7993
8025
|
async function openComposeFromMailto(m) {
|