jomo пре 10 година
родитељ
комит
d84d55f533
4 измењених фајлова са 60 додато и 34 уклоњено
  1. 17 8
      modules/helpers.js
  2. 3 3
      modules/networking.js
  3. 23 13
      modules/skins.js
  4. 17 10
      routes/avatars.js

+ 17 - 8
modules/helpers.js

@@ -36,29 +36,38 @@ exp.uuid_valid = function(uuid) {
 //   error, status, image buffer
 //
 // the status gives information about how the image was received
-//  -1: profile requested, but it was not found
+//  -1: error
 //   1: found on disk
 //   2: profile requested/found, skin downloaded from mojang servers
 //   3: profile requested/found, but it has no skin
 exp.get_avatar = function(uuid, size, callback) {
   var filepath = config.skins_dir + uuid + ".png";
   if (fs.existsSync(filepath)) {
-    skins.resize_img(filepath, size, function(result) {
-      callback(null, 1, result);
+    skins.resize_img(filepath, size, function(err, result) {
+      callback(err, 1, result);
     });
   } else {
     networking.get_profile(uuid, function(err, profile) {
       if (err) {
         callback(err, -1, profile);
+        return;
       }
       var skinurl = exp.skin_url(profile);
 
       if (skinurl) {
-        networking.skin_file(skinurl, filepath, function() {
-          console.log('got skin');
-          skins.resize_img(filepath, size, function(result) {
-            callback(null, 2, result);
-          });
+        networking.skin_file(skinurl, filepath, function(err) {
+          if (err) {
+            callback(err, -1, null);
+          } else {
+            console.log('got skin');
+            skins.resize_img(filepath, size, function(err, result) {
+              if (err) {
+                callback(err, -1, null);
+              } else {
+                callback(null, 2, result);
+              }
+            });
+          }
         });
       } else {
         // profile found, but has no skin

+ 3 - 3
modules/networking.js

@@ -40,12 +40,12 @@ exp.skin_file = function(url, outname, callback) {
     timeout: config.http_timeout // ms
   }, function (error, response, body) {
     if (!error && response.statusCode == 200) {
-      skins.extract_face(body, outname, function() {
-        callback();
+      skins.extract_face(body, outname, function(err) {
+        callback(err);
       });
     } else {
       if (error) {
-        console.error(error);
+        console.error("Error downloading '" + url + "': " + error);
       } else if (response.statusCode == 404) {
         console.warn("Texture not found: " + url);
       } else if (response.statusCode == 429) {

+ 23 - 13
modules/skins.js

@@ -4,15 +4,22 @@ var exp = {};
 
 // extracts the face from an image +buffer+
 // save it to a file called +outname+
+// callback has an error parameter which can be null
 exp.extract_face = function(buffer, outname, callback) {
   lwip.open(buffer, "png", function(err, image) {
-    if (err) throw err;
-    image.batch()
-    .crop(8, 8, 15, 15)
-    .writeFile(outname, function(err) {
-      if (err) throw err;
-      callback();
-    });
+    if (err) {
+      callback(err);
+    } else {
+      image.batch()
+      .crop(8, 8, 15, 15)
+      .writeFile(outname, function(err) {
+        if (err) {
+          callback(err);
+        } else {
+          callback(null);
+        }
+      });
+    }
   });
 };
 
@@ -20,12 +27,15 @@ exp.extract_face = function(buffer, outname, callback) {
 // +callback+ is a buffer of the resized image
 exp.resize_img = function(inname, size, callback) {
   lwip.open(inname, function(err, image) {
-    if (err) throw err;
-    image.batch()
-    .resize(size, size, "nearest-neighbor") // nearest-neighbor doesn't blur
-    .toBuffer('png', function(err, buffer) {
-      callback(buffer);
-    });
+    if (err) {
+      callback(err, null);
+    } else {
+      image.batch()
+      .resize(size, size, "nearest-neighbor") // nearest-neighbor doesn't blur
+      .toBuffer('png', function(err, buffer) {
+        callback(null, buffer);
+      });
+    }
   });
 };
 

+ 17 - 10
routes/avatars.js

@@ -23,16 +23,23 @@ router.get('/:uuid/:size?', function(req, res) {
     return;
   }
 
-  helpers.get_avatar(uuid, size, function(err, status, image) {
-    if (err) {
-      throw err;
-    } else if (status == 1 || status == 2) {
-      var time = new Date() - start;
-      sendimage(200, time, image);
-    } else if (status == 3) {
-      handle_404(def);
-    }
-  });
+  try {
+    helpers.get_avatar(uuid, size, function(err, status, image) {
+      if (err) {
+        console.error(err);
+        handle_404(def);
+      } else if (status == 1 || status == 2) {
+        var time = new Date() - start;
+        sendimage(200, time, image);
+      } else if (status == 3) {
+        handle_404(def);
+      }
+    });
+  } catch(e) {
+    console.error("Error!");
+    console.error(e);
+    res.status(500).send("500 Internal server error");
+  }
 
   function handle_404(def) {
     if (def == "alex" || def == "steve") {