diff --git a/lib/index.js b/lib/index.js index 9064046..ae44a18 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,11 +1,11 @@ -var Q = require('q'); +var debug = require('debug')('ylt:index'); +var Q = require('q'); -var Runner = require('./runner'); +var Runner = require('./runner'); +var ScreenshotHandler = require('./screenshotHandler'); var yellowLabTools = function(url, options) { - 'use strict'; - var deferred = Q.defer(); if (!url) { @@ -25,15 +25,52 @@ var yellowLabTools = function(url, options) { var runner = new Runner(params) - .progress(deferred.notify) + .progress(deferred.notify) - .then(function(data) { + .then(function(data) { + + // If a screenshot save function was provided in the options + if (typeof options.saveFile === 'function') { + debug('Now optimizing screenshot...'); + + // Remove uneeded temp screenshot path + delete data.params.options.screenshot; + + // Add the screenshot url instead + data.screenshotUrl = '/api/results/' + data.runId + '/screenshot.jpg'; + + // TODO: temporarily set all screenshot sizes to 600px, until we find a solution + ScreenshotHandler.findAndOptimizeScreenshot(600) + + .then(function(screenshotBuffer) { + debug('Screenshot optimized, now saving...'); + + return options.saveFile('screenshot.jpg', screenshotBuffer); + }) + + .then(function(response) { + debug('Screenshot saved'); + debug(response); + }) + + .catch(function(err) { + // It's ok if we can't save the screenshot + debug('Screenshot could not be saved'); + debug(err); + }) + + .finally(function() { + deferred.resolve(data); + }); + + } else { deferred.resolve(data); - }) + } + }) - .fail(function(err) { - deferred.reject(err); - }); + .catch(function(err) { + deferred.reject(err); + }); } return deferred.promise;