@bobfrankston/rmfmail 1.2.178 → 1.2.180
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/TODO.md +1 -0
- package/client/android-bootstrap.bundle.js +57 -6
- package/client/android-bootstrap.bundle.js.map +3 -3
- package/client/app.bundle.js +12 -0
- package/client/app.bundle.js.map +3 -3
- package/client/compose/compose.bundle.js +74 -0
- package/client/compose/compose.bundle.js.map +3 -3
- package/client/compose/compose.js +93 -0
- package/client/compose/compose.js.map +1 -1
- package/client/compose/compose.ts +89 -0
- package/client/lib/api-client.js +6 -0
- package/client/lib/api-client.js.map +1 -1
- package/client/lib/api-client.ts +7 -0
- package/client/lib/mailxapi.js +5 -0
- package/package.json +5 -5
- package/packages/mailx-imap/index.d.ts +10 -0
- package/packages/mailx-imap/index.d.ts.map +1 -1
- package/packages/mailx-imap/index.js +18 -0
- package/packages/mailx-imap/index.js.map +1 -1
- package/packages/mailx-imap/index.ts +17 -0
- package/packages/mailx-imap/package-lock.json +2 -2
- package/packages/mailx-imap/package.json +1 -1
- package/packages/mailx-service/index.d.ts +9 -0
- package/packages/mailx-service/index.d.ts.map +1 -1
- package/packages/mailx-service/index.js +56 -11
- package/packages/mailx-service/index.js.map +1 -1
- package/packages/mailx-service/index.ts +55 -12
- package/packages/mailx-service/jsonrpc.js +2 -0
- package/packages/mailx-service/jsonrpc.js.map +1 -1
- package/packages/mailx-service/jsonrpc.ts +2 -0
- package/packages/mailx-service/package.json +1 -1
- package/packages/mailx-settings/package.json +1 -1
- package/packages/mailx-store/package.json +1 -1
- package/packages/mailx-store-web/android-bootstrap.js +2 -0
- package/packages/mailx-store-web/android-bootstrap.js.map +1 -1
- package/packages/mailx-store-web/android-bootstrap.ts +2 -0
- package/packages/mailx-store-web/package.json +1 -1
- package/packages/mailx-store-web/web-service.d.ts.map +1 -1
- package/packages/mailx-store-web/web-service.js +30 -7
- package/packages/mailx-store-web/web-service.js.map +1 -1
- package/packages/mailx-store-web/web-service.ts +31 -8
- package/packages/mailx-types/index.d.ts +2 -0
- package/packages/mailx-types/index.d.ts.map +1 -1
- package/packages/mailx-types/index.js +3 -0
- package/packages/mailx-types/index.js.map +1 -1
- package/packages/mailx-types/index.ts +5 -0
- package/packages/mailx-types/mime-inline-images.d.ts +38 -0
- package/packages/mailx-types/mime-inline-images.d.ts.map +1 -0
- package/packages/mailx-types/mime-inline-images.js +45 -0
- package/packages/mailx-types/mime-inline-images.js.map +1 -0
- package/packages/mailx-types/mime-inline-images.ts +55 -0
- package/packages/mailx-types/package.json +1 -1
- /package/packages/mailx-imap/{node_modules.npmglobalize-stash-7544 → node_modules.npmglobalize-stash-40432}/.package-lock.json +0 -0
|
@@ -1024,6 +1024,7 @@ __export(api_client_exports, {
|
|
|
1024
1024
|
autocomplete: () => autocomplete,
|
|
1025
1025
|
cancelQueuedOutgoing: () => cancelQueuedOutgoing,
|
|
1026
1026
|
cancelServerSearch: () => cancelServerSearch,
|
|
1027
|
+
checkDraftNewer: () => checkDraftNewer,
|
|
1027
1028
|
closeComposePopout: () => closeComposePopout,
|
|
1028
1029
|
closeWordEdit: () => closeWordEdit,
|
|
1029
1030
|
connectEvents: () => connectEvents,
|
|
@@ -1581,6 +1582,9 @@ function repairAccounts() {
|
|
|
1581
1582
|
function deleteDraft(accountId, draftUid2, draftId2) {
|
|
1582
1583
|
return ipc().deleteDraft?.(accountId, draftUid2, draftId2);
|
|
1583
1584
|
}
|
|
1585
|
+
function checkDraftNewer(accountId, draftId2, sinceUid) {
|
|
1586
|
+
return ipc().checkDraftNewer?.(accountId, draftId2, sinceUid) ?? Promise.resolve(null);
|
|
1587
|
+
}
|
|
1584
1588
|
function addContact(name, email) {
|
|
1585
1589
|
return ipc().addContact?.(name, email);
|
|
1586
1590
|
}
|
|
@@ -5186,6 +5190,75 @@ function applyInit(init) {
|
|
|
5186
5190
|
else if (!subjectInput.value) subjectInput.focus();
|
|
5187
5191
|
else editor.focus();
|
|
5188
5192
|
recordContentBaseline();
|
|
5193
|
+
if (init.draftUid && init.draftId) {
|
|
5194
|
+
void checkForNewerDraftVersion(init.accountId, init.draftUid);
|
|
5195
|
+
}
|
|
5196
|
+
}
|
|
5197
|
+
var draftFreshnessHold = false;
|
|
5198
|
+
async function checkForNewerDraftVersion(accountId, openedUid) {
|
|
5199
|
+
draftFreshnessHold = true;
|
|
5200
|
+
const holdTimer = setTimeout(() => {
|
|
5201
|
+
draftFreshnessHold = false;
|
|
5202
|
+
}, 15e3);
|
|
5203
|
+
try {
|
|
5204
|
+
const { checkDraftNewer: checkDraftNewer2, getMessage: getMessage2 } = await Promise.resolve().then(() => (init_api_client(), api_client_exports));
|
|
5205
|
+
const r = await checkDraftNewer2(accountId, draftId || "", openedUid);
|
|
5206
|
+
if (!r?.uid) return;
|
|
5207
|
+
const m = await getMessage2(accountId, r.uid, true, r.folderId);
|
|
5208
|
+
if (!m) return;
|
|
5209
|
+
const adopt = () => {
|
|
5210
|
+
toInput.value = formatAddrs(m.to || []);
|
|
5211
|
+
ccInput.value = formatAddrs(m.cc || []);
|
|
5212
|
+
bccInput.value = formatAddrs(m.bcc || []);
|
|
5213
|
+
subjectInput.value = m.subject || "";
|
|
5214
|
+
editor.setHtml(m.bodyHtml || "");
|
|
5215
|
+
draftUid = r.uid;
|
|
5216
|
+
setComposeTitle(m.subject || "");
|
|
5217
|
+
recordContentBaseline();
|
|
5218
|
+
showDraftStatus("Loaded newer version of this draft (saved on another machine).", false);
|
|
5219
|
+
logClientEvent("draft-newer-adopted", { draftId, from: openedUid, to: r.uid });
|
|
5220
|
+
};
|
|
5221
|
+
if (!composeHasUserChanges()) {
|
|
5222
|
+
adopt();
|
|
5223
|
+
return;
|
|
5224
|
+
}
|
|
5225
|
+
clearTimeout(holdTimer);
|
|
5226
|
+
showNewerDraftBanner(adopt);
|
|
5227
|
+
} catch (e) {
|
|
5228
|
+
logClientEvent("draft-newer-check-failed", { err: e?.message || String(e) });
|
|
5229
|
+
} finally {
|
|
5230
|
+
clearTimeout(holdTimer);
|
|
5231
|
+
if (!document.getElementById("draft-newer-banner")) draftFreshnessHold = false;
|
|
5232
|
+
}
|
|
5233
|
+
}
|
|
5234
|
+
function showNewerDraftBanner(adopt) {
|
|
5235
|
+
if (document.getElementById("draft-newer-banner")) return;
|
|
5236
|
+
const banner = document.createElement("div");
|
|
5237
|
+
banner.id = "draft-newer-banner";
|
|
5238
|
+
banner.style.cssText = "display:flex;align-items:center;gap:10px;padding:6px 12px;background:var(--color-warning-bg, #fff4d6);color:var(--color-text, #333);border-bottom:1px solid var(--color-border, #d8c27a);font-size:0.9em;";
|
|
5239
|
+
const label = document.createElement("span");
|
|
5240
|
+
label.style.cssText = "flex:1;";
|
|
5241
|
+
label.textContent = "This draft was changed on another machine after the copy shown here.";
|
|
5242
|
+
const loadBtn = document.createElement("button");
|
|
5243
|
+
loadBtn.textContent = "Load newer version";
|
|
5244
|
+
loadBtn.style.cssText = "padding:3px 10px;";
|
|
5245
|
+
const keepBtn = document.createElement("button");
|
|
5246
|
+
keepBtn.textContent = "Keep my edits";
|
|
5247
|
+
keepBtn.style.cssText = "padding:3px 10px;";
|
|
5248
|
+
const done = () => {
|
|
5249
|
+
banner.remove();
|
|
5250
|
+
draftFreshnessHold = false;
|
|
5251
|
+
};
|
|
5252
|
+
loadBtn.addEventListener("click", () => {
|
|
5253
|
+
adopt();
|
|
5254
|
+
done();
|
|
5255
|
+
});
|
|
5256
|
+
keepBtn.addEventListener("click", done);
|
|
5257
|
+
banner.append(label, loadBtn, keepBtn);
|
|
5258
|
+
document.body.insertBefore(banner, document.body.firstChild);
|
|
5259
|
+
setTimeout(() => {
|
|
5260
|
+
draftFreshnessHold = false;
|
|
5261
|
+
}, 12e4);
|
|
5189
5262
|
}
|
|
5190
5263
|
var composeDirty = false;
|
|
5191
5264
|
function setComposeTitle(subject) {
|
|
@@ -5239,6 +5312,7 @@ function showDraftStatus(text, isError) {
|
|
|
5239
5312
|
}
|
|
5240
5313
|
async function saveDraft2() {
|
|
5241
5314
|
if (draftSaving) return;
|
|
5315
|
+
if (draftFreshnessHold) return;
|
|
5242
5316
|
if (!draftUid && !draftId && !composeHasUserChanges()) return;
|
|
5243
5317
|
if (!draftUid && !draftId) {
|
|
5244
5318
|
const hasSubject = subjectInput.value.trim().length > 0;
|