@bobfrankston/rmfmail 1.2.97 → 1.2.100

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.
Files changed (41) hide show
  1. package/client/android-bootstrap.bundle.js +85 -22
  2. package/client/android-bootstrap.bundle.js.map +2 -2
  3. package/client/app.bundle.js +36 -1
  4. package/client/app.bundle.js.map +2 -2
  5. package/client/app.js +25 -0
  6. package/client/app.js.map +1 -1
  7. package/client/app.ts +25 -0
  8. package/client/components/message-viewer.js +29 -1
  9. package/client/components/message-viewer.js.map +1 -1
  10. package/client/components/message-viewer.ts +25 -1
  11. package/package.json +3 -3
  12. package/packages/mailx-imap/index.d.ts.map +1 -1
  13. package/packages/mailx-imap/index.js +6 -2
  14. package/packages/mailx-imap/index.js.map +1 -1
  15. package/packages/mailx-imap/index.ts +6 -2
  16. package/packages/mailx-imap/package-lock.json +2 -2
  17. package/packages/mailx-imap/package.json +1 -1
  18. package/packages/mailx-store/db.d.ts +7 -0
  19. package/packages/mailx-store/db.d.ts.map +1 -1
  20. package/packages/mailx-store/db.js +13 -1
  21. package/packages/mailx-store/db.js.map +1 -1
  22. package/packages/mailx-store/db.ts +19 -1
  23. package/packages/mailx-store/package.json +1 -1
  24. package/packages/mailx-store-web/android-bootstrap.d.ts.map +1 -1
  25. package/packages/mailx-store-web/android-bootstrap.js +74 -19
  26. package/packages/mailx-store-web/android-bootstrap.js.map +1 -1
  27. package/packages/mailx-store-web/android-bootstrap.ts +71 -16
  28. package/packages/mailx-store-web/db.d.ts +1 -0
  29. package/packages/mailx-store-web/db.d.ts.map +1 -1
  30. package/packages/mailx-store-web/db.js +21 -5
  31. package/packages/mailx-store-web/db.js.map +1 -1
  32. package/packages/mailx-store-web/db.ts +20 -7
  33. package/packages/mailx-store-web/imap-web-provider.d.ts.map +1 -1
  34. package/packages/mailx-store-web/imap-web-provider.js +1 -0
  35. package/packages/mailx-store-web/imap-web-provider.js.map +1 -1
  36. package/packages/mailx-store-web/imap-web-provider.ts +1 -0
  37. package/packages/mailx-store-web/package.json +1 -1
  38. package/packages/mailx-store-web/sync-manager.d.ts.map +1 -1
  39. package/packages/mailx-store-web/sync-manager.js +4 -0
  40. package/packages/mailx-store-web/sync-manager.js.map +1 -1
  41. package/packages/mailx-store-web/sync-manager.ts +4 -0
@@ -1597,6 +1597,22 @@ async function showMessage(accountId, uid, folderId, specialUse, isRetry = false
1597
1597
  });
1598
1598
  return;
1599
1599
  }
1600
+ if (msg.bodyError && !msg.bodyHtml && !msg.bodyText) {
1601
+ try {
1602
+ renderHeaderFromEnvelope(headerEl, msg);
1603
+ headerEl.hidden = false;
1604
+ } catch {
1605
+ }
1606
+ const transient = msg.bodyErrorTransient;
1607
+ bodyEl.innerHTML = `<div class="mv-system-message mv-system-error">
1608
+ <div class="mv-system-tag">mailx</div>
1609
+ <div class="mv-system-title">Body fetch failed</div>
1610
+ <div class="mv-system-body">${escapeHtml2(msg.bodyError)}<br><span style="color:var(--color-text-muted);font-size:0.9em">${transient ? "Reopen this message to retry." : "Permanent \u2014 the message may have been deleted on the server."}</span></div>
1611
+ </div>`;
1612
+ currentMessage = msg;
1613
+ currentAccountId = accountId;
1614
+ return;
1615
+ }
1600
1616
  if (!cachedMsg)
1601
1617
  parsedCachePut(accountId, folderId, uid, msg);
1602
1618
  currentMessage = msg;
@@ -2622,7 +2638,12 @@ ${csp}
2622
2638
  var k = (e.key || "").toLowerCase();
2623
2639
  var isShortcut = e.ctrlKey && !e.altKey && !e.metaKey && (
2624
2640
  k === "r" || k === "f" || k === "n" || k === "a" || k === "d" ||
2625
- k === "z" || k === "y" || k === "k"
2641
+ k === "z" || k === "y" || k === "k" ||
2642
+ // Ctrl+P: without this suppress, WebView2's native print fires on
2643
+ // the iframe's default and prints the WHOLE APP window instead of
2644
+ // the letter (Bob 2026-07-02). The forwarded event reaches app.ts,
2645
+ // which runs printCurrentMessage (letter + header block).
2646
+ k === "p"
2626
2647
  );
2627
2648
  if (isShortcut) e.preventDefault();
2628
2649
  window.parent.postMessage({
@@ -8091,6 +8112,20 @@ var backToList = (e) => {
8091
8112
  };
8092
8113
  document.getElementById("btn-back")?.addEventListener("click", backToList);
8093
8114
  document.getElementById("btn-back")?.addEventListener("touchend", backToList);
8115
+ var narrowMq = window.matchMedia("(max-width: 768px), (max-height: 600px)");
8116
+ narrowMq.addEventListener("change", () => {
8117
+ const viewer = document.getElementById("message-viewer");
8118
+ const list = document.getElementById("message-list");
8119
+ if (narrowMq.matches) {
8120
+ if (getCurrentMessage()) {
8121
+ viewer?.classList.add("narrow-active");
8122
+ list?.classList.add("narrow-hidden");
8123
+ }
8124
+ } else {
8125
+ viewer?.classList.remove("narrow-active");
8126
+ list?.classList.remove("narrow-hidden");
8127
+ }
8128
+ });
8094
8129
  document.getElementById("mv-popout")?.addEventListener("click", () => popOutCurrentMessage());
8095
8130
  document.getElementById("mv-popout-window")?.addEventListener("click", () => popOutToWindow());
8096
8131
  document.getElementById("btn-print")?.addEventListener("click", () => printCurrentMessage());