/* * grunt-notify * https://github.com/dylang/grunt-notify * * Copyright (c) 2013 Dylan Greene * Licensed under the MIT license. */ 'use strict'; var removeColor = require('./util/removeColor'); var debug = require('./util/debug'); // Don't show the same message twice in a row var previousMessage; var previousMessageTimeoutMS = 1000; var previousMessageTimer; var notifyPlatform; function choosePlatform() { var options = { debug: debug('grunt-notify')}; // This needs to be cleaned up to make it easier to add new platforms var growl_notify = require('./platforms/growl-notify'); if (growl_notify.supported(options)) { return growl_notify; } var hey_snarl = require('./platforms/hey-snarl'); if (hey_snarl.supported(options)) { return hey_snarl; } var notification_center = require('./platforms/notification-center'); if (notification_center.supported(options)) { return notification_center; } var notify_send = require('./platforms/notify-send'); if (notify_send.supported(options)) { return notify_send; } var toaster = require('./platforms/toaster'); if (toaster.supported(options)) { return toaster; } return require('./platforms/no-notifications'); } /** * Public function to notify * @param options - options.message is the only required value. title is recommended. subtitle is going overboard. * @param [cb] - optional callback. function(err, stdout, stderr) */ function postNotification(options, cb) { options.title = removeColor(options.title); options.message = removeColor(options.message); if (!options.message) { return cb && cb(!options.message && 'Message is required'); } if (!notifyPlatform) { notifyPlatform = choosePlatform(); } function resetPreviousTimer(newMessage) { previousMessage = newMessage; clearTimeout(previousMessageTimer); previousMessageTimer = setTimeout(function(){previousMessage = false;}, previousMessageTimeoutMS); } if (options.message === previousMessage) { resetPreviousTimer(options.message); if (typeof cb === 'function') { cb(); } return; } resetPreviousTimer(options.message); options.debug = debug(notifyPlatform.name); //for debug logging return notifyPlatform.notify(options, function(err){ if (err) { options.debug({ return_code: err }); } if (typeof cb === 'function') { cb(err); } }); } module.exports = postNotification;