@bobfrankston/rmfmail 1.0.708 → 1.1.3
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/bin/mailx.js +9 -1
- package/bin/mailx.js.map +1 -1
- package/bin/mailx.ts +10 -1
- package/client/android-bootstrap.bundle.js +1 -1
- package/client/android-bootstrap.bundle.js.map +2 -2
- package/client/app.bundle.js +58 -1
- package/client/app.bundle.js.map +2 -2
- package/client/compose/compose.bundle.js +41 -1
- package/client/compose/compose.bundle.js.map +2 -2
- package/client/lib/api-client.js +41 -0
- package/client/lib/api-client.js.map +1 -1
- package/client/lib/api-client.ts +29 -0
- package/client/lib/message-state.js +23 -0
- package/client/lib/message-state.js.map +1 -1
- package/client/lib/message-state.ts +21 -0
- package/package.json +4 -3
- package/packages/mailx-bus/index.d.ts +122 -0
- package/packages/mailx-bus/index.d.ts.map +1 -0
- package/packages/mailx-bus/index.js +247 -0
- package/packages/mailx-bus/index.js.map +1 -0
- package/packages/mailx-bus/index.ts +275 -0
- package/packages/mailx-bus/package.json +19 -0
- package/packages/mailx-bus/store-events.d.ts +79 -0
- package/packages/mailx-bus/store-events.d.ts.map +1 -0
- package/packages/mailx-bus/store-events.js +155 -0
- package/packages/mailx-bus/store-events.js.map +1 -0
- package/packages/mailx-bus/store-events.ts +165 -0
- package/packages/mailx-bus/tsconfig.json +9 -0
- package/packages/mailx-core/index.d.ts.map +1 -1
- package/packages/mailx-core/index.js +25 -3
- package/packages/mailx-core/index.js.map +1 -1
- package/packages/mailx-core/index.ts +23 -3
- package/packages/mailx-host/package.json +1 -1
- package/packages/mailx-imap/index.d.ts +0 -37
- package/packages/mailx-imap/index.d.ts.map +1 -1
- package/packages/mailx-imap/index.js +17 -172
- package/packages/mailx-imap/index.js.map +1 -1
- package/packages/mailx-imap/index.ts +17 -179
- package/packages/mailx-imap/package-lock.json +2 -2
- package/packages/mailx-imap/package.json +1 -1
- package/packages/mailx-service/db-worker-client.d.ts +32 -0
- package/packages/mailx-service/db-worker-client.d.ts.map +1 -0
- package/packages/mailx-service/db-worker-client.js +66 -0
- package/packages/mailx-service/db-worker-client.js.map +1 -0
- package/packages/mailx-service/db-worker-client.ts +75 -0
- package/packages/mailx-service/db-worker.d.ts +39 -0
- package/packages/mailx-service/db-worker.d.ts.map +1 -0
- package/packages/mailx-service/db-worker.js +104 -0
- package/packages/mailx-service/db-worker.js.map +1 -0
- package/packages/mailx-service/db-worker.ts +153 -0
- package/packages/mailx-service/index.d.ts +16 -0
- package/packages/mailx-service/index.d.ts.map +1 -1
- package/packages/mailx-service/index.js +89 -77
- package/packages/mailx-service/index.js.map +1 -1
- package/packages/mailx-service/index.ts +83 -75
- package/packages/mailx-service/local-store.d.ts +54 -2
- package/packages/mailx-service/local-store.d.ts.map +1 -1
- package/packages/mailx-service/local-store.js +147 -2
- package/packages/mailx-service/local-store.js.map +1 -1
- package/packages/mailx-service/local-store.ts +147 -3
- package/packages/mailx-service/package.json +1 -0
- package/packages/mailx-service/reconciler.d.ts.map +1 -1
- package/packages/mailx-service/reconciler.js +28 -8
- package/packages/mailx-service/reconciler.js.map +1 -1
- package/packages/mailx-service/reconciler.ts +28 -8
- package/packages/mailx-service/sync-queue.d.ts +16 -0
- package/packages/mailx-service/sync-queue.d.ts.map +1 -1
- package/packages/mailx-service/sync-queue.js +33 -3
- package/packages/mailx-service/sync-queue.js.map +1 -1
- package/packages/mailx-service/sync-queue.ts +33 -3
- package/packages/mailx-settings/package.json +1 -1
- package/packages/mailx-store/bus.d.ts +79 -0
- package/packages/mailx-store/bus.d.ts.map +1 -0
- package/packages/mailx-store/bus.js +155 -0
- package/packages/mailx-store/bus.js.map +1 -0
- package/packages/mailx-store/index.d.ts +2 -0
- package/packages/mailx-store/index.d.ts.map +1 -1
- package/packages/mailx-store/index.js +5 -0
- package/packages/mailx-store/index.js.map +1 -1
- package/packages/mailx-store/index.ts +7 -0
- package/packages/mailx-store/package.json +2 -1
- package/packages/mailx-store-web/db.d.ts.map +1 -1
- package/packages/mailx-store-web/db.js +9 -1
- package/packages/mailx-store-web/db.js.map +1 -1
- package/packages/mailx-store-web/db.ts +9 -1
- package/packages/mailx-store-web/package.json +2 -1
- package/packages/mailx-store-web/sync-manager.d.ts +4 -0
- package/packages/mailx-store-web/sync-manager.d.ts.map +1 -1
- package/packages/mailx-store-web/sync-manager.js +32 -4
- package/packages/mailx-store-web/sync-manager.js.map +1 -1
- package/packages/mailx-store-web/sync-manager.ts +28 -4
- /package/packages/mailx-imap/{node_modules.npmglobalize-stash-24548 → node_modules.npmglobalize-stash-444}/.package-lock.json +0 -0
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DB factor — Node worker thread.
|
|
3
|
+
*
|
|
4
|
+
* Owns the SQLite handle and FileMessageStore. Serves the UI-read surface
|
|
5
|
+
* (getFolders, getMessages, getUnifiedInbox, getMessage, searchMessages,
|
|
6
|
+
* searchContacts, getThreadMessages) over `mailx-bus`. Subscribes to write
|
|
7
|
+
* events from the sync factor (Phase 2) and emits `db:messageAdded` /
|
|
8
|
+
* `db:messageRemoved` / `db:flagChanged` so the UI can update incrementally
|
|
9
|
+
* without re-asking.
|
|
10
|
+
*
|
|
11
|
+
* **Why a worker.** Until now every UI click had to traverse the same Node
|
|
12
|
+
* event loop the sync code runs on. A 14-minute synchronous freeze in the
|
|
13
|
+
* sync path (Dovecot SELECT hang, Prefirst.OIA backfill loop) starved every
|
|
14
|
+
* UI read. The IPC pipe handler couldn't even be scheduled. From the user's
|
|
15
|
+
* perspective: Sent shows empty, message bodies never load, autocomplete
|
|
16
|
+
* dies, drafts can't save. All of those have one cause: the read path
|
|
17
|
+
* shares an event loop with the write/sync path.
|
|
18
|
+
*
|
|
19
|
+
* In this worker, the read path is on its own thread. Sync can freeze for
|
|
20
|
+
* an hour and the user's click still gets a 5 ms answer from local SQLite.
|
|
21
|
+
*
|
|
22
|
+
* **Topology**. Main thread spawns this worker once, holds a `WorkerBus` over
|
|
23
|
+
* the `parentPort`. The worker also holds a `WorkerBus` over `parentPort` and
|
|
24
|
+
* registers its handlers. Two ends of the same channel, mirror APIs.
|
|
25
|
+
*
|
|
26
|
+
* **DB connection**. `better-sqlite3` is in-process synchronous, so the
|
|
27
|
+
* worker opens its OWN connection to the same `.db` file. WAL mode (set in
|
|
28
|
+
* `MailxDB`) makes concurrent readers safe; writes still happen on the main
|
|
29
|
+
* thread for Phase 1 and the worker sees committed rows immediately.
|
|
30
|
+
* Phase 2 moves writes to the sync worker, which routes through this worker
|
|
31
|
+
* for any UI-visible mutation so the LRU/cache here can update in lock-step.
|
|
32
|
+
*
|
|
33
|
+
* **No mailparser here.** Body parsing is the parse-worker's job. This
|
|
34
|
+
* worker reads the .eml bytes off disk and delegates parsing via
|
|
35
|
+
* `parseSerial` (which already postMessages to its own worker). Two workers
|
|
36
|
+
* either side of this thread; the read coordinator is purely an indexer.
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
import { parentPort } from "node:worker_threads";
|
|
40
|
+
import { WorkerBus, type MessagePortLike } from "@bobfrankston/mailx-bus";
|
|
41
|
+
import { MailxDB, FileMessageStore } from "@bobfrankston/mailx-store";
|
|
42
|
+
import { LocalStore } from "./local-store.js";
|
|
43
|
+
import type { MessageQuery } from "@bobfrankston/mailx-types";
|
|
44
|
+
|
|
45
|
+
if (!parentPort) {
|
|
46
|
+
throw new Error("db-worker: must be spawned as a worker, parentPort is null");
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
interface InitMessage {
|
|
50
|
+
kind: "init";
|
|
51
|
+
dbPath: string;
|
|
52
|
+
storePath: string;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Wait for the init message before constructing the DB — the main thread
|
|
56
|
+
// owns the resolved paths and passes them in.
|
|
57
|
+
let store: LocalStore | null = null;
|
|
58
|
+
let initialized = false;
|
|
59
|
+
|
|
60
|
+
parentPort.once("message", async (msg: InitMessage) => {
|
|
61
|
+
if (msg?.kind !== "init") {
|
|
62
|
+
parentPort!.postMessage({ kind: "init-error", error: `expected "init" message, got ${JSON.stringify(msg)}` });
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
const db = new MailxDB(msg.dbPath);
|
|
67
|
+
const bodyStore = new FileMessageStore(msg.storePath);
|
|
68
|
+
store = new LocalStore(db, bodyStore);
|
|
69
|
+
initialized = true;
|
|
70
|
+
// Now that the store is up, register handlers and ack init.
|
|
71
|
+
registerHandlers(store);
|
|
72
|
+
parentPort!.postMessage({ kind: "init-ok" });
|
|
73
|
+
} catch (e: any) {
|
|
74
|
+
parentPort!.postMessage({ kind: "init-error", error: e?.message || String(e) });
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
function registerHandlers(s: LocalStore): void {
|
|
79
|
+
// The bus speaks over `parentPort`. `WorkerBus` reads the same channel
|
|
80
|
+
// we just consumed `init` from — that's fine, `once()` removes the
|
|
81
|
+
// single-shot listener and the bus's own `on("message")` takes over.
|
|
82
|
+
const bus = new WorkerBus(parentPort as unknown as MessagePortLike);
|
|
83
|
+
|
|
84
|
+
// ── Folders ─────────────────────────────────────────────────────
|
|
85
|
+
bus.register<{ accountId: string }, any[]>(
|
|
86
|
+
"db:getFolders",
|
|
87
|
+
({ accountId }) => s.getFolders(accountId),
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
// ── Message list ────────────────────────────────────────────────
|
|
91
|
+
bus.register<MessageQuery, any>(
|
|
92
|
+
"db:getMessages",
|
|
93
|
+
(q) => s.getMessages(q),
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
bus.register<{ page?: number; pageSize?: number }, any>(
|
|
97
|
+
"db:getUnifiedInbox",
|
|
98
|
+
({ page = 1, pageSize = 50 }) => s.getUnifiedInbox(page, pageSize),
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
bus.register<
|
|
102
|
+
{ query: string; page?: number; pageSize?: number; accountId?: string; folderId?: number; includeTrashSpam?: boolean },
|
|
103
|
+
any
|
|
104
|
+
>(
|
|
105
|
+
"db:searchMessages",
|
|
106
|
+
({ query, page = 1, pageSize = 50, accountId, folderId, includeTrashSpam = false }) =>
|
|
107
|
+
s.searchMessages(query, page, pageSize, accountId, folderId, includeTrashSpam),
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
// ── Single message (envelope + body) ────────────────────────────
|
|
111
|
+
bus.register<{ accountId: string; uid: number; allowRemote?: boolean; folderId?: number }, any>(
|
|
112
|
+
"db:getMessage",
|
|
113
|
+
({ accountId, uid, allowRemote = false, folderId }) =>
|
|
114
|
+
s.getMessage(accountId, uid, allowRemote, folderId),
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
bus.register<{ accountId: string; threadId: string }, any[]>(
|
|
118
|
+
"db:getThreadMessages",
|
|
119
|
+
({ accountId, threadId }) => (s as any).getThreadMessages?.(accountId, threadId) ?? [],
|
|
120
|
+
);
|
|
121
|
+
|
|
122
|
+
// ── Contacts read (lookups) ─────────────────────────────────────
|
|
123
|
+
bus.register<{ query: string; limit?: number }, any[]>(
|
|
124
|
+
"db:searchContacts",
|
|
125
|
+
({ query, limit }) => (s as any).searchContacts?.(query, limit) ?? [],
|
|
126
|
+
);
|
|
127
|
+
|
|
128
|
+
// ── Accounts (read-only DB shape) ───────────────────────────────
|
|
129
|
+
bus.register<void, any[]>(
|
|
130
|
+
"db:getAccounts",
|
|
131
|
+
() => s.getAccounts(),
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
// ── Config-cache invalidation ──────────────────────────────────
|
|
135
|
+
// Main thread receives `configChanged` events (allowlist.jsonc etc.)
|
|
136
|
+
// and publishes them; the worker invalidates its in-LocalStore caches
|
|
137
|
+
// so the next read sees the fresh JSONC.
|
|
138
|
+
bus.subscribe<{ filename?: string }>("config:changed", () => {
|
|
139
|
+
s.invalidateConfigCaches();
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// Defensive: if the bus is ever asked something before init completes, the
|
|
144
|
+
// caller gets a clear error rather than a hang. Mirrors the init-error path.
|
|
145
|
+
parentPort.on("message", (msg: any) => {
|
|
146
|
+
if (!initialized && msg && typeof msg === "object" && msg.kind === "request") {
|
|
147
|
+
parentPort!.postMessage({
|
|
148
|
+
kind: "reply",
|
|
149
|
+
id: msg.id,
|
|
150
|
+
error: "db-worker: not initialized — main thread must send {kind:'init'} first",
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
});
|
|
@@ -201,6 +201,9 @@ export declare class MailxService implements MailxApi {
|
|
|
201
201
|
/** End external editing. Stops the watcher, removes the temp file.
|
|
202
202
|
* Caller is the compose UI when the user closes the window or sends. */
|
|
203
203
|
closeWordEdit(editId: string): Promise<void>;
|
|
204
|
+
/** Toggle flags. Local DB write + Store event + server-mirror enqueue.
|
|
205
|
+
* No IMAP code path runs in the click→ack window — the queued drain
|
|
206
|
+
* fires 1s later, coalescing rapid toggles. */
|
|
204
207
|
updateFlags(accountId: string, uid: number, flags: string[]): Promise<void>;
|
|
205
208
|
allowRemoteContent(type: "sender" | "domain" | "recipient", value: string): Promise<void>;
|
|
206
209
|
getUserDict(): Promise<string[]>;
|
|
@@ -350,9 +353,19 @@ export declare class MailxService implements MailxApi {
|
|
|
350
353
|
/** Force re-authentication for an account (deletes token, opens browser consent) */
|
|
351
354
|
reauthenticate(accountId: string): Promise<boolean>;
|
|
352
355
|
send(msg: any): Promise<void>;
|
|
356
|
+
/** Trash a single message. Local-first: local row moves to Trash (or
|
|
357
|
+
* expunges if already there); the server mirror is queued. */
|
|
353
358
|
deleteMessage(accountId: string, uid: number): Promise<void>;
|
|
359
|
+
/** Bulk trash. Same shape as deleteMessage but loops; each row gets its
|
|
360
|
+
* own pending-delete flag, local move/expunge, and queue entry. */
|
|
354
361
|
deleteMessages(accountId: string, uids: number[]): Promise<void>;
|
|
362
|
+
/** Move a message to another folder. Same-account moves go through the
|
|
363
|
+
* Store + queue. Cross-account moves still synchronously bridge two
|
|
364
|
+
* IMAP connections (rare; local-first violation noted as future work). */
|
|
355
365
|
moveMessage(accountId: string, uid: number, targetFolderId: number, targetAccountId?: string): Promise<void>;
|
|
366
|
+
/** Bulk move. Loops the single-move pattern under a withBatch so the
|
|
367
|
+
* one folder-counts re-render fires once per affected folder, not per
|
|
368
|
+
* message. */
|
|
356
369
|
moveMessages(accountId: string, uids: number[], targetFolderId: number): Promise<void>;
|
|
357
370
|
/** Move messages to the account's configured spam folder (accounts.jsonc "spam" path).
|
|
358
371
|
* Throws if the account has no spam folder configured or the folder doesn't exist locally. */
|
|
@@ -372,6 +385,9 @@ export declare class MailxService implements MailxApi {
|
|
|
372
385
|
ok: true;
|
|
373
386
|
row: string;
|
|
374
387
|
}>;
|
|
388
|
+
/** Restore from Trash. Local-first: move the row back, clear tombstone
|
|
389
|
+
* and pending-delete flag, then either retract the still-queued MOVE
|
|
390
|
+
* to trash or queue a counter-MOVE (trash → original). */
|
|
375
391
|
undeleteMessage(accountId: string, uid: number, folderId: number): Promise<void>;
|
|
376
392
|
deleteOnServer(accountId: string, folderPath: string, uid: number): Promise<void>;
|
|
377
393
|
createFolder(accountId: string, parentPath: string, name: string): Promise<void>;
|
|
@@ -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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"}
|
|
@@ -864,9 +864,14 @@ export class MailxService {
|
|
|
864
864
|
}
|
|
865
865
|
catch { /* file already gone — fine */ }
|
|
866
866
|
}
|
|
867
|
+
/** Toggle flags. Local DB write + Store event + server-mirror enqueue.
|
|
868
|
+
* No IMAP code path runs in the click→ack window — the queued drain
|
|
869
|
+
* fires 1s later, coalescing rapid toggles. */
|
|
867
870
|
async updateFlags(accountId, uid, flags) {
|
|
868
871
|
const envelope = this.db.getMessageByUid(accountId, uid);
|
|
869
|
-
|
|
872
|
+
const folderId = envelope?.folderId || 0;
|
|
873
|
+
this.localStore.updateFlags(accountId, uid, folderId, flags);
|
|
874
|
+
this.syncQueue.enqueueFlag(accountId, uid, folderId, flags);
|
|
870
875
|
}
|
|
871
876
|
// ── Remote content allow-list ──
|
|
872
877
|
async allowRemoteContent(type, value) {
|
|
@@ -1999,85 +2004,77 @@ export class MailxService {
|
|
|
1999
2004
|
});
|
|
2000
2005
|
}
|
|
2001
2006
|
// ── Delete / Move / Undelete ──
|
|
2007
|
+
/** Trash a single message. Local-first: local row moves to Trash (or
|
|
2008
|
+
* expunges if already there); the server mirror is queued. */
|
|
2002
2009
|
async deleteMessage(accountId, uid) {
|
|
2003
2010
|
const envelope = this.db.getMessageByUid(accountId, uid);
|
|
2004
2011
|
if (!envelope)
|
|
2005
2012
|
throw new Error("Message not found");
|
|
2006
|
-
// Mark as pending server-side delete. The row stays visible (struck
|
|
2007
|
-
// through in the UI) until the IMAP MOVE-to-Trash / EXPUNGE confirms
|
|
2008
|
-
// server-side. Replaces the old tombstone-by-Message-ID hack: server
|
|
2009
|
-
// is authoritative, our flag tracks "in flight" state, not "hide
|
|
2010
|
-
// from view." Undelete (Ctrl-Z) clears the flag.
|
|
2011
2013
|
this.db.setMessagePendingDelete(accountId, uid, envelope.folderId);
|
|
2012
|
-
|
|
2014
|
+
const trash = this.localStore.findSpecialFolder(accountId, "trash");
|
|
2015
|
+
const result = this.localStore.trashMessage(accountId, uid, envelope.folderId, trash?.id ?? null);
|
|
2016
|
+
if (result === "moved-to-trash" && trash) {
|
|
2017
|
+
this.syncQueue.enqueueMove(accountId, uid, envelope.folderId, trash.id);
|
|
2018
|
+
}
|
|
2019
|
+
else {
|
|
2020
|
+
this.syncQueue.enqueueDelete(accountId, uid, envelope.folderId, "delete");
|
|
2021
|
+
}
|
|
2013
2022
|
}
|
|
2023
|
+
/** Bulk trash. Same shape as deleteMessage but loops; each row gets its
|
|
2024
|
+
* own pending-delete flag, local move/expunge, and queue entry. */
|
|
2014
2025
|
async deleteMessages(accountId, uids) {
|
|
2015
|
-
const
|
|
2016
|
-
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
2022
|
-
|
|
2026
|
+
const trash = this.localStore.findSpecialFolder(accountId, "trash");
|
|
2027
|
+
this.localStore.bus.withBatch(() => {
|
|
2028
|
+
for (const uid of uids) {
|
|
2029
|
+
const env = this.db.getMessageByUid(accountId, uid);
|
|
2030
|
+
if (!env)
|
|
2031
|
+
continue;
|
|
2032
|
+
this.db.setMessagePendingDelete(accountId, uid, env.folderId);
|
|
2033
|
+
const result = this.localStore.trashMessage(accountId, uid, env.folderId, trash?.id ?? null);
|
|
2034
|
+
if (result === "moved-to-trash" && trash) {
|
|
2035
|
+
this.syncQueue.enqueueMove(accountId, uid, env.folderId, trash.id);
|
|
2036
|
+
}
|
|
2037
|
+
else {
|
|
2038
|
+
this.syncQueue.enqueueDelete(accountId, uid, env.folderId, "delete");
|
|
2039
|
+
}
|
|
2040
|
+
}
|
|
2041
|
+
});
|
|
2023
2042
|
}
|
|
2043
|
+
/** Move a message to another folder. Same-account moves go through the
|
|
2044
|
+
* Store + queue. Cross-account moves still synchronously bridge two
|
|
2045
|
+
* IMAP connections (rare; local-first violation noted as future work). */
|
|
2024
2046
|
async moveMessage(accountId, uid, targetFolderId, targetAccountId) {
|
|
2047
|
+
if (targetAccountId && targetAccountId !== accountId) {
|
|
2048
|
+
// Cross-account: source row removed, body re-fetched on target
|
|
2049
|
+
// via the destination provider. Done synchronously today — moving
|
|
2050
|
+
// this onto the bus needs a two-sided outbound APPEND queue which
|
|
2051
|
+
// is out of scope for this refactor. Local DB cleanup still
|
|
2052
|
+
// happens via mailx-imap (see moveMessageCrossAccount).
|
|
2053
|
+
await this.imapManager.moveMessageCrossAccount(accountId, uid, this.db.getMessageByUid(accountId, uid)?.folderId || 0, targetAccountId, targetFolderId);
|
|
2054
|
+
return;
|
|
2055
|
+
}
|
|
2025
2056
|
const envelope = this.db.getMessageByUid(accountId, uid);
|
|
2026
2057
|
if (!envelope)
|
|
2027
2058
|
throw new Error("Message not found");
|
|
2028
|
-
|
|
2029
|
-
// pre-move row into the source folder before IMAP MOVE completes.
|
|
2030
|
-
// Cleared on terminal IMAP failure (see processSyncActions catch).
|
|
2031
|
-
if (envelope.messageId)
|
|
2032
|
-
this.db.addTombstone(accountId, envelope.messageId, envelope.subject || "");
|
|
2033
|
-
// Local-first: move BOTH the legacy `messages.folder_id` AND the
|
|
2034
|
-
// `message_folders` membership row so the user-visible list query
|
|
2035
|
-
// (which joins through mf) reflects the move immediately. Pre-fix
|
|
2036
|
-
// this used `updateMessageFolder` which only touched the legacy
|
|
2037
|
-
// column; messages stayed visible in the source folder via the mf
|
|
2038
|
-
// join and reappeared on the next refresh — symptom: "I marked
|
|
2039
|
-
// them as spam and they came back."
|
|
2040
|
-
const moved = this.db.moveMessageLocal(accountId, uid, envelope.folderId, targetFolderId);
|
|
2059
|
+
const moved = this.localStore.moveMessage(accountId, uid, envelope.folderId, targetFolderId);
|
|
2041
2060
|
if (!moved)
|
|
2042
2061
|
throw new Error(`Move failed: no row at (${accountId}, folder=${envelope.folderId}, uid=${uid})`);
|
|
2043
|
-
this.
|
|
2044
|
-
this.db.recalcFolderCounts(targetFolderId);
|
|
2045
|
-
// Sync to server in background
|
|
2046
|
-
if (targetAccountId && targetAccountId !== accountId) {
|
|
2047
|
-
this.imapManager.moveMessageCrossAccount(accountId, envelope.uid, envelope.folderId, targetAccountId, targetFolderId).catch(e => console.error(` Move sync failed: ${e.message}`));
|
|
2048
|
-
}
|
|
2049
|
-
else {
|
|
2050
|
-
this.imapManager.moveMessage(accountId, envelope.uid, envelope.folderId, targetFolderId).catch(e => console.error(` Move sync failed: ${e.message}`));
|
|
2051
|
-
}
|
|
2062
|
+
this.syncQueue.enqueueMove(accountId, uid, envelope.folderId, targetFolderId);
|
|
2052
2063
|
}
|
|
2064
|
+
/** Bulk move. Loops the single-move pattern under a withBatch so the
|
|
2065
|
+
* one folder-counts re-render fires once per affected folder, not per
|
|
2066
|
+
* message. */
|
|
2053
2067
|
async moveMessages(accountId, uids, targetFolderId) {
|
|
2054
|
-
|
|
2055
|
-
const
|
|
2056
|
-
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
2061
|
-
|
|
2062
|
-
|
|
2063
|
-
|
|
2064
|
-
this.db.addTombstone(accountId, env.messageId, env.subject || "");
|
|
2065
|
-
return { uid: env.uid, folderId: env.folderId };
|
|
2066
|
-
}).filter(m => m !== null);
|
|
2067
|
-
// Local-first move via mf-aware helper. See moveMessage() above for
|
|
2068
|
-
// why updateMessageFolder isn't sufficient.
|
|
2069
|
-
const sourceFolderIds = new Set();
|
|
2070
|
-
for (const msg of messages) {
|
|
2071
|
-
if (msg) {
|
|
2072
|
-
this.db.moveMessageLocal(accountId, msg.uid, msg.folderId, targetFolderId);
|
|
2073
|
-
sourceFolderIds.add(msg.folderId);
|
|
2074
|
-
}
|
|
2075
|
-
}
|
|
2076
|
-
for (const fid of sourceFolderIds)
|
|
2077
|
-
this.db.recalcFolderCounts(fid);
|
|
2078
|
-
this.db.recalcFolderCounts(targetFolderId);
|
|
2079
|
-
// Sync to server in background
|
|
2080
|
-
this.imapManager.moveMessages(accountId, messages, targetFolderId).catch(e => console.error(` Move sync failed: ${e.message}`));
|
|
2068
|
+
this.localStore.bus.withBatch(() => {
|
|
2069
|
+
for (const uid of uids) {
|
|
2070
|
+
const env = this.db.getMessageByUid(accountId, uid);
|
|
2071
|
+
if (!env)
|
|
2072
|
+
continue;
|
|
2073
|
+
if (!this.localStore.moveMessage(accountId, uid, env.folderId, targetFolderId))
|
|
2074
|
+
continue;
|
|
2075
|
+
this.syncQueue.enqueueMove(accountId, uid, env.folderId, targetFolderId);
|
|
2076
|
+
}
|
|
2077
|
+
});
|
|
2081
2078
|
}
|
|
2082
2079
|
/** Move messages to the account's configured spam folder (accounts.jsonc "spam" path).
|
|
2083
2080
|
* Throws if the account has no spam folder configured or the folder doesn't exist locally. */
|
|
@@ -2148,18 +2145,26 @@ export class MailxService {
|
|
|
2148
2145
|
console.log(` [spam] reported ${accountId}/${uid} → spam.csv`);
|
|
2149
2146
|
return { ok: true, row };
|
|
2150
2147
|
}
|
|
2148
|
+
/** Restore from Trash. Local-first: move the row back, clear tombstone
|
|
2149
|
+
* and pending-delete flag, then either retract the still-queued MOVE
|
|
2150
|
+
* to trash or queue a counter-MOVE (trash → original). */
|
|
2151
2151
|
async undeleteMessage(accountId, uid, folderId) {
|
|
2152
|
-
|
|
2153
|
-
|
|
2154
|
-
|
|
2155
|
-
//
|
|
2156
|
-
//
|
|
2157
|
-
|
|
2158
|
-
const envelope = this.db.getMessageByUid(accountId, uid, folderId);
|
|
2152
|
+
const trash = this.localStore.findSpecialFolder(accountId, "trash");
|
|
2153
|
+
if (!trash)
|
|
2154
|
+
throw new Error("No Trash folder configured");
|
|
2155
|
+
// Clear bookkeeping flags before the local move so a re-sync mid-flight
|
|
2156
|
+
// can't re-mark the row as pending-delete and re-tombstone it.
|
|
2157
|
+
const envelope = this.db.getMessageByUid(accountId, uid, trash.id);
|
|
2159
2158
|
if (envelope?.messageId)
|
|
2160
2159
|
this.db.removeTombstone(accountId, envelope.messageId);
|
|
2161
|
-
this.db.clearMessagePendingDelete(accountId, uid,
|
|
2162
|
-
|
|
2160
|
+
this.db.clearMessagePendingDelete(accountId, uid, trash.id);
|
|
2161
|
+
this.localStore.undeleteMessage(accountId, uid, trash.id, folderId);
|
|
2162
|
+
// (a) MOVE to trash still queued? retract it — server never saw the
|
|
2163
|
+
// delete, no counter-action needed. (b) Already drained → queue
|
|
2164
|
+
// the counter-MOVE so server state catches up.
|
|
2165
|
+
if (!this.syncQueue.cancelPendingMove(accountId, uid, folderId, trash.id)) {
|
|
2166
|
+
this.syncQueue.enqueueMove(accountId, uid, trash.id, folderId);
|
|
2167
|
+
}
|
|
2163
2168
|
}
|
|
2164
2169
|
async deleteOnServer(accountId, folderPath, uid) {
|
|
2165
2170
|
await this.imapManager.deleteOnServer(accountId, folderPath, uid);
|
|
@@ -2364,12 +2369,19 @@ export class MailxService {
|
|
|
2364
2369
|
for (const child of children) {
|
|
2365
2370
|
await this.spillFolderContentsToTrash(accountId, child, trash, client);
|
|
2366
2371
|
}
|
|
2367
|
-
// Move messages to Trash root
|
|
2368
|
-
//
|
|
2372
|
+
// Move messages to Trash root via the Store + queue. withBatch
|
|
2373
|
+
// coalesces folder-count events into one re-render per topic.
|
|
2369
2374
|
const uids = await client.getUids(folder.path).catch(() => []);
|
|
2370
2375
|
if (uids.length > 0) {
|
|
2371
|
-
|
|
2372
|
-
|
|
2376
|
+
this.localStore.bus.withBatch(() => {
|
|
2377
|
+
for (const uid of uids) {
|
|
2378
|
+
const result = this.localStore.trashMessage(accountId, uid, folder.id, trash.id);
|
|
2379
|
+
if (result === "moved-to-trash")
|
|
2380
|
+
this.syncQueue.enqueueMove(accountId, uid, folder.id, trash.id);
|
|
2381
|
+
else
|
|
2382
|
+
this.syncQueue.enqueueDelete(accountId, uid, folder.id, "delete");
|
|
2383
|
+
}
|
|
2384
|
+
});
|
|
2373
2385
|
}
|
|
2374
2386
|
// Folder should now be empty; delete it on the server.
|
|
2375
2387
|
try {
|