Blame view

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