Blame view

node_modules/node-notifier/notifiers/notifysend.js 2.14 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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
  /**
   * Node.js wrapper for "notify-send".
   */
  var os = require('os');
  var which = require('which');
  var utils = require('../lib/utils');
  
  var EventEmitter = require('events').EventEmitter;
  var util = require('util');
  
  var notifier = 'notify-send';
  var hasNotifier = void 0;
  
  module.exports = NotifySend;
  
  function NotifySend(options) {
    options = utils.clone(options || {});
    if (!(this instanceof NotifySend)) {
      return new NotifySend(options);
    }
  
    this.options = options;
  
    EventEmitter.call(this);
  }
  util.inherits(NotifySend, EventEmitter);
  
  function noop() {}
  NotifySend.prototype.notify = function(options, callback) {
    options = utils.clone(options || {});
    callback = callback || noop;
  
    if (typeof callback !== 'function') {
      throw new TypeError(
        'The second argument must be a function callback. You have passed ' +
          typeof callback
      );
    }
  
    if (typeof options === 'string') {
      options = { title: 'node-notifier', message: options };
    }
  
    if (!options.message) {
      callback(new Error('Message is required.'));
      return this;
    }
  
    if (os.type() !== 'Linux' && !os.type().match(/BSD$/)) {
      callback(new Error('Only supported on Linux and *BSD systems'));
      return this;
    }
  
    if (hasNotifier === false) {
      callback(new Error('notify-send must be installed on the system.'));
      return this;
    }
  
    if (hasNotifier || !!this.options.suppressOsdCheck) {
      doNotification(options, callback);
      return this;
    }
  
    try {
      hasNotifier = !!which.sync(notifier);
      doNotification(options, callback);
    } catch (err) {
      hasNotifier = false;
      return callback(err);
    }
  
    return this;
  };
  
  var allowedArguments = ['urgency', 'expire-time', 'icon', 'category', 'hint'];
  
  function doNotification(options, callback) {
    var initial, argsList;
  
    options = utils.mapToNotifySend(options);
    options.title = options.title || 'Node Notification:';
  
    initial = [options.title, options.message];
    delete options.title;
    delete options.message;
  
    argsList = utils.constructArgumentList(options, {
      initial: initial,
      keyExtra: '-',
      allowedArguments: allowedArguments
    });
  
    utils.command(notifier, argsList, callback);
  }