103 lines
2.3 KiB
JavaScript
103 lines
2.3 KiB
JavaScript
"use strict";
|
|
|
|
var through = require('through2');
|
|
var report = require('./report');
|
|
var extra = require('./extra_api');
|
|
var notifier = require('node-notifier');
|
|
|
|
module.exports = function (options) {
|
|
var reporter;
|
|
var lastFile = null;
|
|
|
|
options = options || {};
|
|
var templateOptions = options.templateOptions || {};
|
|
|
|
if (options.notifier) {
|
|
reporter = options.notifier;
|
|
} else {
|
|
if (options.host || options.appName || options.port) {
|
|
notifier = new notifier.Notification({
|
|
host: options.host || 'localhost',
|
|
appName: options.appName || 'gulp-notify',
|
|
port: options.port || '23053'
|
|
});
|
|
}
|
|
reporter = notifier.notify.bind(notifier);
|
|
}
|
|
|
|
function notify (file, enc, callback) {
|
|
var stream = this;
|
|
|
|
report(reporter, file, options, templateOptions, function (err) {
|
|
logError(err, stream);
|
|
|
|
if (options.emitError) {
|
|
stream.push(file);
|
|
return callback();
|
|
}
|
|
});
|
|
|
|
if (!options.emitError) {
|
|
stream.push(file);
|
|
return callback();
|
|
}
|
|
}
|
|
|
|
if (!options.onLast) {
|
|
return through.obj(notify);
|
|
}
|
|
|
|
// Only send notification on the last file.
|
|
return through.obj(function (file, enc, callback) {
|
|
lastFile = file;
|
|
this.push(file);
|
|
callback();
|
|
}, function (callback) {
|
|
var stream = this;
|
|
|
|
if (!lastFile) {
|
|
return callback();
|
|
}
|
|
|
|
report(reporter, lastFile, options, templateOptions, function (err) {
|
|
logError(err, stream);
|
|
if (options.emitError) {
|
|
return callback();
|
|
}
|
|
});
|
|
|
|
lastFile = null; // reset
|
|
if (!options.emitError) {
|
|
return callback();
|
|
}
|
|
});
|
|
|
|
function logError (err, stream) {
|
|
if (!err) return;
|
|
|
|
var isGrowl = notifier && notifier instanceof notifier.Growl;
|
|
var isEcon = err.message.indexOf('ECONNREFUSED') !== -1;
|
|
var dropMessage = isGrowl && isEcon;
|
|
|
|
if (dropMessage) {
|
|
return extra.logError({
|
|
title: 'Info',
|
|
message: 'No notification system installed.'
|
|
});
|
|
}
|
|
|
|
if (options.emitError) return stream.emit('error', err);
|
|
|
|
extra.logError({
|
|
title: 'Error in notifier',
|
|
message: err
|
|
}, true);
|
|
}
|
|
};
|
|
|
|
module.exports.on = function (event, fn) {
|
|
if (!notifier) return;
|
|
return notifier.on(event, function (notifyObject, options) {
|
|
return fn(options);
|
|
});
|
|
};
|