@bobfrankston/rmfmail 1.0.659 → 1.0.661
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/TODO.md +1 -0
- package/client/app.js +134 -5
- package/client/app.js.map +1 -1
- package/client/app.ts +127 -5
- package/client/compose/compose.js +59 -9
- package/client/compose/compose.js.map +1 -1
- package/client/compose/compose.ts +61 -8
- package/client/lib/rmf-tiny.js +77 -2
- package/package.json +3 -3
- package/packages/mailx-compose/index.js +7 -2
- package/packages/mailx-compose/index.js.map +1 -1
- package/packages/mailx-compose/index.ts +8 -2
- package/packages/mailx-imap/index.d.ts.map +1 -1
- package/packages/mailx-imap/index.js +44 -23
- package/packages/mailx-imap/index.js.map +1 -1
- package/packages/mailx-imap/index.ts +38 -18
- package/packages/mailx-imap/package-lock.json +2 -2
- package/packages/mailx-imap/package.json +1 -1
- package/packages/mailx-service/index.d.ts.map +1 -1
- package/packages/mailx-service/index.js +11 -0
- package/packages/mailx-service/index.js.map +1 -1
- package/packages/mailx-service/index.ts +12 -0
- package/packages/mailx-store/package.json +1 -1
|
@@ -834,6 +834,13 @@ function applyInit(init: ComposeInit): void {
|
|
|
834
834
|
if (!toInput.value) toInput.focus();
|
|
835
835
|
else if (!subjectInput.value) subjectInput.focus();
|
|
836
836
|
else editor.focus();
|
|
837
|
+
|
|
838
|
+
// Record the post-init content so autosave / hasContent only react to
|
|
839
|
+
// genuine user edits. Without this baseline, a reply opens with quoted
|
|
840
|
+
// body + signature already populated and autosave fires within seconds
|
|
841
|
+
// even if the user typed nothing — producing the "draft droppings"
|
|
842
|
+
// that pile up in the Drafts folder.
|
|
843
|
+
recordContentBaseline();
|
|
837
844
|
}
|
|
838
845
|
|
|
839
846
|
// Q68: dirty marker (•) in the window title until the next successful save.
|
|
@@ -862,6 +869,29 @@ let draftId: string | null = null; // stable ID for dedup when APPENDUID unavail
|
|
|
862
869
|
let draftTimer: ReturnType<typeof setInterval> | null = null;
|
|
863
870
|
let draftDebounceTimer: ReturnType<typeof setTimeout> | null = null;
|
|
864
871
|
let lastDraftContent = "";
|
|
872
|
+
|
|
873
|
+
// Snapshot of compose content right after init populates it (signature, quoted
|
|
874
|
+
// body, pre-filled recipients). composeHasUserChanges() compares against this
|
|
875
|
+
// so autosave and the Save/Discard prompt only react to genuine user edits.
|
|
876
|
+
let baselineSnapshot = "";
|
|
877
|
+
function getContentSnapshot(): string {
|
|
878
|
+
return JSON.stringify({
|
|
879
|
+
body: editor?.getHtml() || "",
|
|
880
|
+
to: toInput?.value || "",
|
|
881
|
+
cc: ccInput?.value || "",
|
|
882
|
+
bcc: bccInput?.value || "",
|
|
883
|
+
subject: subjectInput?.value || "",
|
|
884
|
+
});
|
|
885
|
+
}
|
|
886
|
+
function recordContentBaseline(): void {
|
|
887
|
+
baselineSnapshot = getContentSnapshot();
|
|
888
|
+
// Seed lastDraftContent so the first autosave-tick after init doesn't
|
|
889
|
+
// fire just because the snapshot differs from the empty string.
|
|
890
|
+
lastDraftContent = baselineSnapshot;
|
|
891
|
+
}
|
|
892
|
+
function composeHasUserChanges(): boolean {
|
|
893
|
+
return getContentSnapshot() !== baselineSnapshot;
|
|
894
|
+
}
|
|
865
895
|
let draftSaving = false; // prevent concurrent saves
|
|
866
896
|
let draftSaveFailed = false; // surfaced in the compose status tag
|
|
867
897
|
|
|
@@ -882,9 +912,14 @@ function showDraftStatus(text: string, isError: boolean): void {
|
|
|
882
912
|
|
|
883
913
|
async function saveDraft(): Promise<void> {
|
|
884
914
|
if (draftSaving) return; // previous save still in flight
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
915
|
+
// Skip autosave when nothing has changed from the post-init baseline
|
|
916
|
+
// (signature, quoted body, pre-filled To). Editing an existing draft
|
|
917
|
+
// bypasses the check — we still need to round-trip user edits to the
|
|
918
|
+
// server-side draft. Without this, replies/forwards saved a draft the
|
|
919
|
+
// moment they opened, even with no user typing.
|
|
920
|
+
if (!draftUid && !draftId && !composeHasUserChanges()) return;
|
|
921
|
+
const content = getContentSnapshot();
|
|
922
|
+
if (content === lastDraftContent) return; // no changes since last save
|
|
888
923
|
// Expose to window for blur-handler.
|
|
889
924
|
(window as any).__mailxSaveDraft = saveDraft;
|
|
890
925
|
lastDraftContent = content;
|
|
@@ -1046,6 +1081,13 @@ document.getElementById("btn-send")?.addEventListener("click", async () => {
|
|
|
1046
1081
|
bodyHtml: editor.getHtml(),
|
|
1047
1082
|
bodyText: editor.getText(),
|
|
1048
1083
|
attachments: attachments.map(a => ({ filename: a.filename, mimeType: a.mimeType, dataBase64: a.dataBase64 })),
|
|
1084
|
+
// Hand draft identifiers to the daemon so it owns post-send cleanup.
|
|
1085
|
+
// Previously the client fired deleteDraft() as a separate IPC after
|
|
1086
|
+
// send, fire-and-forget with a silent catch — when the IMAP path
|
|
1087
|
+
// hiccuped the draft survived ("draft droppings"). Daemon-side
|
|
1088
|
+
// cleanup queues a sync_action on failure for reliable retry.
|
|
1089
|
+
draftUid: draftUid ?? undefined,
|
|
1090
|
+
draftId: draftId ?? undefined,
|
|
1049
1091
|
};
|
|
1050
1092
|
logClientEvent("compose-send-body-built", { from: body.from, toCount: body.to.length, subjectLen: (body.subject || "").length, bodyHtmlLen: (body.bodyHtml || "").length, atts: body.attachments.length });
|
|
1051
1093
|
// Local validity (one missing-To check) — must run before close so the
|
|
@@ -1104,9 +1146,10 @@ document.getElementById("btn-send")?.addEventListener("click", async () => {
|
|
|
1104
1146
|
const known = knownAccounts.some(a => formatAccountFrom(a) === raw);
|
|
1105
1147
|
if (raw && !known && /@.+\./.test(raw)) recordFromHistory(raw);
|
|
1106
1148
|
} catch { /* */ }
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1149
|
+
// Draft cleanup is now part of the send IPC payload (body.draftUid /
|
|
1150
|
+
// body.draftId) — daemon handles deletion with retry semantics. The
|
|
1151
|
+
// earlier client-side deleteDraft() call here was fire-and-forget and
|
|
1152
|
+
// could silently fail, leaving stale drafts in the IMAP folder.
|
|
1110
1153
|
|
|
1111
1154
|
const sendStart = Date.now();
|
|
1112
1155
|
logClientEvent("compose-send-pre-ipc");
|
|
@@ -1159,9 +1202,12 @@ document.getElementById("btn-send")?.addEventListener("click", async () => {
|
|
|
1159
1202
|
|
|
1160
1203
|
// ── Close handling ──
|
|
1161
1204
|
|
|
1162
|
-
/** True if the compose has
|
|
1205
|
+
/** True if the compose has user-driven changes worth prompting about. Compares
|
|
1206
|
+
* against the post-init baseline rather than "any non-empty content" — a
|
|
1207
|
+
* reply has quoted body + signature pre-populated, so the old "any content"
|
|
1208
|
+
* check produced unwanted Save/Discard prompts on closes with no user input. */
|
|
1163
1209
|
function composeHasContent(): boolean {
|
|
1164
|
-
return
|
|
1210
|
+
return composeHasUserChanges();
|
|
1165
1211
|
}
|
|
1166
1212
|
|
|
1167
1213
|
/** Ask Save/Discard/Cancel. Returns "save" | "discard" | "cancel".
|
|
@@ -1589,6 +1635,13 @@ window.addEventListener("compose-save-and-close", () => {
|
|
|
1589
1635
|
handleCloseRequest();
|
|
1590
1636
|
});
|
|
1591
1637
|
|
|
1638
|
+
// ── Discard (trash icon from parent title bar) ──
|
|
1639
|
+
// Routes through the existing btn-discard handler so the confirm dialog and
|
|
1640
|
+
// draft-deletion logic stay in one place.
|
|
1641
|
+
window.addEventListener("compose-discard", () => {
|
|
1642
|
+
document.getElementById("btn-discard")?.click();
|
|
1643
|
+
});
|
|
1644
|
+
|
|
1592
1645
|
// ── Keyboard shortcuts ──
|
|
1593
1646
|
|
|
1594
1647
|
document.addEventListener("keydown", (e) => {
|
package/client/lib/rmf-tiny.js
CHANGED
|
@@ -90,13 +90,23 @@ export async function createTinyMceEditor(container, opts = {}) {
|
|
|
90
90
|
// All free / OSS plugins bundled in the jsDelivr tinymce@6 script.
|
|
91
91
|
// No premium plugins listed — listing one without an API key
|
|
92
92
|
// triggers TinyMCE's upsell dialog on every load.
|
|
93
|
-
plugins: "paste lists link table code image searchreplace autolink wordcount emoticons charmap insertdatetime
|
|
93
|
+
plugins: "paste lists link table code image searchreplace autolink wordcount emoticons charmap insertdatetime quickbars nonbreaking directionality",
|
|
94
94
|
toolbar: [
|
|
95
95
|
"undo redo | bold italic underline strikethrough | forecolor backcolor",
|
|
96
|
-
"bullist numlist outdent indent | link table image code | emoticons charmap
|
|
96
|
+
"bullist numlist outdent indent | link table image code | emoticons charmap",
|
|
97
97
|
].join(" | "),
|
|
98
98
|
// Include "tools" so wordcount and searchreplace are reachable.
|
|
99
99
|
menubar: "file edit view insert format tools",
|
|
100
|
+
// View menu — append zoom commands. fullscreen omitted: this editor
|
|
101
|
+
// lives inside a compose iframe overlay that already fills its host
|
|
102
|
+
// window; TinyMCE's fullscreen plugin re-positions the container in
|
|
103
|
+
// ways that produce a blank body, so it's not in the plugin list.
|
|
104
|
+
menu: {
|
|
105
|
+
view: { title: "View", items: "code | visualaid visualchars visualblocks | preview | zoomIn zoomOut zoomReset" },
|
|
106
|
+
},
|
|
107
|
+
// Disable the "Get all features" upsell badge that TinyMCE 6+
|
|
108
|
+
// injects automatically when no premium plugins are listed.
|
|
109
|
+
promotion: false,
|
|
100
110
|
// Floating toolbar that appears on text selection — keeps the
|
|
101
111
|
// main toolbar uncluttered while exposing common formatters
|
|
102
112
|
// where the cursor already is. quickbars_insert_toolbar:false
|
|
@@ -133,6 +143,71 @@ export async function createTinyMceEditor(container, opts = {}) {
|
|
|
133
143
|
setup: (ed) => {
|
|
134
144
|
if (opts.initialHtml)
|
|
135
145
|
ed.on("init", () => ed.setContent(opts.initialHtml));
|
|
146
|
+
// Zoom — content font-size scales between ZOOM_MIN and ZOOM_MAX.
|
|
147
|
+
// Reachable via View → Zoom in/out/reset, Ctrl+wheel inside the
|
|
148
|
+
// editor iframe, and Ctrl+= / Ctrl+- / Ctrl+0 shortcuts.
|
|
149
|
+
const ZOOM_DEFAULT = 14;
|
|
150
|
+
const ZOOM_STEP = 2;
|
|
151
|
+
const ZOOM_MIN = 8;
|
|
152
|
+
const ZOOM_MAX = 32;
|
|
153
|
+
let zoomPx = ZOOM_DEFAULT;
|
|
154
|
+
const applyZoom = () => {
|
|
155
|
+
try {
|
|
156
|
+
const body = ed.getBody();
|
|
157
|
+
if (body)
|
|
158
|
+
body.style.fontSize = `${zoomPx}px`;
|
|
159
|
+
}
|
|
160
|
+
catch { /* */ }
|
|
161
|
+
};
|
|
162
|
+
const bumpZoom = (delta) => {
|
|
163
|
+
zoomPx = Math.max(ZOOM_MIN, Math.min(ZOOM_MAX, zoomPx + delta));
|
|
164
|
+
applyZoom();
|
|
165
|
+
};
|
|
166
|
+
ed.ui.registry.addMenuItem("zoomIn", {
|
|
167
|
+
text: "Zoom in", shortcut: "Ctrl+=",
|
|
168
|
+
onAction: () => bumpZoom(ZOOM_STEP),
|
|
169
|
+
});
|
|
170
|
+
ed.ui.registry.addMenuItem("zoomOut", {
|
|
171
|
+
text: "Zoom out", shortcut: "Ctrl+-",
|
|
172
|
+
onAction: () => bumpZoom(-ZOOM_STEP),
|
|
173
|
+
});
|
|
174
|
+
ed.ui.registry.addMenuItem("zoomReset", {
|
|
175
|
+
text: "Reset zoom", shortcut: "Ctrl+0",
|
|
176
|
+
onAction: () => { zoomPx = ZOOM_DEFAULT; applyZoom(); },
|
|
177
|
+
});
|
|
178
|
+
ed.addShortcut("ctrl+=", "Zoom in", () => bumpZoom(ZOOM_STEP));
|
|
179
|
+
ed.addShortcut("ctrl+-", "Zoom out", () => bumpZoom(-ZOOM_STEP));
|
|
180
|
+
ed.addShortcut("ctrl+0", "Reset zoom", () => { zoomPx = ZOOM_DEFAULT; applyZoom(); });
|
|
181
|
+
ed.on("init", () => {
|
|
182
|
+
// Engage WebView2's native spellcheck. TinyMCE's own
|
|
183
|
+
// `browser_spellcheck: true` is a no-op — its code path
|
|
184
|
+
// only DISABLES spellcheck on false; on true it leaves
|
|
185
|
+
// the iframe body without an explicit attribute, and
|
|
186
|
+
// WebView2 doesn't engage red underlines on a fresh
|
|
187
|
+
// contenteditable iframe without `spellcheck="true"` set.
|
|
188
|
+
try {
|
|
189
|
+
const body = ed.getBody();
|
|
190
|
+
if (body) {
|
|
191
|
+
body.setAttribute("spellcheck", "true");
|
|
192
|
+
body.setAttribute("lang", "en");
|
|
193
|
+
}
|
|
194
|
+
const doc = ed.getDoc();
|
|
195
|
+
if (doc?.documentElement)
|
|
196
|
+
doc.documentElement.setAttribute("lang", "en");
|
|
197
|
+
}
|
|
198
|
+
catch { /* */ }
|
|
199
|
+
// Ctrl+wheel zoom inside the editor iframe.
|
|
200
|
+
try {
|
|
201
|
+
const doc = ed.getDoc();
|
|
202
|
+
doc.addEventListener("wheel", (e) => {
|
|
203
|
+
if (!e.ctrlKey)
|
|
204
|
+
return;
|
|
205
|
+
e.preventDefault();
|
|
206
|
+
bumpZoom(e.deltaY < 0 ? ZOOM_STEP : -ZOOM_STEP);
|
|
207
|
+
}, { passive: false });
|
|
208
|
+
}
|
|
209
|
+
catch { /* */ }
|
|
210
|
+
});
|
|
136
211
|
},
|
|
137
212
|
});
|
|
138
213
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bobfrankston/rmfmail",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.661",
|
|
4
4
|
"description": "Local-first email client with IMAP sync and standalone native app",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "bin/mailx.js",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"@bobfrankston/msger": "^0.1.378",
|
|
43
43
|
"@bobfrankston/node-tcp-transport": "^0.1.8",
|
|
44
44
|
"@bobfrankston/oauthsupport": "^1.0.26",
|
|
45
|
-
"@bobfrankston/rmf-tiny": "^0.1.
|
|
45
|
+
"@bobfrankston/rmf-tiny": "^0.1.7",
|
|
46
46
|
"@bobfrankston/smtp-direct": "^0.1.8",
|
|
47
47
|
"@bobfrankston/tcp-transport": "^0.1.6",
|
|
48
48
|
"@capacitor/android": "^8.3.0",
|
|
@@ -117,7 +117,7 @@
|
|
|
117
117
|
"@bobfrankston/msger": "^0.1.378",
|
|
118
118
|
"@bobfrankston/node-tcp-transport": "^0.1.8",
|
|
119
119
|
"@bobfrankston/oauthsupport": "^1.0.26",
|
|
120
|
-
"@bobfrankston/rmf-tiny": "^0.1.
|
|
120
|
+
"@bobfrankston/rmf-tiny": "^0.1.7",
|
|
121
121
|
"@bobfrankston/smtp-direct": "^0.1.8",
|
|
122
122
|
"@bobfrankston/tcp-transport": "^0.1.6",
|
|
123
123
|
"@capacitor/android": "^8.3.0",
|
|
@@ -42,17 +42,22 @@ export function buildComposeInit(mode, accountId, original) {
|
|
|
42
42
|
}
|
|
43
43
|
return init;
|
|
44
44
|
}
|
|
45
|
+
// Plain-text quoting uses `white-space:pre-wrap` so original line breaks
|
|
46
|
+
// survive but long lines still wrap to the viewport. `<pre>` (the prior
|
|
47
|
+
// approach) was honest about line breaks but disabled wrapping entirely,
|
|
48
|
+
// producing horizontal-scroll quotes that broke the compose layout.
|
|
49
|
+
const PLAIN_QUOTE_STYLE = "white-space:pre-wrap;font-family:inherit;margin:0";
|
|
45
50
|
function quoteBody(msg) {
|
|
46
51
|
const date = new Date(msg.date).toLocaleString();
|
|
47
52
|
const from = msg.from.name ? `${msg.from.name} <${msg.from.address}>` : msg.from.address;
|
|
48
|
-
const body = msg.bodyHtml || `<
|
|
53
|
+
const body = msg.bodyHtml || `<div style="${PLAIN_QUOTE_STYLE}">${escapeHtml(msg.bodyText)}</div>`;
|
|
49
54
|
return `<br><div class="reply"><p>On ${date}, ${escapeHtml(from)} wrote:</p><blockquote>${body}</blockquote></div>`;
|
|
50
55
|
}
|
|
51
56
|
function forwardBody(msg) {
|
|
52
57
|
const date = new Date(msg.date).toLocaleString();
|
|
53
58
|
const from = msg.from.name ? `${msg.from.name} <${msg.from.address}>` : msg.from.address;
|
|
54
59
|
const to = msg.to.map(a => a.name ? `${a.name} <${a.address}>` : a.address).join(", ");
|
|
55
|
-
const body = msg.bodyHtml || `<
|
|
60
|
+
const body = msg.bodyHtml || `<div style="${PLAIN_QUOTE_STYLE}">${escapeHtml(msg.bodyText)}</div>`;
|
|
56
61
|
return `<br><div class="reply"><p>---------- Forwarded message ----------<br>From: ${escapeHtml(from)}<br>Date: ${date}<br>Subject: ${escapeHtml(msg.subject)}<br>To: ${escapeHtml(to)}</p>${body}</div>`;
|
|
57
62
|
}
|
|
58
63
|
function escapeHtml(s) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH,gEAAgE;AAChE,MAAM,UAAU,gBAAgB,CAAC,IAAiB,EAAE,SAAiB,EAAE,QAAkB;IACrF,MAAM,IAAI,GAAgB;QACtB,IAAI;QACJ,SAAS;QACT,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,EAAE;QACN,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,EAAE;KACjB,CAAC;IAEF,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,MAAM,QAAQ,GAAG,iBAAiB,CAAC;IACnC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAE5D,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,OAAO;YACR,IAAI,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,YAAY,EAAE,CAAC;YACrC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;YACpC,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC/D,MAAM;QAEV,KAAK,UAAU;YACX,IAAI,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3F,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,YAAY,EAAE,CAAC;YACrC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;YACpC,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC/D,MAAM;QAEV,KAAK,SAAS;YACV,IAAI,CAAC,OAAO,GAAG,QAAQ,YAAY,EAAE,CAAC;YACtC,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YACtC,MAAM;IACd,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,SAAS,CAAC,GAAY;IAC3B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;IACjD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;IACzF,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,IAAI,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
|
|
@@ -65,10 +65,16 @@ export function buildComposeInit(mode: ComposeMode, accountId: string, original?
|
|
|
65
65
|
return init;
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
+
// Plain-text quoting uses `white-space:pre-wrap` so original line breaks
|
|
69
|
+
// survive but long lines still wrap to the viewport. `<pre>` (the prior
|
|
70
|
+
// approach) was honest about line breaks but disabled wrapping entirely,
|
|
71
|
+
// producing horizontal-scroll quotes that broke the compose layout.
|
|
72
|
+
const PLAIN_QUOTE_STYLE = "white-space:pre-wrap;font-family:inherit;margin:0";
|
|
73
|
+
|
|
68
74
|
function quoteBody(msg: Message): string {
|
|
69
75
|
const date = new Date(msg.date).toLocaleString();
|
|
70
76
|
const from = msg.from.name ? `${msg.from.name} <${msg.from.address}>` : msg.from.address;
|
|
71
|
-
const body = msg.bodyHtml || `<
|
|
77
|
+
const body = msg.bodyHtml || `<div style="${PLAIN_QUOTE_STYLE}">${escapeHtml(msg.bodyText)}</div>`;
|
|
72
78
|
return `<br><div class="reply"><p>On ${date}, ${escapeHtml(from)} wrote:</p><blockquote>${body}</blockquote></div>`;
|
|
73
79
|
}
|
|
74
80
|
|
|
@@ -76,7 +82,7 @@ function forwardBody(msg: Message): string {
|
|
|
76
82
|
const date = new Date(msg.date).toLocaleString();
|
|
77
83
|
const from = msg.from.name ? `${msg.from.name} <${msg.from.address}>` : msg.from.address;
|
|
78
84
|
const to = msg.to.map(a => a.name ? `${a.name} <${a.address}>` : a.address).join(", ");
|
|
79
|
-
const body = msg.bodyHtml || `<
|
|
85
|
+
const body = msg.bodyHtml || `<div style="${PLAIN_QUOTE_STYLE}">${escapeHtml(msg.bodyText)}</div>`;
|
|
80
86
|
return `<br><div class="reply"><p>---------- Forwarded message ----------<br>From: ${escapeHtml(from)}<br>Date: ${date}<br>Subject: ${escapeHtml(msg.subject)}<br>To: ${escapeHtml(to)}</p>${body}</div>`;
|
|
81
87
|
}
|
|
82
88
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAgB,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACtG,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAsF3C,yCAAyC;AACzC,MAAM,WAAW,iBAAiB;IAC9B,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;IACrF,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3E,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IAC5G,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACzF,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C;+EAC2E;IAC3E,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1F;;;8EAG0E;IAC1E,YAAY,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAC7C;0DACsD;IACtD,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC1E;AAED;0DAC0D;AAC1D,MAAM,WAAW,kBAAkB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,kEAAkE;AAClE,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpF;AA0DD,qBAAa,WAAY,SAAQ,YAAY;IACzC,OAAO,CAAC,OAAO,CAAmE;IAClF,OAAO,CAAC,QAAQ,CAAsC;IACtD,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,EAAE,CAAU;IACpB,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,aAAa,CAA0D;IAC/E,2FAA2F;IAC3F,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAS;IAC7B,yEAAyE;IACzE,eAAe,UAAS;IAOxB;;;;yDAIqD;IACrD,OAAO,CAAC,WAAW,CAAyC;IAE5D,OAAO,CAAC,mBAAmB;IAS3B;;sEAEkE;IAClE,OAAO,CAAC,WAAW;IAkBnB,4EAA4E;IAC5E,sBAAsB,IAAI,kBAAkB,EAAE;IAI9C,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB;IAqB3D,4DAA4D;IACtD,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAM9D,uEAAuE;IACvE,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,yFAAyF;IACzF,OAAO,CAAC,iBAAiB,CAA6B;IAEtD,yGAAyG;IACnG,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAuCzD,+FAA+F;IACzF,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvF,iEAAiE;IAC3D,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAM9F;;;;;uDAKmD;IAC7C,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA0BxH,kFAAkF;IAC5E,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAazD;;mCAE+B;IAC/B,OAAO,CAAC,UAAU,CAA0B;IAC5C;;;;;;qDAMiD;IACjD,OAAO,CAAC,WAAW,CAA0B;IAC7C;;;2EAGuE;IACvE,OAAO,CAAC,SAAS,CAA+B;IAChD;;;;4DAIwD;IACxD,OAAO,CAAC,cAAc,CAAoC;IAC1D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAK;IAEzC;;;;;qEAKiE;YACnD,aAAa;IA4B3B;;gDAE4C;YAC9B,YAAY;IAI1B,wFAAwF;IACxF;;;;;;;;;;;;wCAYoC;IAC9B,cAAc,CAAC,CAAC,EAClB,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,EAC/B,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO,GAClD,OAAO,CAAC,CAAC,CAAC;IAiDb;;;qBAGiB;IACjB,OAAO,CAAC,aAAa;IAkBrB;;;qCAGiC;IACjC,OAAO,CAAC,eAAe;IAwBvB;8DAC0D;IAC1D,OAAO,CAAC,WAAW,CAAoC;IAEvD;;;;uEAImE;YACrD,SAAS;IAkDvB;;;;4CAIwC;IAClC,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBvD;sBACkB;IACZ,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBrD;;qEAEiE;IAC3D,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAG5D;;6DAEyD;YAC3C,YAAY;IAG1B,OAAO,CAAC,WAAW;IAEnB,yCAAyC;IACzC,eAAe,IAAI,MAAM;IAEzB,0BAA0B;IACpB,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA4FvD,sEAAsE;IACtE,OAAO,CAAC,cAAc;IAOtB,sFAAsF;IACtF,OAAO,CAAC,gBAAgB;IAMxB,mFAAmF;IACnF,OAAO,CAAC,kBAAkB;IAmB1B,sCAAsC;IAChC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA0ErE,yFAAyF;YAC3E,aAAa;IAmE3B;;;;;;;;;mEAS+D;IACzD,wBAAwB,CAC1B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EACpC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,IAAI,CAAC;IAmChB,0CAA0C;IAC1C;;;;;;;;;;;;;;;8DAe0D;IAC1D,OAAO,CAAC,eAAe,CAAsC;IAEvD,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;YAkBtE,eAAe;IAia7B,wCAAwC;IAClC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAahB,QAAQ;IA8BtB,mEAAmE;YACrD,WAAW;IAoLzB,8DAA8D;YAChD,iBAAiB;IAmD/B,iDAAiD;YACnC,gBAAgB;IAuH9B,uCAAuC;IACvC,OAAO,CAAC,gBAAgB;IA4DxB,sDAAsD;YACxC,YAAY;IAO1B;;;;;yEAKqE;IACrE,OAAO,CAAC,eAAe;IAwBvB;;;;mEAI+D;IACzD,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCxD,iEAAiE;IAC3D,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAiChC;;;4EAGwE;IACxE,OAAO,CAAC,eAAe,CAAsC;IAC7D,OAAO,CAAC,iBAAiB,CAAqB;IAE9C;;yFAEqF;YACvE,UAAU;IAyBxB,sFAAsF;IAChF,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAKhD,cAAc;YAqBd,eAAe;IA4B7B,kDAAkD;IAC5C,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAMtC,0BAA0B;IAC1B,iBAAiB,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI;IA+DhD;;sEAEkE;IAC5D,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAOlC,yBAAyB;IACzB,gBAAgB,IAAI,IAAI;IAOxB,gFAAgF;IAChF,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAK1C;;;6EAGyE;IACnE,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBpC,6BAA6B;IACvB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAOnC;;kEAE8D;IAC9D;;;;;;oDAMgD;IAChD,OAAO,CAAC,eAAe,CAAoD;IAC3E;;;;;;wEAMoE;IACpE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAe;IAEhE,OAAO,CAAC,+BAA+B;YAyCzB,cAAc;IAQ5B;;;;;;;;;;6CAUyC;IACnC,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAwChG;;;2EAGuE;YACzD,sBAAsB;IAwCpC;;;;yEAIqE;IACrE;;;gFAG4E;IAC5E,OAAO,CAAC,mBAAmB,CAAqB;IAEhD;;;;;;;4EAOwE;IACxE,OAAO,CAAC,mBAAmB,CAA+B;IAC1D,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAe;IACtD,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAK;IAE5C,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,iBAAiB;IAIzB;;;0EAGsE;IAChE,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAgBxC,eAAe;IAmO7B,2CAA2C;IAC3C,YAAY,IAAI,gBAAgB;IAIhC,wEAAwE;IAClE,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA0CpG;;;;yEAIqE;IAC/D,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS3H,mFAAmF;IACnF,OAAO,CAAC,gBAAgB,CAAoD;IAE5E,OAAO,CAAC,mBAAmB;IAS3B,uEAAuE;IACjE,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCnF;yEACqE;IAC/D,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM1G,qEAAqE;IAC/D,uBAAuB,CACzB,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EACxD,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GACxC,OAAO,CAAC,IAAI,CAAC;IAwBhB;;;;;;;;;;;+BAW2B;IACrB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B9F,mDAAmD;IAC7C,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAWxG,kDAAkD;IAC5C,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8I1D,oDAAoD;IACpD,OAAO,CAAC,UAAU;IAalB,2DAA2D;IACrD,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa/E;2EACuE;IACjE,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAwDpI;;yEAEqE;IAC/D,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgDvF;;;;;;iFAM6E;IAC7E,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAyC/D;;iFAE6E;IAC7E,eAAe,IAAI,YAAY;IAyD/B,4DAA4D;IAC5D,OAAO,CAAC,gBAAgB;IAIxB,uEAAuE;IACvE,OAAO,CAAC,eAAe,CAAqB;IAE5C,wFAAwF;YAC1E,kBAAkB;YAOlB,mBAAmB;IA6BjC,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAE1C,oDAAoD;YACtC,YAAY;IAuB1B,mFAAmF;IACnF,OAAO,CAAC,eAAe;IAcvB,gFAAgF;IAC1E,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiClF;;;;;gDAK4C;YAC9B,iBAAiB;IAmL/B;;oEAEgE;YAClD,cAAc;IAwE5B;;;qEAGiE;IAC3D,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwIrD,8EAA8E;IAC9E,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,kBAAkB,CAA6B;IAEvD,iBAAiB,IAAI,IAAI;IAgDzB,yBAAyB;IACzB,gBAAgB,IAAI,IAAI;IASxB,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,eAAe,CAAwC;IAE/D;;+DAE2D;IAC3D,gBAAgB,IAAI,IAAI;IAwGxB,oCAAoC;IACpC,kBAAkB,IAAI,IAAI;IAa1B;2EACuE;IACvE,OAAO,CAAC,eAAe,CAAsC;IAE7D;yEACqE;YACvD,gBAAgB;IAK9B;;;;;;iDAM6C;IACvC,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAU9C,sBAAsB;IAsGpC,2CAA2C;IACrC,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAStC,wCAAwC;IAClC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAelC"}
|
|
@@ -3124,33 +3124,54 @@ export class ImapManager extends EventEmitter {
|
|
|
3124
3124
|
return;
|
|
3125
3125
|
if (!draftUid && !draftId)
|
|
3126
3126
|
return;
|
|
3127
|
-
|
|
3128
|
-
|
|
3129
|
-
|
|
3130
|
-
|
|
3131
|
-
|
|
3132
|
-
|
|
3133
|
-
|
|
3134
|
-
|
|
3127
|
+
let succeeded = false;
|
|
3128
|
+
try {
|
|
3129
|
+
await this.withConnection(accountId, async (client) => {
|
|
3130
|
+
if (draftUid) {
|
|
3131
|
+
try {
|
|
3132
|
+
await client.deleteMessageByUid(drafts.path, draftUid);
|
|
3133
|
+
console.log(` [drafts] Deleted draft UID ${draftUid}`);
|
|
3134
|
+
succeeded = true;
|
|
3135
|
+
}
|
|
3136
|
+
catch (e) {
|
|
3137
|
+
console.error(` [drafts] Delete by UID ${draftUid} failed: ${e.message}`);
|
|
3138
|
+
}
|
|
3135
3139
|
}
|
|
3136
|
-
|
|
3137
|
-
|
|
3138
|
-
|
|
3139
|
-
|
|
3140
|
-
|
|
3141
|
-
|
|
3142
|
-
|
|
3140
|
+
if (draftId) {
|
|
3141
|
+
try {
|
|
3142
|
+
const uids = await client.searchByHeader(drafts.path, "X-Mailx-Draft-ID", draftId);
|
|
3143
|
+
for (const uid of uids) {
|
|
3144
|
+
try {
|
|
3145
|
+
await client.deleteMessageByUid(drafts.path, uid);
|
|
3146
|
+
succeeded = true;
|
|
3147
|
+
}
|
|
3148
|
+
catch { /* next */ }
|
|
3143
3149
|
}
|
|
3144
|
-
|
|
3150
|
+
if (uids.length > 0)
|
|
3151
|
+
console.log(` [drafts] Deleted ${uids.length} draft(s) by ID ${draftId}`);
|
|
3152
|
+
}
|
|
3153
|
+
catch (e) {
|
|
3154
|
+
console.error(` [drafts] searchByHeader for ${draftId} failed: ${e.message}`);
|
|
3145
3155
|
}
|
|
3146
|
-
if (uids.length > 0)
|
|
3147
|
-
console.log(` [drafts] Deleted ${uids.length} draft(s) by ID ${draftId}`);
|
|
3148
|
-
}
|
|
3149
|
-
catch (e) {
|
|
3150
|
-
console.error(` [drafts] searchByHeader for ${draftId} failed: ${e.message}`);
|
|
3151
3156
|
}
|
|
3152
|
-
}
|
|
3153
|
-
}
|
|
3157
|
+
});
|
|
3158
|
+
}
|
|
3159
|
+
catch (e) {
|
|
3160
|
+
// withConnection itself failed (no socket, auth refresh wedged) —
|
|
3161
|
+
// fall through to queue a retry if we have a UID to anchor on.
|
|
3162
|
+
console.error(` [drafts] withConnection failed for ${accountId}: ${e?.message || e}`);
|
|
3163
|
+
}
|
|
3164
|
+
// Reliable cleanup: if the inline attempt didn't actually delete the
|
|
3165
|
+
// draft, queue a sync_action so the regular processSyncActions loop
|
|
3166
|
+
// retries it later. Without this, transient IMAP failures left stale
|
|
3167
|
+
// drafts in the folder ("draft droppings" that pile up after sends).
|
|
3168
|
+
// Only the UID path can be queued — searchByHeader retries on every
|
|
3169
|
+
// future call anyway, and queuing a header-lookup isn't a real
|
|
3170
|
+
// sync_action shape.
|
|
3171
|
+
if (!succeeded && draftUid) {
|
|
3172
|
+
console.log(` [drafts] Queueing sync_action for retry: delete UID ${draftUid} in ${drafts.path}`);
|
|
3173
|
+
this.db.queueSyncAction(accountId, "delete", draftUid, drafts.id);
|
|
3174
|
+
}
|
|
3154
3175
|
}
|
|
3155
3176
|
/** Queue outgoing message locally — never fails, worker handles IMAP+SMTP.
|
|
3156
3177
|
* Single path: write `~/.mailx/outbox/<acct>/*.ltr` synchronously, then
|