From 040aeb1c0c0e90fa94482dded1810e21bd48ef7d Mon Sep 17 00:00:00 2001 From: jomo Date: Mon, 24 Nov 2014 23:20:25 +0100 Subject: [PATCH] Don't store helm image when user has no helm, fix #16 --- modules/helpers.js | 8 +++++++- modules/skins.js | 46 ++++++++++++++++++++++++++-------------------- 2 files changed, 33 insertions(+), 21 deletions(-) diff --git a/modules/helpers.js b/modules/helpers.js index 01d792c..9e12b21 100644 --- a/modules/helpers.js +++ b/modules/helpers.js @@ -3,6 +3,7 @@ var logging = require('./logging'); var config = require('./config'); var cache = require('./cache'); var skins = require('./skins'); +var fs = require('fs'); // 0098cb60-fa8e-427c-b299-793cbd302c9a var valid_uuid = /^([0-9a-f-]{32,36}|[a-zA-Z0-9_]{1,16})$/; // uuid|username @@ -106,7 +107,12 @@ exp.get_avatar = function(uuid, helm, size, callback) { logging.log("\nrequest: " + uuid); exp.get_image_hash(uuid, function(err, status, hash) { if (hash) { - var filepath = __dirname + '/../' + (helm ? config.helms_dir : config.faces_dir) + hash + ".png"; + var facepath = __dirname + '/../' + config.faces_dir + hash + ".png"; + var helmpath = __dirname + '/../' + config.helms_dir + hash + ".png"; + var filepath = facepath; + if (helm && fs.existsSync(helmpath)) { + filepath = helmpath; + } skins.resize_img(filepath, size, function(img_err, result) { if (img_err) { callback(img_err, -1, null); diff --git a/modules/skins.js b/modules/skins.js index 8a797f7..cc1f661 100644 --- a/modules/skins.js +++ b/modules/skins.js @@ -1,4 +1,6 @@ +var logging = require('./logging'); var lwip = require('lwip'); +var fs = require('fs'); var exp = {}; @@ -28,7 +30,7 @@ exp.extract_face = function(buffer, outname, callback) { // result is saved to a file called +outname+ // +callback+ contains error exp.extract_helm = function(facefile, buffer, outname, callback) { - lwip.open(buffer, "png", function(err, skin) { + lwip.open(buffer, "png", function(err, skin_img) { if (err) { callback(err); } else { @@ -36,25 +38,29 @@ exp.extract_helm = function(facefile, buffer, outname, callback) { if (err) { callback(err); } else { - skin.crop(40, 8, 47, 15, function(err, helm_img) { - if (err) { - callback(err); - } else { - face_img.paste(0, 0, helm_img, function(err, face_helm_img) { - if (err) { - callback(err); - } else { - face_helm_img.writeFile(outname, function(err) { - if (err) { - callback(err); - } else { - callback(null); - // JavaScript callback hell <3 - } - }); - } - }); - } + face_img.toBuffer("png", {compression: "none"}, function(err, face_buffer) { + skin_img.crop(40, 8, 47, 15, function(err, helm_img) { + if (err) { + callback(err); + } else { + face_img.paste(0, 0, helm_img, function(err, face_helm_img) { + if (err) { + callback(err); + } else { + face_helm_img.toBuffer("png", {compression: "none"}, function(err, face_helm_buffer) { + if (face_helm_buffer.toString() !== face_buffer.toString()) { + face_helm_img.writeFile(outname, function(err) { + callback(err); + }); + } else { + logging.log("Helm image is the same as face image, not storing!"); + callback(null); + } + }); + } + }); + } + }); }); } });