toaster.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /**
  2. * Wrapper for the toaster (https://github.com/nels-o/toaster)
  3. */
  4. var path = require('path'),
  5. notifier = path.resolve(__dirname, '../vendor/toaster/toast.exe'),
  6. utils = require('../lib/utils'),
  7. Balloon = require('./balloon'),
  8. cloneDeep = require('lodash.clonedeep');
  9. var EventEmitter = require('events').EventEmitter;
  10. var util = require('util');
  11. var fallback = void 0;
  12. module.exports = WindowsToaster;
  13. function WindowsToaster (options) {
  14. options = cloneDeep(options || {});
  15. if (!(this instanceof WindowsToaster)) {
  16. return new WindowsToaster(options);
  17. }
  18. this.options = options;
  19. EventEmitter.call(this);
  20. }
  21. util.inherits(WindowsToaster, EventEmitter);
  22. WindowsToaster.prototype.notify = function (options, callback) {
  23. options = cloneDeep(options || {});
  24. callback = callback || function () {};
  25. if (typeof options === 'string') options = {
  26. title: 'node-notifier',
  27. message: options
  28. };
  29. var actionJackedCallback = utils.actionJackerDecorator(this, options, callback, function (data) {
  30. if (data === 'activate') {
  31. return 'click';
  32. }
  33. if (data === 'timeout') {
  34. return 'timeout';
  35. }
  36. return false;
  37. });
  38. options.title = options.title || 'Node Notification:';
  39. if (!options.message) {
  40. callback(new Error('Message is required.'));
  41. return this;
  42. }
  43. if (!utils.isWin8() && !!this.options.withFallback) {
  44. fallback = fallback || new Balloon(this.options);
  45. return fallback.notify(options, callback);
  46. }
  47. options = utils.mapToWin8(options);
  48. var argsList = utils.constructArgumentList(options, {
  49. wrapper: '',
  50. noEscape: true
  51. });
  52. utils.fileCommand(this.options.customPath || notifier, argsList, actionJackedCallback);
  53. return this;
  54. };