Auto-generate profile images on conversations.
parent
85fe666edb
commit
961eb53915
@ -0,0 +1,67 @@
|
|||||||
|
const fs = require('fs');
|
||||||
|
const mkdirp = require('mkdirp');
|
||||||
|
const path = require('path');
|
||||||
|
const jdenticon = require('jdenticon');
|
||||||
|
|
||||||
|
// Icon config
|
||||||
|
jdenticon.config = {
|
||||||
|
lightness: {
|
||||||
|
color: [0.40, 0.80],
|
||||||
|
grayscale: [0.30, 0.90],
|
||||||
|
},
|
||||||
|
saturation: {
|
||||||
|
color: 0.50,
|
||||||
|
grayscale: 0.00,
|
||||||
|
},
|
||||||
|
backColor: '#86444400',
|
||||||
|
};
|
||||||
|
|
||||||
|
const { app } = require('electron').remote;
|
||||||
|
|
||||||
|
const userDataPath = app.getPath('userData');
|
||||||
|
const PATH = path.join(userDataPath, 'profileImages');
|
||||||
|
mkdirp.sync(PATH);
|
||||||
|
|
||||||
|
function hashCode(s) {
|
||||||
|
let h = 0;
|
||||||
|
for(let i = 0; i < s.length; i += 1)
|
||||||
|
h = Math.imul(31, h) + s.charCodeAt(i) | 0;
|
||||||
|
|
||||||
|
return h;
|
||||||
|
}
|
||||||
|
|
||||||
|
const hasImage = pubKey => fs.existsSync(getImagePath(pubKey));
|
||||||
|
|
||||||
|
const getImagePath = pubKey => `${PATH}/${pubKey}.png`;
|
||||||
|
const getOrCreateImagePath = pubKey => {
|
||||||
|
const imagePath = getImagePath(pubKey);
|
||||||
|
|
||||||
|
// If the image doesn't exist then create it
|
||||||
|
if (!hasImage(pubKey)) {
|
||||||
|
/*
|
||||||
|
We hash the pubKey and then pass that into jdenticon
|
||||||
|
This is because if we pass pubKey directly,
|
||||||
|
jdenticon trims the string and then generates a hash
|
||||||
|
meaning public keys with the same characters at the beginning
|
||||||
|
will get the same images
|
||||||
|
*/
|
||||||
|
const png = jdenticon.toPng(hashCode(pubKey), 50, 0.12);
|
||||||
|
fs.writeFileSync(imagePath, png);
|
||||||
|
}
|
||||||
|
|
||||||
|
return imagePath;
|
||||||
|
};
|
||||||
|
|
||||||
|
const removeImage = pubKey => {
|
||||||
|
if (hasImage(pubKey)) {
|
||||||
|
fs.unlinkSync(getImagePath(pubKey));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
getOrCreateImagePath,
|
||||||
|
getImagePath,
|
||||||
|
hasImage,
|
||||||
|
removeImage,
|
||||||
|
hashCode,
|
||||||
|
};
|
Loading…
Reference in New Issue