@bobfrankston/rmfmail 1.0.694 → 1.0.696
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 +63 -64
- package/client/app.bundle.js.map +2 -2
- package/client/app.js +41 -36
- package/client/app.js.map +1 -1
- package/client/app.ts +39 -32
- package/client/components/folder-tree.js +36 -37
- package/client/components/folder-tree.js.map +1 -1
- package/client/components/folder-tree.ts +33 -33
- package/client/components/message-list.js +17 -7
- package/client/components/message-list.js.map +1 -1
- package/client/components/message-list.ts +14 -6
- package/client/index.html +14 -0
- package/package.json +1 -1
- package/packages/mailx-core/index.d.ts.map +1 -1
- package/packages/mailx-core/index.js +2 -3
- package/packages/mailx-core/index.js.map +1 -1
- package/packages/mailx-core/index.ts +2 -3
- package/packages/mailx-imap/index.d.ts.map +1 -1
- package/packages/mailx-imap/index.js +3 -5
- package/packages/mailx-imap/index.js.map +1 -1
- package/packages/mailx-imap/index.ts +3 -5
- 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 +2 -2
- package/packages/mailx-service/index.js.map +1 -1
- package/packages/mailx-service/index.ts +2 -3
- package/packages/mailx-service/local-store.js +2 -2
- package/packages/mailx-service/local-store.js.map +1 -1
- package/packages/mailx-service/local-store.ts +2 -2
- package/packages/mailx-store/index.d.ts +1 -0
- package/packages/mailx-store/index.d.ts.map +1 -1
- package/packages/mailx-store/index.js +1 -0
- package/packages/mailx-store/index.js.map +1 -1
- package/packages/mailx-store/index.ts +1 -0
- package/packages/mailx-store/package.json +3 -2
- package/packages/mailx-store/parse-serial.d.ts +33 -0
- package/packages/mailx-store/parse-serial.d.ts.map +1 -0
- package/packages/mailx-store/parse-serial.js +38 -0
- package/packages/mailx-store/parse-serial.js.map +1 -0
- package/packages/mailx-store/parse-serial.ts +40 -0
- /package/packages/mailx-imap/{node_modules.npmglobalize-stash-9032 → node_modules.npmglobalize-stash-34224}/.package-lock.json +0 -0
package/client/app.bundle.js
CHANGED
|
@@ -3314,12 +3314,18 @@ var init_message_list = __esm({
|
|
|
3314
3314
|
const pick = await pickFolder(accountId, { excludeFolderIds: [msg.folderId] });
|
|
3315
3315
|
if (!pick)
|
|
3316
3316
|
return;
|
|
3317
|
-
|
|
3318
|
-
|
|
3319
|
-
|
|
3320
|
-
|
|
3321
|
-
|
|
3322
|
-
|
|
3317
|
+
removeMessagesAndReconcile(uids.map((u) => ({ accountId, uid: u })));
|
|
3318
|
+
const statusSync = document.getElementById("status-sync");
|
|
3319
|
+
if (statusSync)
|
|
3320
|
+
statusSync.textContent = `Moving ${uids.length} message${uids.length !== 1 ? "s" : ""} to ${pick.folderName}\u2026`;
|
|
3321
|
+
moveMessages(accountId, uids, pick.folderId).then(() => {
|
|
3322
|
+
if (statusSync)
|
|
3323
|
+
statusSync.textContent = `Moved ${uids.length} to ${pick.folderName}`;
|
|
3324
|
+
}).catch((err) => {
|
|
3325
|
+
console.error(`Move failed: ${err?.message || err}`);
|
|
3326
|
+
if (statusSync)
|
|
3327
|
+
statusSync.textContent = `Move sync issue: ${err?.message || err}`;
|
|
3328
|
+
});
|
|
3323
3329
|
}
|
|
3324
3330
|
},
|
|
3325
3331
|
{ label: "Delete", action: () => document.dispatchEvent(new CustomEvent("mailx-delete")) },
|
|
@@ -5124,36 +5130,35 @@ function renderNode(node, container, depth) {
|
|
|
5124
5130
|
return;
|
|
5125
5131
|
const statusEl = document.getElementById("status-sync");
|
|
5126
5132
|
const crossAccount = toMove.some((m) => m.accountId !== node.accountId);
|
|
5127
|
-
|
|
5128
|
-
|
|
5129
|
-
|
|
5130
|
-
|
|
5131
|
-
|
|
5132
|
-
|
|
5133
|
-
|
|
5134
|
-
|
|
5135
|
-
|
|
5136
|
-
|
|
5133
|
+
const moved = toMove.length;
|
|
5134
|
+
if (statusEl)
|
|
5135
|
+
statusEl.textContent = `Moved ${moved} message${moved > 1 ? "s" : ""} to ${node.name} \u2014 Ctrl+Z to undo`;
|
|
5136
|
+
const { removeMessagesAndReconcile: removeMessagesAndReconcile2 } = await Promise.resolve().then(() => (init_message_list(), message_list_exports));
|
|
5137
|
+
removeMessagesAndReconcile2(toMove);
|
|
5138
|
+
const treeContainer = document.getElementById("folder-tree");
|
|
5139
|
+
if (treeContainer)
|
|
5140
|
+
loadFolderTree(treeContainer);
|
|
5141
|
+
document.dispatchEvent(new CustomEvent("mailx-moved", {
|
|
5142
|
+
detail: {
|
|
5143
|
+
messages: toMove.map((m) => ({ accountId: m.accountId, uid: m.uid, sourceFolderId: m.folderId })),
|
|
5144
|
+
targetAccountId: node.accountId,
|
|
5145
|
+
targetFolderId: node.id
|
|
5137
5146
|
}
|
|
5138
|
-
|
|
5139
|
-
|
|
5140
|
-
|
|
5141
|
-
const { removeMessagesAndReconcile: removeMessagesAndReconcile2 } = await Promise.resolve().then(() => (init_message_list(), message_list_exports));
|
|
5142
|
-
removeMessagesAndReconcile2(toMove);
|
|
5143
|
-
const treeContainer = document.getElementById("folder-tree");
|
|
5144
|
-
if (treeContainer)
|
|
5145
|
-
loadFolderTree(treeContainer);
|
|
5146
|
-
document.dispatchEvent(new CustomEvent("mailx-moved", {
|
|
5147
|
-
detail: {
|
|
5148
|
-
messages: toMove.map((m) => ({ accountId: m.accountId, uid: m.uid, sourceFolderId: m.folderId })),
|
|
5149
|
-
targetAccountId: node.accountId,
|
|
5150
|
-
targetFolderId: node.id
|
|
5151
|
-
}
|
|
5152
|
-
}));
|
|
5153
|
-
} catch (err) {
|
|
5154
|
-
console.error(`Move failed: ${err.message}`);
|
|
5147
|
+
}));
|
|
5148
|
+
const onErr = (err) => {
|
|
5149
|
+
console.error(`Move failed: ${err?.message || err}`);
|
|
5155
5150
|
if (statusEl)
|
|
5156
|
-
statusEl.textContent = `Move
|
|
5151
|
+
statusEl.textContent = `Move sync issue: ${err?.message || err}`;
|
|
5152
|
+
};
|
|
5153
|
+
if (crossAccount) {
|
|
5154
|
+
for (const msg of toMove) {
|
|
5155
|
+
const targetAccountId = msg.accountId !== node.accountId ? node.accountId : void 0;
|
|
5156
|
+
moveMessage(msg.accountId, msg.uid, node.id, targetAccountId).catch(onErr);
|
|
5157
|
+
}
|
|
5158
|
+
} else {
|
|
5159
|
+
const accountId = toMove[0].accountId;
|
|
5160
|
+
const uids = toMove.map((m) => m.uid);
|
|
5161
|
+
moveMessages(accountId, uids, node.id).catch(onErr);
|
|
5157
5162
|
}
|
|
5158
5163
|
});
|
|
5159
5164
|
}
|
|
@@ -6614,19 +6619,17 @@ async function deleteSelectedMessages() {
|
|
|
6614
6619
|
lastDeleted = null;
|
|
6615
6620
|
if (statusSync?.textContent?.includes("undo")) statusSync.textContent = "";
|
|
6616
6621
|
}, 3e4);
|
|
6617
|
-
|
|
6618
|
-
|
|
6619
|
-
|
|
6620
|
-
|
|
6621
|
-
|
|
6622
|
-
|
|
6623
|
-
|
|
6624
|
-
|
|
6625
|
-
|
|
6626
|
-
|
|
6627
|
-
|
|
6628
|
-
console.error(`Delete failed: ${e.message}`);
|
|
6629
|
-
if (statusSync) statusSync.textContent = `Delete failed: ${e?.message || e}`;
|
|
6622
|
+
const byAccount = /* @__PURE__ */ new Map();
|
|
6623
|
+
for (const msg of snapshot) {
|
|
6624
|
+
const uids = byAccount.get(msg.accountId) || [];
|
|
6625
|
+
uids.push(msg.uid);
|
|
6626
|
+
byAccount.set(msg.accountId, uids);
|
|
6627
|
+
}
|
|
6628
|
+
for (const [accountId, uids] of byAccount) {
|
|
6629
|
+
deleteMessages(accountId, uids).catch((e) => {
|
|
6630
|
+
console.error(`Delete failed for ${accountId}: ${e?.message || e}`);
|
|
6631
|
+
if (statusSync) statusSync.textContent = `Delete sync issue (${accountId}): ${e?.message || e}`;
|
|
6632
|
+
});
|
|
6630
6633
|
}
|
|
6631
6634
|
}
|
|
6632
6635
|
async function undoDelete() {
|
|
@@ -6709,24 +6712,20 @@ async function spamSelectedMessages() {
|
|
|
6709
6712
|
const statusSync = document.getElementById("status-sync");
|
|
6710
6713
|
const snapshot = [...selected];
|
|
6711
6714
|
removeMessagesAndReconcile(selected);
|
|
6712
|
-
|
|
6713
|
-
|
|
6714
|
-
|
|
6715
|
-
|
|
6716
|
-
|
|
6717
|
-
|
|
6718
|
-
|
|
6719
|
-
|
|
6720
|
-
|
|
6715
|
+
const byAccount = /* @__PURE__ */ new Map();
|
|
6716
|
+
for (const msg of snapshot) {
|
|
6717
|
+
const uids = byAccount.get(msg.accountId) || [];
|
|
6718
|
+
uids.push(msg.uid);
|
|
6719
|
+
byAccount.set(msg.accountId, uids);
|
|
6720
|
+
}
|
|
6721
|
+
if (statusSync) statusSync.textContent = `Spam: ${snapshot.length} queued \u2014 pending server sync`;
|
|
6722
|
+
for (const [accountId, uids] of byAccount) {
|
|
6723
|
+
markAsSpamMessages(accountId, uids).then((result) => {
|
|
6721
6724
|
console.log(`[spam] ${accountId}: moved ${result?.moved ?? uids.length} to folderId=${result?.targetFolderId}`);
|
|
6722
|
-
}
|
|
6723
|
-
|
|
6724
|
-
|
|
6725
|
-
|
|
6726
|
-
if (statusSync) statusSync.textContent = `Spam failed: ${e?.message || e}`;
|
|
6727
|
-
alert(`Mark-as-spam failed: ${e?.message || e}
|
|
6728
|
-
|
|
6729
|
-
${selected.length} message(s) stayed in the list; check Settings \u2192 account spam folder and accounts.jsonc.`);
|
|
6725
|
+
}).catch((e) => {
|
|
6726
|
+
console.error(`[spam] ${accountId} failed:`, e);
|
|
6727
|
+
if (statusSync) statusSync.textContent = `Spam sync issue (${accountId}): ${e?.message || e}`;
|
|
6728
|
+
});
|
|
6730
6729
|
}
|
|
6731
6730
|
}
|
|
6732
6731
|
document.getElementById("btn-spam")?.addEventListener("click", spamSelectedMessages);
|