@bobfrankston/rmfmail 1.2.333 → 1.2.337
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/android-bootstrap.bundle.js +53 -0
- package/client/android-bootstrap.bundle.js.map +2 -2
- package/client/app.bundle.js +51 -14
- package/client/app.bundle.js.map +2 -2
- package/client/app.js +12 -6
- package/client/app.js.map +1 -1
- package/client/app.ts +12 -6
- package/client/components/folder-tree.js +6 -1
- package/client/components/folder-tree.js.map +1 -1
- package/client/components/folder-tree.ts +5 -1
- package/client/components/message-list.js +54 -11
- package/client/components/message-list.js.map +1 -1
- package/client/components/message-list.ts +47 -9
- package/client/components/message-viewer.js +6 -1
- package/client/components/message-viewer.js.map +1 -1
- package/client/components/message-viewer.ts +6 -1
- package/client/compose/compose.bundle.js +42 -5
- package/client/compose/compose.bundle.js.map +4 -4
- package/client/compose/compose.js +7 -2
- package/client/compose/compose.js.map +1 -1
- package/client/compose/compose.ts +7 -2
- package/client/index.html +2 -2
- package/client/package.json +1 -1
- package/package.json +9 -9
- package/packages/mailx-imap/index.d.ts +4 -1
- package/packages/mailx-imap/index.d.ts.map +1 -1
- package/packages/mailx-imap/index.js +5 -2
- package/packages/mailx-imap/index.js.map +1 -1
- package/packages/mailx-imap/index.ts +7 -3
- 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 +33 -3
- package/packages/mailx-service/index.js.map +1 -1
- package/packages/mailx-service/index.ts +30 -3
- package/packages/mailx-service/package.json +1 -1
- package/packages/mailx-service/sync-queue.d.ts +7 -0
- package/packages/mailx-service/sync-queue.d.ts.map +1 -1
- package/packages/mailx-service/sync-queue.js +9 -0
- package/packages/mailx-service/sync-queue.js.map +1 -1
- package/packages/mailx-service/sync-queue.ts +10 -0
- package/packages/mailx-settings/package.json +1 -1
- package/packages/mailx-store/package.json +1 -1
- package/packages/mailx-store-web/package.json +1 -1
- package/packages/mailx-types/index.d.ts.map +1 -1
- package/packages/mailx-types/index.js +14 -0
- package/packages/mailx-types/index.js.map +1 -1
- package/packages/mailx-types/index.ts +13 -0
- package/packages/mailx-types/package.json +1 -1
package/client/app.bundle.js
CHANGED
|
@@ -4663,7 +4663,8 @@ var init_message_viewer = __esm({
|
|
|
4663
4663
|
return;
|
|
4664
4664
|
if (!currentMessage || currentAccountId !== ev.accountId)
|
|
4665
4665
|
return;
|
|
4666
|
-
|
|
4666
|
+
const sameDraft = !!ev.draftId && currentMessage.mailxDraftId === ev.draftId;
|
|
4667
|
+
if (!sameDraft && currentMessage.uid !== ev.previousDraftUid)
|
|
4667
4668
|
return;
|
|
4668
4669
|
const newBody = String(ev.bodyHtml || "");
|
|
4669
4670
|
currentMessage.bodyHtml = newBody;
|
|
@@ -4808,6 +4809,7 @@ __export(message_list_exports, {
|
|
|
4808
4809
|
removeMessagesAndReconcile: () => removeMessagesAndReconcile,
|
|
4809
4810
|
revealMessage: () => revealMessage,
|
|
4810
4811
|
scrollFocusedIntoView: () => scrollFocusedIntoView,
|
|
4812
|
+
selectAllMessages: () => selectAllMessages,
|
|
4811
4813
|
selectAllVisible: () => selectAllVisible,
|
|
4812
4814
|
setDateBasis: () => setDateBasis,
|
|
4813
4815
|
setLiveFilter: () => setLiveFilter,
|
|
@@ -4833,6 +4835,11 @@ function applyLiveFilter(body) {
|
|
|
4833
4835
|
row.classList.toggle("filter-hidden", !text.includes(liveFilterText));
|
|
4834
4836
|
}
|
|
4835
4837
|
}
|
|
4838
|
+
function currentSearchPagingScope() {
|
|
4839
|
+
if (currentSearchScope !== "server")
|
|
4840
|
+
return currentSearchScope;
|
|
4841
|
+
return currentSearchFolderId ? "current" : "all";
|
|
4842
|
+
}
|
|
4836
4843
|
function emptyListMessage() {
|
|
4837
4844
|
if (searchMode && currentSearchQuery) {
|
|
4838
4845
|
return `No messages found by "${escapeHtmlText(currentSearchQuery)}"`;
|
|
@@ -5244,6 +5251,29 @@ function selectAllVisible() {
|
|
|
5244
5251
|
body.querySelectorAll(".ml-row:not(.filter-hidden)").forEach((r) => r.classList.add("selected"));
|
|
5245
5252
|
updateBulkBar();
|
|
5246
5253
|
}
|
|
5254
|
+
async function selectAllMessages() {
|
|
5255
|
+
const body = document.getElementById("ml-body");
|
|
5256
|
+
if (!body)
|
|
5257
|
+
return;
|
|
5258
|
+
const status = document.getElementById("status-sync");
|
|
5259
|
+
let guard = 0;
|
|
5260
|
+
while (currentPage * 50 < totalMessages && guard++ < 1e4) {
|
|
5261
|
+
if (loading) {
|
|
5262
|
+
await new Promise((r) => setTimeout(r, 50));
|
|
5263
|
+
continue;
|
|
5264
|
+
}
|
|
5265
|
+
const before = body.querySelectorAll(".ml-row").length;
|
|
5266
|
+
if (status)
|
|
5267
|
+
status.textContent = `Loading all ${totalMessages} messages to select them\u2026 ${before} so far`;
|
|
5268
|
+
await loadMoreMessages();
|
|
5269
|
+
if (body.querySelectorAll(".ml-row").length === before)
|
|
5270
|
+
break;
|
|
5271
|
+
}
|
|
5272
|
+
selectAllVisible();
|
|
5273
|
+
const n = body.querySelectorAll(".ml-row.selected").length;
|
|
5274
|
+
if (status)
|
|
5275
|
+
status.textContent = `Selected ${n} message${n === 1 ? "" : "s"}`;
|
|
5276
|
+
}
|
|
5247
5277
|
function selectRange(from, to) {
|
|
5248
5278
|
const body = document.getElementById("ml-body");
|
|
5249
5279
|
if (!body)
|
|
@@ -5494,6 +5524,10 @@ async function loadSearchResults(query, scope = "all", accountId = "", folderId
|
|
|
5494
5524
|
liveFilterText = "";
|
|
5495
5525
|
unifiedMode = false;
|
|
5496
5526
|
currentSearchQuery = query;
|
|
5527
|
+
currentSearchScope = scope;
|
|
5528
|
+
currentSearchAccountId = accountId;
|
|
5529
|
+
currentSearchFolderId = folderId;
|
|
5530
|
+
currentSearchIncludeTrash = includeTrashSpam;
|
|
5497
5531
|
currentPage = 1;
|
|
5498
5532
|
totalMessages = 0;
|
|
5499
5533
|
const body = document.getElementById("ml-body");
|
|
@@ -5718,7 +5752,7 @@ async function loadMoreMessages() {
|
|
|
5718
5752
|
const rowsBefore = body.querySelectorAll(".ml-row").length;
|
|
5719
5753
|
try {
|
|
5720
5754
|
const flaggedOnly = body.classList.contains("flagged-only");
|
|
5721
|
-
const result = searchMode ? await searchMessages(currentSearchQuery, currentPage) : unifiedMode ? await getUnifiedInbox(currentPage, 50, flaggedOnly, dateBasis) : await getMessages(currentAccountId2, currentFolderId, currentPage, 50, flaggedOnly, currentSort, currentSortDir, dateBasis);
|
|
5755
|
+
const result = searchMode ? await searchMessages(currentSearchQuery, currentPage, 50, currentSearchPagingScope(), currentSearchAccountId, currentSearchFolderId, currentSearchIncludeTrash) : unifiedMode ? await getUnifiedInbox(currentPage, 50, flaggedOnly, dateBasis) : await getMessages(currentAccountId2, currentFolderId, currentPage, 50, flaggedOnly, currentSort, currentSortDir, dateBasis);
|
|
5722
5756
|
const current = getMessages2();
|
|
5723
5757
|
setMessages([...current, ...result.items]);
|
|
5724
5758
|
appendMessages(body, unifiedMode ? "" : currentAccountId2, result.items);
|
|
@@ -5957,7 +5991,7 @@ function escapeHtml4(s) {
|
|
|
5957
5991
|
div.textContent = s;
|
|
5958
5992
|
return div.innerHTML;
|
|
5959
5993
|
}
|
|
5960
|
-
var onMessageSelect, currentAccountId2, currentFolderId, currentSpecialUse, lastClickedRow, currentPage, totalMessages, loading, MAX_REFRESH_PAGES, unifiedMode, searchMode, liveFilterText, currentSearchQuery, wasUnifiedBeforeSearch, showToInsteadOfFrom, touchWasScroll, lastPointerWasTouch, currentSort, currentSortDir, dateBasis, loadGen, listCache, CACHE_KEY_UNIFIED, positionMemory, POSITION_STORAGE_KEY, focusedRow, rowByKey, prioritySenders, priorityDomains, timeFmt, dateFmt, dateFmtSameYear, MessageRow;
|
|
5994
|
+
var onMessageSelect, currentAccountId2, currentFolderId, currentSpecialUse, lastClickedRow, currentPage, totalMessages, loading, MAX_REFRESH_PAGES, unifiedMode, searchMode, liveFilterText, currentSearchQuery, currentSearchScope, currentSearchAccountId, currentSearchFolderId, currentSearchIncludeTrash, wasUnifiedBeforeSearch, showToInsteadOfFrom, touchWasScroll, lastPointerWasTouch, currentSort, currentSortDir, dateBasis, loadGen, listCache, CACHE_KEY_UNIFIED, positionMemory, POSITION_STORAGE_KEY, focusedRow, rowByKey, prioritySenders, priorityDomains, timeFmt, dateFmt, dateFmtSameYear, MessageRow;
|
|
5961
5995
|
var init_message_list = __esm({
|
|
5962
5996
|
"client/components/message-list.js"() {
|
|
5963
5997
|
"use strict";
|
|
@@ -5977,6 +6011,10 @@ var init_message_list = __esm({
|
|
|
5977
6011
|
searchMode = false;
|
|
5978
6012
|
liveFilterText = "";
|
|
5979
6013
|
currentSearchQuery = "";
|
|
6014
|
+
currentSearchScope = "all";
|
|
6015
|
+
currentSearchAccountId = "";
|
|
6016
|
+
currentSearchFolderId = 0;
|
|
6017
|
+
currentSearchIncludeTrash = false;
|
|
5980
6018
|
wasUnifiedBeforeSearch = false;
|
|
5981
6019
|
showToInsteadOfFrom = false;
|
|
5982
6020
|
touchWasScroll = false;
|
|
@@ -6261,15 +6299,10 @@ var init_message_list = __esm({
|
|
|
6261
6299
|
const selectedCount = body ? body.querySelectorAll(".ml-row.selected").length : 0;
|
|
6262
6300
|
showMenu(e.clientX, e.clientY, [
|
|
6263
6301
|
{
|
|
6264
|
-
|
|
6302
|
+
// Total in the view, not rows loaded so far (2026-09-16).
|
|
6303
|
+
label: `Select all (${Math.max(totalMessages || 0, visibleRows.length)})`,
|
|
6265
6304
|
action: () => {
|
|
6266
|
-
|
|
6267
|
-
return;
|
|
6268
|
-
body.classList.add("multi-select-on");
|
|
6269
|
-
for (const r of visibleRows)
|
|
6270
|
-
r.classList.add("selected");
|
|
6271
|
-
lastClickedRow = visibleRows[visibleRows.length - 1] || null;
|
|
6272
|
-
updateBulkBar();
|
|
6305
|
+
void selectAllMessages();
|
|
6273
6306
|
},
|
|
6274
6307
|
disabled: visibleRows.length === 0
|
|
6275
6308
|
},
|
|
@@ -8899,8 +8932,11 @@ function renderNode(node, container, depth, forceExpand) {
|
|
|
8899
8932
|
const treeContainer = document.getElementById("folder-tree");
|
|
8900
8933
|
if (treeContainer)
|
|
8901
8934
|
loadFolderTree(treeContainer);
|
|
8935
|
+
const status = document.getElementById("status-sync");
|
|
8936
|
+
if (status)
|
|
8937
|
+
status.textContent = `Emptied ${node.name} locally \u2014 deleting on the server in the background`;
|
|
8902
8938
|
} catch (err) {
|
|
8903
|
-
alert(`Failed: ${err.message}`);
|
|
8939
|
+
alert(`Failed to empty ${node.name}: ${err.message}`);
|
|
8904
8940
|
}
|
|
8905
8941
|
} });
|
|
8906
8942
|
}
|
|
@@ -11620,7 +11656,8 @@ function doSearch(immediate = false) {
|
|
|
11620
11656
|
if (serverOn) {
|
|
11621
11657
|
serverSearchTimer = setTimeout(() => {
|
|
11622
11658
|
serverSearchTimer = null;
|
|
11623
|
-
|
|
11659
|
+
const serverFolderId = localScopeEff === "current" ? currentFolderId2 : 0;
|
|
11660
|
+
loadSearchResults(query, "server", currentAccountId3, serverFolderId, includeTrash);
|
|
11624
11661
|
}, SERVER_SEARCH_DALLY_MS);
|
|
11625
11662
|
}
|
|
11626
11663
|
}
|
|
@@ -12435,7 +12472,7 @@ document.addEventListener("keydown", (e) => {
|
|
|
12435
12472
|
const mlBody = document.getElementById("ml-body");
|
|
12436
12473
|
if (mlBody) {
|
|
12437
12474
|
e.preventDefault();
|
|
12438
|
-
|
|
12475
|
+
void selectAllMessages();
|
|
12439
12476
|
}
|
|
12440
12477
|
}
|
|
12441
12478
|
if (e.ctrlKey && e.key === "d" || e.key === "Delete") {
|