Merge pull request #68 from Mikunj/ui/profile-icons
Automatically generate profile iconspull/70/head
commit
5212edcee2
@ -0,0 +1,65 @@
|
||||
const fs = require('fs');
|
||||
const mkdirp = require('mkdirp');
|
||||
const path = require('path');
|
||||
const Identicon = require('identicon.js');
|
||||
const sha224 = require('js-sha512').sha512_224;
|
||||
|
||||
const { app } = require('electron').remote;
|
||||
|
||||
const userDataPath = app.getPath('userData');
|
||||
const PATH = path.join(userDataPath, 'profileImages');
|
||||
mkdirp.sync(PATH);
|
||||
|
||||
const hasImage = pubKey => fs.existsSync(getImagePath(pubKey));
|
||||
|
||||
const getImagePath = pubKey => `${PATH}/${pubKey}.png`;
|
||||
const getOrCreateImagePath = pubKey => {
|
||||
// If the image doesn't exist then create it
|
||||
if (!hasImage(pubKey))
|
||||
return generateImage(pubKey);
|
||||
|
||||
return getImagePath(pubKey);
|
||||
};
|
||||
|
||||
const removeImage = pubKey => {
|
||||
if (hasImage(pubKey)) {
|
||||
fs.unlinkSync(getImagePath(pubKey));
|
||||
}
|
||||
}
|
||||
|
||||
const removeImagesNotInArray = pubKeyArray => {
|
||||
fs.readdirSync(PATH)
|
||||
// Get all files that end with png
|
||||
.filter(file => file.includes('.png'))
|
||||
// Strip the extension
|
||||
.map(i => path.basename(i, '.png'))
|
||||
// Get any file that is not in the pubKeyArray
|
||||
.filter(i => !pubKeyArray.includes(i))
|
||||
// Remove them
|
||||
.forEach(i => removeImage(i));
|
||||
}
|
||||
|
||||
const generateImage = pubKey => {
|
||||
const imagePath = getImagePath(pubKey);
|
||||
|
||||
/*
|
||||
We hash the pubKey and then pass that into Identicon.
|
||||
This is to avoid getting the same image
|
||||
if 2 public keys start with the same 15 characters.
|
||||
*/
|
||||
const png = new Identicon(sha224(pubKey), {
|
||||
margin: 0.2,
|
||||
background: [0,0,0,0],
|
||||
}).toString();
|
||||
fs.writeFileSync(imagePath, png, 'base64');
|
||||
return imagePath
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
generateImage,
|
||||
getOrCreateImagePath,
|
||||
getImagePath,
|
||||
hasImage,
|
||||
removeImage,
|
||||
removeImagesNotInArray,
|
||||
};
|
Loading…
Reference in New Issue