@@ -3,6 +3,7 @@ module.exports = function(RED) {
3
3
"use strict" ;
4
4
var PushOver = require ( 'pushover-notifications' ) ;
5
5
var util = require ( 'util' ) ;
6
+ var fs = require ( 'fs' ) ;
6
7
7
8
function PushoverNode ( n ) {
8
9
RED . nodes . createNode ( this , n ) ;
@@ -30,13 +31,14 @@ module.exports = function(RED) {
30
31
var node = this ;
31
32
32
33
this . on ( "input" , function ( msg ) {
33
- var titl = this . title || msg . topic || "Node-RED" ;
34
- var pri = this . priority || msg . priority || 0 ;
35
- var dev = this . device || msg . device ;
36
- var sound = this . sound || msg . sound || null ;
37
- var url = this . url || msg . url || null ;
38
- var url_title = this . url_title || msg . url_title || null ;
39
- var html = this . html || false ;
34
+ var title = node . title || msg . topic || "Node-RED" ;
35
+ var pri = node . priority || msg . priority || 0 ;
36
+ var dev = node . device || msg . device ;
37
+ var sound = node . sound || msg . sound || null ;
38
+ var url = node . url || msg . url || null ;
39
+ var url_title = node . url_title || msg . url_title || null ;
40
+ var html = node . html || false ;
41
+ var attachment = msg . attachment || null ;
40
42
if ( isNaN ( pri ) ) { pri = 0 ; }
41
43
if ( pri > 2 ) { pri = 2 ; }
42
44
if ( pri < - 2 ) { pri = - 2 ; }
@@ -47,7 +49,7 @@ module.exports = function(RED) {
47
49
if ( pusher ) {
48
50
var pushmsg = {
49
51
message : msg . payload ,
50
- title : titl ,
52
+ title : title ,
51
53
priority : pri ,
52
54
retry : 30 ,
53
55
expire : 600 ,
@@ -58,16 +60,50 @@ module.exports = function(RED) {
58
60
if ( typeof ( url ) === 'string' ) { pushmsg . url = url ; }
59
61
if ( typeof ( url_title ) === 'string' ) { pushmsg . url_title = url_title ; }
60
62
if ( html ) { pushmsg . html = 1 ; }
61
- //node.log("Sending "+JSON.stringify(pushmsg));
62
- pusher . send ( pushmsg , function ( err , response ) {
63
- if ( err ) { node . error ( "Pushover Error: " + err ) ; }
64
- //console.log(response);
65
- } ) ;
63
+ if ( typeof ( attachment ) === 'string' ) {
64
+ // Treat attachment as a path
65
+ fs . readFile ( attachment , function ( err , data ) {
66
+ if ( err ) {
67
+ node . error ( "[57-pushover.js] Error: File Read Error: " + err ) ;
68
+ return ;
69
+ }
70
+ pushmsg . file = { data : data } ;
71
+ pushMessage ( pushmsg ) ;
72
+ } ) ;
73
+ return ;
74
+ }
75
+ else if ( attachment instanceof Buffer ) {
76
+ // Is it base64 encoded or binary?
77
+ var attachmentString = attachment . toString ( ) ;
78
+ var attachmentBuffer = Buffer . from ( attachmentString , 'base64' ) ;
79
+ if ( attachmentString === attachmentBuffer . toString ( 'base64' ) ) {
80
+ // If converts back to same, then it was base64 so set to binary
81
+ // https://stackoverflow.com/a/48770228
82
+ attachment = attachmentBuffer ;
83
+ }
84
+ // Unset these temporary values
85
+ attachmentBuffer = attachmentString = undefined ;
86
+ // attach the buffer
87
+ pushmsg . file = { data : attachment } ;
88
+ }
89
+ else if ( attachment ) {
90
+ node . error ( "[57-pushover.js] Error: attachment property must be a path to a local file or a Buffer containing an image" ) ;
91
+ return ;
92
+ }
93
+ pushMessage ( pushmsg ) ;
66
94
}
67
95
else {
68
96
node . warn ( "Pushover credentials not set." ) ;
69
97
}
70
98
} ) ;
99
+
100
+ function pushMessage ( pushmsg ) {
101
+ pusher . send ( pushmsg , function ( err , response ) {
102
+ if ( err ) { node . error ( "[57-pushover.js] Error: " + err ) ; }
103
+ response = JSON . parse ( response ) ;
104
+ if ( response . status !== 1 ) { node . error ( "[57-pushover.js] Error: " + response ) ; }
105
+ } ) ;
106
+ }
71
107
}
72
108
RED . nodes . registerType ( "pushover" , PushoverNode , {
73
109
credentials : {
0 commit comments