backoffice/node_modules/grunt-notify/lib/platforms/notification-center.js

79 lines
1.7 KiB
JavaScript

/*
* grunt-notify
* https://github.com/dylang/grunt-notify
*
* Copyright (c) 2013 Dylan Greene
* Licensed under the MIT license.
*/
'use strict';
var NOTIFY_TYPE = 'notification-center';
var spawn = require('../util/spawn');
var path = require('path');
var os = require('os');
var semver = require('semver');
// OSX notification system doesn't have an API Node can access so we are using
// Grunt.app, a modified version of Terminal Notifier, but with the Grunt icon,
// originally created by Eloy Durán https://github.com/alloy/terminal-notifier
var cmd = path.resolve(__dirname, '../../bin/Grunt.app/Contents/MacOS/Grunt');
function notificationCenterSupported(options) {
var IS_MAC = os.type() === 'Darwin';
var MOUNTAIN_LION;
try {
MOUNTAIN_LION = IS_MAC && semver.satisfies(os.release(), '>=12.0.0');
} catch (e) {
options.debug({semverError: e });
}
options.debug({
os: os.type(),
version: os.release(),
IS_MAC: IS_MAC,
MOUNTAIN_LION: MOUNTAIN_LION,
notification_center: MOUNTAIN_LION ? 'Will use Notification Center' : 'Not available for your OS.'
});
return IS_MAC && MOUNTAIN_LION;
}
function pluckAsArg(options, prop) {
if (options[prop]) {
return [
'-' + prop,
options[prop]
];
}
return [];
}
function notify(options, cb) {
var args = []
.concat(pluckAsArg(options, 'title'))
.concat(pluckAsArg(options, 'message'));
options.debug({
cmd: cmd,
args: args.join(' ')
});
spawn(cmd, args, function(code) {
if (code !== 0) {
cb(code);
} else {
cb();
}
});
}
module.exports = {
name: NOTIFY_TYPE,
notify: notify,
supported: notificationCenterSupported
};