Speedup identicons by caching them

This commit is contained in:
the-djmaze 2024-10-29 01:20:34 +01:00
parent 490d808cdb
commit 8645b0ab1e

View file

@ -38,6 +38,7 @@
queue = [], queue = [],
avatars = new Map, avatars = new Map,
ncAvatars = new Map, ncAvatars = new Map,
identicons = new Map,
templateId = 'MailMessageView', templateId = 'MailMessageView',
b64 = data => btoa(unescape(encodeURIComponent(data))), b64 = data => btoa(unescape(encodeURIComponent(data))),
b64url = data => b64(data).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''), b64url = data => b64(data).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''),
@ -78,15 +79,22 @@
(from.name?.split(/[^\p{L}]+/gu) || []).reduce((a, s) => a + (s[0] || ''), '') (from.name?.split(/[^\p{L}]+/gu) || []).reduce((a, s) => a + (s[0] || ''), '')
.slice(0,2) .slice(0,2)
.toUpperCase(), .toUpperCase(),
setIdenticon = (msg, fn) => hash(msg.from[0].email).then(hash => { setIdenticon = (msg, fn) => {
const from = email(msg);
if (identicons.get(from)) {
fn(identicons.get(from));
} else {
hash(from).then(hash => {
const uri = 'data:image/svg+xml;base64,' + b64(window.identiconSvg( const uri = 'data:image/svg+xml;base64,' + b64(window.identiconSvg(
hash, hash,
fromChars(msg.from[0]), fromChars(msg.from[0]),
window.getComputedStyle(getEl('rl-app'), null).getPropertyValue('font-family') window.getComputedStyle(getEl('rl-app'), null).getPropertyValue('font-family')
)); ));
// avatars.set(getAvatarUid(msg), uri); identicons.set(email(msg), uri);
fn(uri); fn(uri);
}), });
}
},
addQueue = (msg, fn) => { addQueue = (msg, fn) => {
if (msg.from?.[0]) { if (msg.from?.[0]) {