@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.
Files changed (42) hide show
  1. package/client/app.bundle.js +63 -64
  2. package/client/app.bundle.js.map +2 -2
  3. package/client/app.js +41 -36
  4. package/client/app.js.map +1 -1
  5. package/client/app.ts +39 -32
  6. package/client/components/folder-tree.js +36 -37
  7. package/client/components/folder-tree.js.map +1 -1
  8. package/client/components/folder-tree.ts +33 -33
  9. package/client/components/message-list.js +17 -7
  10. package/client/components/message-list.js.map +1 -1
  11. package/client/components/message-list.ts +14 -6
  12. package/client/index.html +14 -0
  13. package/package.json +1 -1
  14. package/packages/mailx-core/index.d.ts.map +1 -1
  15. package/packages/mailx-core/index.js +2 -3
  16. package/packages/mailx-core/index.js.map +1 -1
  17. package/packages/mailx-core/index.ts +2 -3
  18. package/packages/mailx-imap/index.d.ts.map +1 -1
  19. package/packages/mailx-imap/index.js +3 -5
  20. package/packages/mailx-imap/index.js.map +1 -1
  21. package/packages/mailx-imap/index.ts +3 -5
  22. package/packages/mailx-imap/package-lock.json +2 -2
  23. package/packages/mailx-imap/package.json +1 -1
  24. package/packages/mailx-service/index.d.ts.map +1 -1
  25. package/packages/mailx-service/index.js +2 -2
  26. package/packages/mailx-service/index.js.map +1 -1
  27. package/packages/mailx-service/index.ts +2 -3
  28. package/packages/mailx-service/local-store.js +2 -2
  29. package/packages/mailx-service/local-store.js.map +1 -1
  30. package/packages/mailx-service/local-store.ts +2 -2
  31. package/packages/mailx-store/index.d.ts +1 -0
  32. package/packages/mailx-store/index.d.ts.map +1 -1
  33. package/packages/mailx-store/index.js +1 -0
  34. package/packages/mailx-store/index.js.map +1 -1
  35. package/packages/mailx-store/index.ts +1 -0
  36. package/packages/mailx-store/package.json +3 -2
  37. package/packages/mailx-store/parse-serial.d.ts +33 -0
  38. package/packages/mailx-store/parse-serial.d.ts.map +1 -0
  39. package/packages/mailx-store/parse-serial.js +38 -0
  40. package/packages/mailx-store/parse-serial.js.map +1 -0
  41. package/packages/mailx-store/parse-serial.ts +40 -0
  42. /package/packages/mailx-imap/{node_modules.npmglobalize-stash-9032 → node_modules.npmglobalize-stash-34224}/.package-lock.json +0 -0
@@ -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
- try {
3318
- await moveMessages(accountId, uids, pick.folderId);
3319
- removeMessagesAndReconcile(uids.map((u) => ({ accountId, uid: u })));
3320
- } catch (err) {
3321
- alert(`Move failed: ${err.message}`);
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
- try {
5128
- if (crossAccount) {
5129
- for (const msg of toMove) {
5130
- const targetAccountId = msg.accountId !== node.accountId ? node.accountId : void 0;
5131
- await moveMessage(msg.accountId, msg.uid, node.id, targetAccountId);
5132
- }
5133
- } else {
5134
- const accountId = toMove[0].accountId;
5135
- const uids = toMove.map((m) => m.uid);
5136
- await moveMessages(accountId, uids, node.id);
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
- const moved = toMove.length;
5139
- if (statusEl)
5140
- statusEl.textContent = `Moved ${moved} message${moved > 1 ? "s" : ""} to ${node.name} \u2014 Ctrl+Z to undo`;
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 failed: ${err.message}`;
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
- try {
6618
- const byAccount = /* @__PURE__ */ new Map();
6619
- for (const msg of snapshot) {
6620
- const uids = byAccount.get(msg.accountId) || [];
6621
- uids.push(msg.uid);
6622
- byAccount.set(msg.accountId, uids);
6623
- }
6624
- for (const [accountId, uids] of byAccount) {
6625
- await deleteMessages(accountId, uids);
6626
- }
6627
- } catch (e) {
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
- try {
6713
- const byAccount = /* @__PURE__ */ new Map();
6714
- for (const msg of snapshot) {
6715
- const uids = byAccount.get(msg.accountId) || [];
6716
- uids.push(msg.uid);
6717
- byAccount.set(msg.accountId, uids);
6718
- }
6719
- for (const [accountId, uids] of byAccount) {
6720
- const result = await markAsSpamMessages(accountId, uids);
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
- if (statusSync) statusSync.textContent = `Spam: ${snapshot.length} queued \u2014 pending server sync`;
6724
- } catch (e) {
6725
- console.error(`[spam] failed:`, e);
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);