123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- "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);
- });
- };
|