mirror of
https://github.com/bulwarkmail/webmail.git
synced 2026-10-31 00:12:39 +00:00
Stalwart 1.0 returns every photo, logo and sound in a contact card as a blobId without a uri, including every photo Bulwark saved as a data: URI. Bulwark read only `uri`, so avatars, the contact list and detail, print, vCard export and the "has photo" filter showed nothing, and the form sent `media` without the photo on every save, so editing a phone number deleted the photo on the server. - `ContactMedia` carries `blobId`, `label`, `pref` and `contexts`; `uri` is optional, and `getContactPhotoRef`/`hasContactPhoto` read both. - Blob photos are downloaded once each, at most two at a time and at a paced rate, only while on screen, into an LRU of object URLs revoked on eviction, account switch and logout. They share Stalwart's per-account budget of 4 concurrent requests and 1000 a minute. - Avatars look senders up in an index built once per contact list. - The form leaves `media` out unless the photo changed, and otherwise passes the other entries through as the server returned them. - A new photo is uploaded into the user's own account and sent as a blobId where the blob capability lists ContactCard (1.0). 0.16 refuses blobIds in media and keeps getting a data: URI; a refusal at runtime falls back the same way for the rest of the session. - Print and vCard export download blob media first; duplicate and cross-account move send the bytes instead of the source's blobIds. - vCard export also writes photos whose data: URI names no media type (`data:;base64,`, `data:base64,`), which it dropped before.