@bobfrankston/rmfmail 1.1.194 → 1.1.196
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 +6 -4
- package/client/android-bootstrap.bundle.js.map +2 -2
- package/client/app.bundle.js +14 -1
- package/client/app.bundle.js.map +2 -2
- package/client/app.js +24 -4
- package/client/app.js.map +1 -1
- package/client/app.ts +23 -4
- package/package.json +3 -3
- package/packages/mailx-imap/index.js +4 -4
- package/packages/mailx-imap/index.js.map +1 -1
- package/packages/mailx-imap/index.ts +4 -4
- package/packages/mailx-imap/package-lock.json +2 -2
- package/packages/mailx-imap/package.json +1 -1
- package/packages/mailx-store/db.d.ts +11 -3
- package/packages/mailx-store/db.d.ts.map +1 -1
- package/packages/mailx-store/db.js +48 -6
- package/packages/mailx-store/db.js.map +1 -1
- package/packages/mailx-store/db.ts +51 -9
- package/packages/mailx-store/package.json +1 -1
- package/packages/mailx-store-web/android-bootstrap.js +2 -2
- package/packages/mailx-store-web/android-bootstrap.js.map +1 -1
- package/packages/mailx-store-web/android-bootstrap.ts +2 -2
- package/packages/mailx-store-web/db.d.ts +3 -1
- package/packages/mailx-store-web/db.d.ts.map +1 -1
- package/packages/mailx-store-web/db.js +4 -2
- package/packages/mailx-store-web/db.js.map +1 -1
- package/packages/mailx-store-web/db.ts +5 -3
- package/packages/mailx-store-web/package.json +1 -1
- package/packages/mailx-store-web/sync-manager.js +1 -1
- package/packages/mailx-store-web/sync-manager.js.map +1 -1
- package/packages/mailx-store-web/sync-manager.ts +1 -1
- /package/packages/mailx-imap/{node_modules.npmglobalize-stash-73948 → node_modules.npmglobalize-stash-59976}/.package-lock.json +0 -0
package/client/app.ts
CHANGED
|
@@ -160,8 +160,8 @@ function updateBadge(count: number): void {
|
|
|
160
160
|
link.href = dataUrl;
|
|
161
161
|
|
|
162
162
|
// Also push to the Windows taskbar overlay via msger's IPC helper —
|
|
163
|
-
// no-op on Linux/Mac. For count=0,
|
|
164
|
-
//
|
|
163
|
+
// no-op on Linux/Mac. For count=0, clear the overlay so the base icon
|
|
164
|
+
// shows cleanly.
|
|
165
165
|
try {
|
|
166
166
|
// The injected host bridge is `window.mailxapi`, NOT `window.msgapi`.
|
|
167
167
|
// The old `msgapi` reference was always undefined, so the taskbar
|
|
@@ -171,8 +171,27 @@ function updateBadge(count: number): void {
|
|
|
171
171
|
const hostApi: any = (window as any).mailxapi;
|
|
172
172
|
if (hostApi?.setTaskbarOverlay) {
|
|
173
173
|
if (count > 0) {
|
|
174
|
-
//
|
|
175
|
-
|
|
174
|
+
// BADGE-ONLY overlay. SetOverlayIcon composites the supplied
|
|
175
|
+
// icon onto the bottom-right corner of the taskbar button —
|
|
176
|
+
// the base envelope icon is already there. Sending the full
|
|
177
|
+
// envelope+badge canvas (favicon) drew a SECOND tiny envelope
|
|
178
|
+
// in the corner on top of the big one (Bob 2026-05-29). Render
|
|
179
|
+
// just the red count pill on a transparent field so only the
|
|
180
|
+
// number is overlaid. Filled circle spans most of the 32×32 so
|
|
181
|
+
// it stays legible after the corner downscale.
|
|
182
|
+
const bc = document.createElement("canvas");
|
|
183
|
+
bc.width = 32; bc.height = 32;
|
|
184
|
+
const bx = bc.getContext("2d")!;
|
|
185
|
+
bx.fillStyle = "#e33";
|
|
186
|
+
bx.beginPath();
|
|
187
|
+
bx.arc(16, 16, 15, 0, Math.PI * 2);
|
|
188
|
+
bx.fill();
|
|
189
|
+
bx.fillStyle = "#fff";
|
|
190
|
+
bx.font = "bold 20px sans-serif";
|
|
191
|
+
bx.textAlign = "center";
|
|
192
|
+
bx.textBaseline = "middle";
|
|
193
|
+
bx.fillText(count > 99 ? "99+" : String(count), 16, 17);
|
|
194
|
+
const b64 = bc.toDataURL("image/png").split(",")[1] || "";
|
|
176
195
|
hostApi.setTaskbarOverlay(b64, `${count} unread`);
|
|
177
196
|
} else {
|
|
178
197
|
hostApi.setTaskbarOverlay("", "");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bobfrankston/rmfmail",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.196",
|
|
4
4
|
"description": "Local-first email client with IMAP sync and standalone native app",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "bin/mailx.js",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@bobfrankston/iflow-direct": "^0.1.51",
|
|
40
40
|
"@bobfrankston/mailx-host": "^0.1.13",
|
|
41
|
-
"@bobfrankston/mailx-imap": "^0.1.
|
|
41
|
+
"@bobfrankston/mailx-imap": "^0.1.75",
|
|
42
42
|
"@bobfrankston/mailx-store-web": "^0.1.26",
|
|
43
43
|
"@bobfrankston/mailx-sync": "^0.1.19",
|
|
44
44
|
"@bobfrankston/miscinfo": "^1.0.12",
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
"dependencies": {
|
|
119
119
|
"@bobfrankston/iflow-direct": "^0.1.51",
|
|
120
120
|
"@bobfrankston/mailx-host": "^0.1.13",
|
|
121
|
-
"@bobfrankston/mailx-imap": "^0.1.
|
|
121
|
+
"@bobfrankston/mailx-imap": "^0.1.75",
|
|
122
122
|
"@bobfrankston/mailx-store-web": "^0.1.26",
|
|
123
123
|
"@bobfrankston/mailx-sync": "^0.1.19",
|
|
124
124
|
"@bobfrankston/miscinfo": "^1.0.12",
|
|
@@ -2774,7 +2774,7 @@ export class ImapManager extends EventEmitter {
|
|
|
2774
2774
|
if (!raw)
|
|
2775
2775
|
return null;
|
|
2776
2776
|
const bodyPath = await this.bodyStore.putMessage(accountId, folderId, uid, raw);
|
|
2777
|
-
this.db.updateBodyPath(accountId, uid, bodyPath);
|
|
2777
|
+
this.db.updateBodyPath(accountId, folderId, uid, bodyPath);
|
|
2778
2778
|
this.emit("bodyCached", accountId, uid);
|
|
2779
2779
|
return raw;
|
|
2780
2780
|
}
|
|
@@ -2816,7 +2816,7 @@ export class ImapManager extends EventEmitter {
|
|
|
2816
2816
|
}
|
|
2817
2817
|
const raw = Buffer.from(msg.source, "utf-8");
|
|
2818
2818
|
const bodyPath = await this.bodyStore.putMessage(accountId, folderId, uid, raw);
|
|
2819
|
-
this.db.updateBodyPath(accountId, uid, bodyPath);
|
|
2819
|
+
this.db.updateBodyPath(accountId, folderId, uid, bodyPath);
|
|
2820
2820
|
this.emit("bodyCached", accountId, uid);
|
|
2821
2821
|
return raw;
|
|
2822
2822
|
}
|
|
@@ -2997,7 +2997,7 @@ export class ImapManager extends EventEmitter {
|
|
|
2997
2997
|
const raw = Buffer.from(source, "utf-8");
|
|
2998
2998
|
const bodyPath = await this.bodyStore.putMessage(accountId, folderId, uid, raw);
|
|
2999
2999
|
const parsed = await extractPreview(source);
|
|
3000
|
-
this.db.updateBodyMeta(accountId, uid, bodyPath, parsed.hasAttachments, parsed.preview);
|
|
3000
|
+
this.db.updateBodyMeta(accountId, folderId, uid, bodyPath, parsed.hasAttachments, parsed.preview);
|
|
3001
3001
|
this.emit("bodyCached", accountId, uid);
|
|
3002
3002
|
counters.totalFetched++;
|
|
3003
3003
|
madeProgress = true;
|
|
@@ -3129,7 +3129,7 @@ export class ImapManager extends EventEmitter {
|
|
|
3129
3129
|
const raw = Buffer.from(source, "utf-8");
|
|
3130
3130
|
const bodyPath = await this.bodyStore.putMessage(accountId, folderId, uid, raw);
|
|
3131
3131
|
const parsed = await extractPreview(source);
|
|
3132
|
-
this.db.updateBodyMeta(accountId, uid, bodyPath, parsed.hasAttachments, parsed.preview);
|
|
3132
|
+
this.db.updateBodyMeta(accountId, folderId, uid, bodyPath, parsed.hasAttachments, parsed.preview);
|
|
3133
3133
|
this.emit("bodyCached", accountId, uid);
|
|
3134
3134
|
this.clearPrefetchEmpty(accountId, folderId, uid); // healed — drop stale backoff
|
|
3135
3135
|
counters.totalFetched++;
|