Browse Source

Don't store helm image when user has no helm, fix #16

jomo 10 years ago
parent
commit
040aeb1c0c
2 changed files with 33 additions and 21 deletions
  1. 7 1
      modules/helpers.js
  2. 26 20
      modules/skins.js

+ 7 - 1
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);

+ 26 - 20
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);
+                      }
+                    });
+                  }
+                });
+              }
+            });
           });
         }
       });