You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			66 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
| 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,
 | |
| };
 |