growl.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /**
  2. * Wrapper for the growly module
  3. */
  4. var utils = require('../lib/utils'),
  5. checkGrowl = require('../lib/checkGrowl'),
  6. growly = require('growly'),
  7. cloneDeep = require('lodash.clonedeep');
  8. var EventEmitter = require('events').EventEmitter;
  9. var util = require('util');
  10. var errorMessageNotFound = 'Couldn\'t connect to growl (might be used as a fallback). Make sure it is running';
  11. module.exports = Growl;
  12. var hasGrowl = void 0;
  13. function Growl (options) {
  14. options = cloneDeep(options || {});
  15. if (!(this instanceof Growl)) {
  16. return new Growl(options);
  17. }
  18. growly.appname = options.name || 'Node';
  19. this.options = options;
  20. EventEmitter.call(this);
  21. }
  22. util.inherits(Growl, EventEmitter);
  23. Growl.prototype.notify = function (options, callback) {
  24. growly.setHost(this.options.host, this.options.port);
  25. options = cloneDeep(options || {});
  26. if (typeof options === 'string') options = {
  27. title: 'node-notifier',
  28. message: options
  29. };
  30. callback = utils.actionJackerDecorator(this, options, callback, function (data) {
  31. if (data === 'click') {
  32. return 'click';
  33. }
  34. if (data === 'timedout') {
  35. return 'timeout';
  36. }
  37. return false;
  38. });
  39. options = utils.mapToGrowl(options);
  40. if (!options.message) {
  41. callback(new Error('Message is required.'));
  42. return this;
  43. }
  44. options.title = options.title || 'Node Notification:';
  45. if (hasGrowl || !!options.wait) {
  46. var localCallback = !!options.wait ? callback : function () {};
  47. growly.notify(options.message, options, localCallback);
  48. if (!options.wait) callback();
  49. return this;
  50. }
  51. checkGrowl(growly, function (didHaveGrowl) {
  52. hasGrowl = didHaveGrowl;
  53. if (!didHaveGrowl) return callback(new Error(errorMessageNotFound));
  54. growly.notify(options.message, options);
  55. callback();
  56. });
  57. return this;
  58. };