mirror of
https://github.com/idanoo/GoScrobble.git
synced 2024-11-24 09:25:15 +00:00
84 lines
1.9 KiB
JavaScript
84 lines
1.9 KiB
JavaScript
/**
|
|
* 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;
|
|
|
|
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);
|
|
|
|
function notifyRaw(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;
|
|
}
|
|
|
|
Object.defineProperty(Growl.prototype, 'notify', {
|
|
get: function() {
|
|
if (!this._notify) this._notify = notifyRaw.bind(this);
|
|
return this._notify;
|
|
}
|
|
});
|
|
|
|
function noop() {}
|