diff --git a/build/browser/app.js b/build/browser/app.js index ed79871c..31fa1ef9 100644 --- a/build/browser/app.js +++ b/build/browser/app.js @@ -117,6 +117,7 @@ app.controller('AppController', function($q, DriveScannerService, SelectionState var angular = require('angular'); var _ = require('lodash'); +var EventEmitter = require('events').EventEmitter; var remote = window.require('remote'); if (window.mocha) { @@ -247,15 +248,32 @@ driveScanner.service('DriveScannerService', function($q, DriveScannerRefreshServ * @function * @public * + * @description + * This function returns an event emitter instance + * that emits a `scan` event everything it scans + * the drives successfully. + * * @param {Number} ms - interval milliseconds + * @returns {EventEmitter} event emitter instance * * @example - * DriveScannerService.start(2000); + * var emitter = DriveScannerService.start(2000); + * + * emitter.on('scan', function(drives) { + * console.log(drives); + * }); */ this.start = function(ms) { + var emitter = new EventEmitter(); + DriveScannerRefreshService.every(function() { - return self.scan().then(self.setDrives); + return self.scan().then(function(drives) { + emitter.emit('scan', drives); + self.setDrives(drives); + }); }, ms); + + return emitter; }; /** diff --git a/lib/browser/modules/drive-scanner.js b/lib/browser/modules/drive-scanner.js index 549a4bcb..bd3b6763 100644 --- a/lib/browser/modules/drive-scanner.js +++ b/lib/browser/modules/drive-scanner.js @@ -20,6 +20,7 @@ var angular = require('angular'); var _ = require('lodash'); +var EventEmitter = require('events').EventEmitter; var remote = window.require('remote'); if (window.mocha) { @@ -150,15 +151,32 @@ driveScanner.service('DriveScannerService', function($q, DriveScannerRefreshServ * @function * @public * + * @description + * This function returns an event emitter instance + * that emits a `scan` event everything it scans + * the drives successfully. + * * @param {Number} ms - interval milliseconds + * @returns {EventEmitter} event emitter instance * * @example - * DriveScannerService.start(2000); + * var emitter = DriveScannerService.start(2000); + * + * emitter.on('scan', function(drives) { + * console.log(drives); + * }); */ this.start = function(ms) { + var emitter = new EventEmitter(); + DriveScannerRefreshService.every(function() { - return self.scan().then(self.setDrives); + return self.scan().then(function(drives) { + emitter.emit('scan', drives); + self.setDrives(drives); + }); }, ms); + + return emitter; }; /** diff --git a/tests/browser/modules/drive-scanner.spec.js b/tests/browser/modules/drive-scanner.spec.js index 2d2cedeb..8f4c1dc4 100644 --- a/tests/browser/modules/drive-scanner.spec.js +++ b/tests/browser/modules/drive-scanner.spec.js @@ -181,6 +181,21 @@ describe('Browser: DriveScanner', function() { DriveScannerService.stop(); }); + describe('.start()', function() { + + it('should emit a `scan` event with the drives', function() { + var emitter = DriveScannerService.start(2000); + var scanSpy = m.sinon.spy(); + emitter.on('scan', scanSpy); + $timeout.flush(); + $interval.flush(1000); + m.chai.expect(scanSpy).to.have.been.calledOnce; + m.chai.expect(scanSpy).to.have.been.calledWith(this.drives); + DriveScannerService.stop(); + }); + + }); + }); });