diff --git a/modules/helpers.js b/modules/helpers.js index 515a9e1..35990da 100644 --- a/modules/helpers.js +++ b/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 diff --git a/modules/networking.js b/modules/networking.js index d4f6842..17d0690 100644 --- a/modules/networking.js +++ b/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) { diff --git a/modules/skins.js b/modules/skins.js index 1e99c8d..8917a22 100644 --- a/modules/skins.js +++ b/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); + }); + } }); }; diff --git a/routes/avatars.js b/routes/avatars.js index 9f98ced..a4693ff 100644 --- a/routes/avatars.js +++ b/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") {