forked from sebseb7/cryptonote-proxy
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathpushnotify.js
71 lines (65 loc) · 2.61 KB
/
pushnotify.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
'use strict'
const pushbullet = require('pushbullet');
class pushnotify {
/**
* @param {string} apiTokenString
* @param {number} [maxMessagesPerTimeFrame]
* @param {number} [timeFrameMinutes]
*/
constructor(apiTokenString, MaxMessagesPerTimeFrame = 0, TimeFrameMinutes = 60) {
/* type pushbullet */
this.pusher = null;
this.apiToken = apiTokenString;
/**
* @type string[]
*/
this.messages = [];
this.pushrestricttimeout = null;
this.maxMessagesPerTimeFrame = (TimeFrameMinutes) ? MaxMessagesPerTimeFrame : 0;
this.messagesentduringtimeframe = 0;
this.timeFrameMins = TimeFrameMinutes;
}
/**
* @param {string} title
* @param {string} message
*/
pushnote(title, message) {
if (!this.pusher) return;
if (this.pushrestricttimeout == null || this.messagesentduringtimeframe < this.maxMessagesPerTimeFrame) {
this.pusher.note({}, title, message, (error, response) => {if(error) console.log(`Pushbullet API: ${error}`)});
if (this.maxMessagesPerTimeFrame) {
++this.messagesentduringtimeframe;
this.pushrestricttimeout = this.pushrestricttimeout || setTimeout(() => this.pushAllQueuedMessages(), this.timeFrameMins * 60 * 1000);
}
} else {
this.messages.push({ "title": title, "body": message });
}
}
/**
* @param {string} title
* @param {string} message
*/
warn(title, message) {
if(this.pusher) {
this.pusher.note({}, title, message, (error, response) => {if(error) console.log(`Pushbullet API: ${error}`)});
}
}
pushAllQueuedMessages() {
this.pushrestricttimeout = null;
if(this.messages.length == 0) {
this.messagesentduringtimeframe = 0;
return;
}
let message, combinedMessage = "", messageCount = this.messages.length, title = `${this.messages.length} message${messageCount > 1 ? "s" : ""} since last notification`;
while(message = this.messages.shift())
combinedMessage += message.title + "\n" + message.body +"\n\n";
this.pusher.note({}, title, combinedMessage, (error, response) => {if(error) console.log(`Pushbullet API: ${error}`)});
this.messagesentduringtimeframe = 1;
}
get apiToken() {return this._apiToken;}
/**
* @param {string} [token]
*/
set apiToken(token) {this.pusher = (token && this.apiToken !== token) ? new pushbullet(token) : (token) ? this.pusher : null; this._apiToken = token;}
}
module.exports = pushnotify;