@bobfrankston/rmfmail 1.0.697 → 1.0.699
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 +16 -3
- package/client/app.bundle.js.map +2 -2
- package/client/components/message-list.ts +15 -4
- package/client/components/message-viewer.js +32 -3
- package/client/components/message-viewer.js.map +1 -1
- package/client/components/message-viewer.ts +29 -3
- package/package.json +5 -5
- package/packages/mailx-imap/index.d.ts.map +1 -1
- package/packages/mailx-imap/index.js +158 -16
- package/packages/mailx-imap/index.js.map +1 -1
- package/packages/mailx-imap/index.ts +162 -16
- 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 +26 -11
- package/packages/mailx-service/index.js.map +1 -1
- package/packages/mailx-service/index.ts +25 -9
- package/packages/mailx-store/db.d.ts +38 -7
- package/packages/mailx-store/db.d.ts.map +1 -1
- package/packages/mailx-store/db.js +96 -8
- package/packages/mailx-store/db.js.map +1 -1
- package/packages/mailx-store/db.ts +104 -8
- package/packages/mailx-store/package.json +1 -1
- package/packages/mailx-store/parse-serial.d.ts +4 -3
- package/packages/mailx-store/parse-serial.d.ts.map +1 -1
- package/packages/mailx-store/parse-serial.js +37 -7
- package/packages/mailx-store/parse-serial.js.map +1 -1
- package/packages/mailx-store/parse-serial.ts +48 -7
- package/packages/mailx-imap/node_modules.npmglobalize-stash-43676/.package-lock.json +0 -116
|
@@ -166,7 +166,7 @@ function decodeEntities(text: string): string {
|
|
|
166
166
|
/** Extract a plain-text preview from message source */
|
|
167
167
|
async function extractPreview(source: string): Promise<{ bodyHtml: string; bodyText: string; preview: string; hasAttachments: boolean }> {
|
|
168
168
|
try {
|
|
169
|
-
const parsed = await parseSerial(source);
|
|
169
|
+
const parsed = await parseSerial(source, "background");
|
|
170
170
|
const bodyText = parsed.text || "";
|
|
171
171
|
const bodyHtml = parsed.html || "";
|
|
172
172
|
// Use text part; fall back to stripping HTML tags if text is empty
|
|
@@ -930,12 +930,15 @@ export class ImapManager extends EventEmitter {
|
|
|
930
930
|
// upsert turns into an UPDATE (cheap); if it doesn't, the
|
|
931
931
|
// insert proceeds. Trust the constraint — don't second-
|
|
932
932
|
// guess it on a stale highestUid snapshot.
|
|
933
|
-
// Tombstone check:
|
|
934
|
-
//
|
|
935
|
-
//
|
|
936
|
-
//
|
|
933
|
+
// Tombstone check: skip re-import while a local delete/move
|
|
934
|
+
// is in flight to the server. Cleared on action success
|
|
935
|
+
// (server EXPUNGED → next sync's set-diff drops the row
|
|
936
|
+
// anyway) or on permanent failure (clearTombstoneForUid in
|
|
937
|
+
// failSyncAction → row reappears, user sees the action
|
|
938
|
+
// didn't take). QRESYNC servers bypass this entirely
|
|
939
|
+
// because their VANISHED responses are authoritative.
|
|
937
940
|
if (msg.messageId && this.db.hasTombstone(accountId, msg.messageId)) {
|
|
938
|
-
console.log(` [tombstone] ${accountId}: skipping ${msg.messageId} (locally deleted)`);
|
|
941
|
+
console.log(` [tombstone] ${accountId}: skipping ${msg.messageId} (locally deleted, awaiting server confirm)`);
|
|
939
942
|
continue;
|
|
940
943
|
}
|
|
941
944
|
const source = msg.source || "";
|
|
@@ -1007,7 +1010,11 @@ export class ImapManager extends EventEmitter {
|
|
|
1007
1010
|
source: string,
|
|
1008
1011
|
flags: string[],
|
|
1009
1012
|
): Promise<void> {
|
|
1010
|
-
|
|
1013
|
+
// insertLocalRowFromSource runs right after sendMessage — that's a
|
|
1014
|
+
// user-initiated path but the parse cost is on the post-send
|
|
1015
|
+
// background work, not the click-through. Tag as background so a
|
|
1016
|
+
// concurrent user-click foreground parse jumps ahead.
|
|
1017
|
+
const parsed = await parseSerial(source, "background");
|
|
1011
1018
|
// Coerce mailparser AddressObject(s) into the flat `{name, address}[]`
|
|
1012
1019
|
// shape storeMessages's downstream toEmailAddresses expects.
|
|
1013
1020
|
// RFC 2047 encoded-word decoding (incl. inside quoted-strings) is
|
|
@@ -1155,6 +1162,96 @@ export class ImapManager extends EventEmitter {
|
|
|
1155
1162
|
|
|
1156
1163
|
console.log(` [sync] ${accountId}/${folder.path}: highestUid=${highestUid}, fetching...`);
|
|
1157
1164
|
|
|
1165
|
+
// ── QRESYNC fast path (RFC 7162) ─────────────────────────────────
|
|
1166
|
+
// When the server supports QRESYNC AND we have a saved (uidValidity,
|
|
1167
|
+
// modSeq) watermark for this folder, ask the server "what changed
|
|
1168
|
+
// since modSeq?". The server replies with an authoritative VANISHED
|
|
1169
|
+
// list (no client-side diffing needed, no tombstones needed) plus
|
|
1170
|
+
// unsolicited FETCH for flag/state changes. New UIDs > our prior
|
|
1171
|
+
// highest still go through the normal fetchMessagesSinceUid path
|
|
1172
|
+
// afterwards. Skips the heavy UID SEARCH set-diff below entirely.
|
|
1173
|
+
const folderSyncState = this.db.getFolderSync(folderId);
|
|
1174
|
+
const prevModSeq = parseInt(folderSyncState.highestModseq || "0", 10);
|
|
1175
|
+
const prevUidValidity = folderSyncState.uidvalidity || 0;
|
|
1176
|
+
const caps = (typeof (client as any).getCapabilities === "function")
|
|
1177
|
+
? (client as any).getCapabilities() as Set<string>
|
|
1178
|
+
: new Set<string>();
|
|
1179
|
+
const qresyncSupported = caps.has("QRESYNC");
|
|
1180
|
+
const haveWatermark = highestUid > 0 && prevModSeq > 0 && prevUidValidity > 0;
|
|
1181
|
+
if (qresyncSupported && haveWatermark && typeof (client as any).resyncFolder === "function") {
|
|
1182
|
+
try {
|
|
1183
|
+
// Ensure ENABLE QRESYNC has been issued on this connection.
|
|
1184
|
+
// enableQresync is idempotent + capability-gated so this is a
|
|
1185
|
+
// no-op on the second-and-subsequent call per connection.
|
|
1186
|
+
if (typeof (client as any).enableQresync === "function") {
|
|
1187
|
+
await (client as any).enableQresync();
|
|
1188
|
+
}
|
|
1189
|
+
const __qrT0 = Date.now();
|
|
1190
|
+
const qr = await (client as any).resyncFolder(folder.path, prevUidValidity, prevModSeq);
|
|
1191
|
+
console.log(` [qresync] ${accountId}/${folder.path}: vanished=${qr.vanishedUids.length} changed=${qr.changedMessages.length} newModSeq=${qr.newHighestModSeq} in ${Date.now() - __qrT0}ms`);
|
|
1192
|
+
|
|
1193
|
+
if (qr.uidValidityChanged) {
|
|
1194
|
+
// UIDVALIDITY rolled — our local UIDs are stale. Fall through
|
|
1195
|
+
// to the full set-diff path; that'll discover the new state
|
|
1196
|
+
// and the deletion safeguards (50% threshold) will keep us
|
|
1197
|
+
// from wiping anything we shouldn't.
|
|
1198
|
+
console.log(` [qresync] ${accountId}/${folder.path}: UIDVALIDITY changed (was ${prevUidValidity}, now ${qr.exists}); falling back to full sync`);
|
|
1199
|
+
} else {
|
|
1200
|
+
// Apply VANISHED — server says these UIDs are gone. No
|
|
1201
|
+
// tombstone, no diff, just delete the local rows.
|
|
1202
|
+
let vanishedApplied = 0;
|
|
1203
|
+
for (const uid of qr.vanishedUids) {
|
|
1204
|
+
const env = this.db.getMessageByUid(accountId, uid, folderId);
|
|
1205
|
+
if (env) {
|
|
1206
|
+
this.db.deleteMessage(accountId, uid, "server VANISHED via QRESYNC", "mailx-imap syncFolder/qresync");
|
|
1207
|
+
vanishedApplied++;
|
|
1208
|
+
}
|
|
1209
|
+
}
|
|
1210
|
+
if (vanishedApplied > 0) {
|
|
1211
|
+
this.db.recalcFolderCounts(folderId);
|
|
1212
|
+
this.emit("folderCountsChanged", accountId, {});
|
|
1213
|
+
}
|
|
1214
|
+
|
|
1215
|
+
// Apply changed-state FETCH — flag updates since prior modSeq.
|
|
1216
|
+
for (const m of qr.changedMessages) {
|
|
1217
|
+
try {
|
|
1218
|
+
const flagsArr: string[] = Array.from(m.flags || []).map(f => String(f));
|
|
1219
|
+
this.db.updateMessageFlags(accountId, m.uid, flagsArr);
|
|
1220
|
+
} catch { /* row may have just been VANISHED */ }
|
|
1221
|
+
}
|
|
1222
|
+
|
|
1223
|
+
// Fetch genuinely new messages — UID > our prior highest.
|
|
1224
|
+
// resyncFolder doesn't return these directly; the server
|
|
1225
|
+
// emits them only via state-change FETCH if their flags
|
|
1226
|
+
// changed since modSeq, which is unreliable. Pull them
|
|
1227
|
+
// explicitly via the existing incremental path.
|
|
1228
|
+
const fetched = await client.fetchMessagesSinceUid(folder.path, highestUid, { source: false });
|
|
1229
|
+
const newOnes = fetched.filter((m: any) => m.uid > highestUid);
|
|
1230
|
+
if (newOnes.length > 0) {
|
|
1231
|
+
await this.storeMessages(accountId, folderId, folder, newOnes, highestUid);
|
|
1232
|
+
}
|
|
1233
|
+
|
|
1234
|
+
// Persist new watermark — next resync starts here.
|
|
1235
|
+
if (qr.newHighestModSeq !== undefined) {
|
|
1236
|
+
this.db.updateFolderSync(folderId, qr.exists ? prevUidValidity : prevUidValidity, String(qr.newHighestModSeq));
|
|
1237
|
+
}
|
|
1238
|
+
|
|
1239
|
+
this.emit("syncProgress", accountId, `sync:${folder.path}`, 100);
|
|
1240
|
+
console.log(` [qresync] ${accountId}/${folder.path}: done in ${Date.now() - __sfStart}ms (path: QRESYNC)`);
|
|
1241
|
+
return newOnes.length;
|
|
1242
|
+
}
|
|
1243
|
+
} catch (qrErr: any) {
|
|
1244
|
+
// QRESYNC failed (server quirk, network glitch, etc.) — log
|
|
1245
|
+
// and fall through to the legacy set-diff path. We do NOT
|
|
1246
|
+
// clear the modSeq watermark here; the next attempt will
|
|
1247
|
+
// re-try QRESYNC, and if that also fails enough times the
|
|
1248
|
+
// operator can manually clear `highest_modseq` to force a
|
|
1249
|
+
// full resync.
|
|
1250
|
+
console.warn(` [qresync] ${accountId}/${folder.path}: failed (${qrErr?.message || qrErr}) — falling back to set-diff`);
|
|
1251
|
+
}
|
|
1252
|
+
}
|
|
1253
|
+
// ────────────────────────────────────────────────────────────────
|
|
1254
|
+
|
|
1158
1255
|
let messages: any[];
|
|
1159
1256
|
// Cache the server-UID list across set-diff and deletion-recon so we
|
|
1160
1257
|
// don't pay for two `UID SEARCH` round-trips (the second one was
|
|
@@ -1351,10 +1448,9 @@ export class ImapManager extends EventEmitter {
|
|
|
1351
1448
|
// row, the upsert becomes an UPDATE that refreshes
|
|
1352
1449
|
// flags too, all in one path.
|
|
1353
1450
|
|
|
1354
|
-
// Tombstone
|
|
1355
|
-
//
|
|
1356
|
-
//
|
|
1357
|
-
// User-visible symptom: "I deleted it but it came back."
|
|
1451
|
+
// Tombstone-skip: in-flight local delete/move waiting
|
|
1452
|
+
// for server confirmation. Cleared on action success or
|
|
1453
|
+
// permanent failure (see clearTombstoneForUid).
|
|
1358
1454
|
if (msg.messageId && this.db.hasTombstone(accountId, msg.messageId)) {
|
|
1359
1455
|
console.log(` [tombstone] ${accountId}: skipping ${msg.messageId} in syncFolder (locally deleted)`);
|
|
1360
1456
|
continue;
|
|
@@ -1526,6 +1622,22 @@ export class ImapManager extends EventEmitter {
|
|
|
1526
1622
|
this.emit("folderSynced", accountId, folderId, syncedAt);
|
|
1527
1623
|
this.db.updateLastSync(accountId, syncedAt);
|
|
1528
1624
|
|
|
1625
|
+
// Seed the QRESYNC watermark from the SELECT response of whatever
|
|
1626
|
+
// legacy operation just ran (fetchMessagesSinceUid, getUids, etc.).
|
|
1627
|
+
// Without this, a CONDSTORE/QRESYNC-capable server's `HIGHESTMODSEQ`
|
|
1628
|
+
// is captured by the native layer but never persisted, and the
|
|
1629
|
+
// QRESYNC fast path above stays permanently disabled because
|
|
1630
|
+
// `prevModSeq` is 0. Captures on every sync (cheap) so the watermark
|
|
1631
|
+
// converges to the latest known modSeq.
|
|
1632
|
+
try {
|
|
1633
|
+
if (typeof (client as any).getCurrentMailboxInfo === "function") {
|
|
1634
|
+
const info = (client as any).getCurrentMailboxInfo();
|
|
1635
|
+
if (info && info.highestModSeq && info.uidValidity) {
|
|
1636
|
+
this.db.updateFolderSync(folderId, info.uidValidity, String(info.highestModSeq));
|
|
1637
|
+
}
|
|
1638
|
+
}
|
|
1639
|
+
} catch { /* non-fatal — QRESYNC just stays disabled */ }
|
|
1640
|
+
|
|
1529
1641
|
return newCount;
|
|
1530
1642
|
}
|
|
1531
1643
|
|
|
@@ -1943,10 +2055,9 @@ export class ImapManager extends EventEmitter {
|
|
|
1943
2055
|
// standalone — bad rows are logged and skipped.
|
|
1944
2056
|
for (const msg of msgs) {
|
|
1945
2057
|
try {
|
|
1946
|
-
// Tombstone
|
|
1947
|
-
//
|
|
1948
|
-
//
|
|
1949
|
-
// promoted the trash yet. Symmetric with the IMAP paths.
|
|
2058
|
+
// Tombstone-skip: in-flight local delete/move on Gmail.
|
|
2059
|
+
// Cleared by clearTombstoneForUid on failSyncAction so a
|
|
2060
|
+
// refused trash doesn't permanently hide the message.
|
|
1950
2061
|
if (msg.messageId && this.db.hasTombstone(accountId, msg.messageId)) {
|
|
1951
2062
|
continue;
|
|
1952
2063
|
}
|
|
@@ -2811,6 +2922,14 @@ export class ImapManager extends EventEmitter {
|
|
|
2811
2922
|
if (messages.length === 0) return;
|
|
2812
2923
|
const trash = this.findFolder(accountId, "trash");
|
|
2813
2924
|
|
|
2925
|
+
// Tombstone each Message-ID so sync won't re-import the source-folder
|
|
2926
|
+
// row before the server-side MOVE completes. Cleared on permanent
|
|
2927
|
+
// failure (clearTombstoneForUid in processSyncActions).
|
|
2928
|
+
for (const msg of messages) {
|
|
2929
|
+
const env = this.db.getMessageByUid(accountId, msg.uid, msg.folderId);
|
|
2930
|
+
if (env?.messageId) this.db.addTombstone(accountId, env.messageId, env.subject || "");
|
|
2931
|
+
}
|
|
2932
|
+
|
|
2814
2933
|
// Local first — move to trash folder locally so the row stays
|
|
2815
2934
|
// visible in Trash and Ctrl+Z can restore it. Body file stays in
|
|
2816
2935
|
// its original folder dir; the next sync rebinds path on
|
|
@@ -2879,6 +2998,14 @@ export class ImapManager extends EventEmitter {
|
|
|
2879
2998
|
async trashMessage(accountId: string, folderId: number, uid: number): Promise<void> {
|
|
2880
2999
|
const trash = this.findFolder(accountId, "trash");
|
|
2881
3000
|
|
|
3001
|
+
// Tombstone the Message-ID so sync won't re-import the row in the
|
|
3002
|
+
// source folder before the server-side move completes. Cleared on
|
|
3003
|
+
// permanent failure of the queued sync_action (see processSyncActions
|
|
3004
|
+
// catch block, where clearTombstoneForUid runs after attempts >= 5)
|
|
3005
|
+
// so the user sees the row reappear when their action didn't take.
|
|
3006
|
+
const env = this.db.getMessageByUid(accountId, uid, folderId);
|
|
3007
|
+
if (env?.messageId) this.db.addTombstone(accountId, env.messageId, env.subject || "");
|
|
3008
|
+
|
|
2882
3009
|
// Local first — move to trash folder so the row stays visible in
|
|
2883
3010
|
// Trash and Ctrl+Z can restore. Body file retained for undelete.
|
|
2884
3011
|
// If we're already in trash (or no trash configured), fall through
|
|
@@ -3050,7 +3177,15 @@ export class ImapManager extends EventEmitter {
|
|
|
3050
3177
|
} catch (e: any) {
|
|
3051
3178
|
console.error(` [api] ${accountId}: flag sync failed UID ${action.uid}: ${e.message}`);
|
|
3052
3179
|
this.db.failSyncAction(action.id, e.message);
|
|
3053
|
-
if (action.attempts >= 5)
|
|
3180
|
+
if (action.attempts >= 5) {
|
|
3181
|
+
// Terminal failure on delete/move → clear tombstone
|
|
3182
|
+
// so the row reappears on next sync (server still
|
|
3183
|
+
// has it). Same rationale as the IMAP branch below.
|
|
3184
|
+
if (action.action === "delete" || action.action === "move") {
|
|
3185
|
+
this.db.clearTombstoneForUid(accountId, action.uid, action.folderId);
|
|
3186
|
+
}
|
|
3187
|
+
this.db.completeSyncAction(action.id);
|
|
3188
|
+
}
|
|
3054
3189
|
}
|
|
3055
3190
|
}
|
|
3056
3191
|
} finally { try { await api.close(); } catch { /* */ } }
|
|
@@ -3127,6 +3262,17 @@ export class ImapManager extends EventEmitter {
|
|
|
3127
3262
|
this.emit("syncActionFailed", accountId, action.action, action.uid, e.message);
|
|
3128
3263
|
if (action.attempts >= 5) {
|
|
3129
3264
|
console.error(` [sync] Giving up on action ${action.id} after 5 attempts`);
|
|
3265
|
+
// 2026-05-13: terminal failure on a delete/move
|
|
3266
|
+
// means the server still has the message — so any
|
|
3267
|
+
// tombstone we set for it would otherwise hide it
|
|
3268
|
+
// from the user forever. Clear the tombstone so
|
|
3269
|
+
// the next sync re-imports the row, accurately
|
|
3270
|
+
// reflecting "your action didn't take, here it is
|
|
3271
|
+
// again." Applies to delete + move; flags/append
|
|
3272
|
+
// never tombstone.
|
|
3273
|
+
if (action.action === "delete" || action.action === "move") {
|
|
3274
|
+
this.db.clearTombstoneForUid(accountId, action.uid, action.folderId);
|
|
3275
|
+
}
|
|
3130
3276
|
this.db.completeSyncAction(action.id);
|
|
3131
3277
|
this.emit("syncActionFailed", accountId, action.action, action.uid, `Gave up after 5 attempts: ${e.message}`);
|
|
3132
3278
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bobfrankston/mailx-imap",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.43",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@bobfrankston/mailx-imap",
|
|
9
|
-
"version": "0.1.
|
|
9
|
+
"version": "0.1.43",
|
|
10
10
|
"license": "ISC",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@bobfrankston/iflow-direct": "^0.1.27",
|
|
@@ -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":"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"}
|
|
@@ -1983,11 +1983,12 @@ export class MailxService {
|
|
|
1983
1983
|
const envelope = this.db.getMessageByUid(accountId, uid);
|
|
1984
1984
|
if (!envelope)
|
|
1985
1985
|
throw new Error("Message not found");
|
|
1986
|
-
//
|
|
1987
|
-
// the
|
|
1988
|
-
//
|
|
1989
|
-
|
|
1990
|
-
|
|
1986
|
+
// Mark as pending server-side delete. The row stays visible (struck
|
|
1987
|
+
// through in the UI) until the IMAP MOVE-to-Trash / EXPUNGE confirms
|
|
1988
|
+
// server-side. Replaces the old tombstone-by-Message-ID hack: server
|
|
1989
|
+
// is authoritative, our flag tracks "in flight" state, not "hide
|
|
1990
|
+
// from view." Undelete (Ctrl-Z) clears the flag.
|
|
1991
|
+
this.db.setMessagePendingDelete(accountId, uid, envelope.folderId);
|
|
1991
1992
|
await this.imapManager.trashMessage(accountId, envelope.folderId, envelope.uid);
|
|
1992
1993
|
}
|
|
1993
1994
|
async deleteMessages(accountId, uids) {
|
|
@@ -1995,9 +1996,7 @@ export class MailxService {
|
|
|
1995
1996
|
const env = this.db.getMessageByUid(accountId, uid);
|
|
1996
1997
|
if (!env)
|
|
1997
1998
|
return null;
|
|
1998
|
-
|
|
1999
|
-
if (env.messageId)
|
|
2000
|
-
this.db.addTombstone(accountId, env.messageId, env.subject || "");
|
|
1999
|
+
this.db.setMessagePendingDelete(accountId, uid, env.folderId);
|
|
2001
2000
|
return { uid: env.uid, folderId: env.folderId };
|
|
2002
2001
|
}).filter(m => m !== null);
|
|
2003
2002
|
await this.imapManager.trashMessages(accountId, messages);
|
|
@@ -2006,6 +2005,11 @@ export class MailxService {
|
|
|
2006
2005
|
const envelope = this.db.getMessageByUid(accountId, uid);
|
|
2007
2006
|
if (!envelope)
|
|
2008
2007
|
throw new Error("Message not found");
|
|
2008
|
+
// Tombstone before the local move so sync can't re-import the
|
|
2009
|
+
// pre-move row into the source folder before IMAP MOVE completes.
|
|
2010
|
+
// Cleared on terminal IMAP failure (see processSyncActions catch).
|
|
2011
|
+
if (envelope.messageId)
|
|
2012
|
+
this.db.addTombstone(accountId, envelope.messageId, envelope.subject || "");
|
|
2009
2013
|
// Local-first: move BOTH the legacy `messages.folder_id` AND the
|
|
2010
2014
|
// `message_folders` membership row so the user-visible list query
|
|
2011
2015
|
// (which joins through mf) reflects the move immediately. Pre-fix
|
|
@@ -2031,6 +2035,13 @@ export class MailxService {
|
|
|
2031
2035
|
const env = this.db.getMessageByUid(accountId, uid);
|
|
2032
2036
|
if (!env)
|
|
2033
2037
|
return null;
|
|
2038
|
+
// Tombstone before the local move so sync can't re-import the
|
|
2039
|
+
// pre-move row into the source folder before the IMAP MOVE
|
|
2040
|
+
// completes (server still sees it there until then). Cleared
|
|
2041
|
+
// on terminal IMAP failure (see processSyncActions catch
|
|
2042
|
+
// block) so the row reappears when the action didn't take.
|
|
2043
|
+
if (env.messageId)
|
|
2044
|
+
this.db.addTombstone(accountId, env.messageId, env.subject || "");
|
|
2034
2045
|
return { uid: env.uid, folderId: env.folderId };
|
|
2035
2046
|
}).filter(m => m !== null);
|
|
2036
2047
|
// Local-first move via mf-aware helper. See moveMessage() above for
|
|
@@ -2118,12 +2129,16 @@ export class MailxService {
|
|
|
2118
2129
|
return { ok: true, row };
|
|
2119
2130
|
}
|
|
2120
2131
|
async undeleteMessage(accountId, uid, folderId) {
|
|
2121
|
-
// Clear the tombstone
|
|
2122
|
-
//
|
|
2123
|
-
//
|
|
2132
|
+
// Clear both the tombstone (so sync re-imports the row if the
|
|
2133
|
+
// server still has it) AND the pending_delete flag (visible-state
|
|
2134
|
+
// marker). The IMAP undelete (UID STORE -FLAGS \Deleted /
|
|
2135
|
+
// move-back) is queued by the imapManager call; if the server
|
|
2136
|
+
// already EXPUNGEd the message, the row is gone anyway and these
|
|
2137
|
+
// clears are no-ops.
|
|
2124
2138
|
const envelope = this.db.getMessageByUid(accountId, uid, folderId);
|
|
2125
2139
|
if (envelope?.messageId)
|
|
2126
2140
|
this.db.removeTombstone(accountId, envelope.messageId);
|
|
2141
|
+
this.db.clearMessagePendingDelete(accountId, uid, folderId);
|
|
2127
2142
|
await this.imapManager.undeleteMessage(accountId, uid, folderId);
|
|
2128
2143
|
}
|
|
2129
2144
|
async deleteOnServer(accountId, folderPath, uid) {
|