Browse Source

Save screenshot when called with a saveFile option

Gaël Métais 4 năm trước cách đây
mục cha
commit
e0d497796a
1 tập tin đã thay đổi với 47 bổ sung10 xóa
  1. 47 10
      lib/index.js

+ 47 - 10
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) {
+
+            // 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);
+                });
 
-            .then(function(data) {
+            } else {
                 deferred.resolve(data);
-            })
+            }
+        })
 
-            .fail(function(err) {
-                deferred.reject(err);
-            });
+        .catch(function(err) {
+            deferred.reject(err);
+        });
     }
 
     return deferred.promise;