-
-
Notifications
You must be signed in to change notification settings - Fork 201
/
Copy pathNotificationProviderGrowl.js
88 lines (75 loc) · 1.8 KB
/
NotificationProviderGrowl.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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import NotificationProvider from "./NotificationProvider";
import growly from "growly";
import { main } from "config";
import { connect } from "net";
const { "display-name": displayName } = main;
const reClick = /^click(ed)?$/i;
const growlPorts = [
// default growl port
23053,
// growl-fork port
23052
];
export default class NotificationProviderGrowl extends NotificationProvider {
constructor( port ) {
super();
this.port = port;
}
static test() {
return growlPorts.reduce( ( chain, port ) => {
return chain.catch( () => NotificationProviderGrowl.checkConnection( port ) );
}, Promise.reject() )
.then( NotificationProviderGrowl.register );
}
static checkConnection( port ) {
return new Promise( ( resolve, reject ) => {
let socket = connect( port, "localhost" );
socket.setTimeout( 100 );
socket.on( "connect", () => {
socket.end();
resolve( port );
});
socket.on( "error", () => {
socket.end();
reject( new Error( "Could not connect to the growl server" ) );
});
});
}
static register( port ) {
return new Promise( ( resolve, reject ) => {
growly.register( displayName, "", [
{ label: displayName }
], err => {
if ( err ) {
reject( err );
} else {
resolve( port );
}
});
});
}
notify( data ) {
return new Promise( ( resolve, reject ) => {
growly.setHost( "localhost", this.port );
growly.notify( NotificationProvider.getMessageAsString( data.message ), {
title: data.title,
icon: data.icon,
label: displayName
}, ( err, action ) => {
if ( err ) {
reject( err );
} else {
if ( reClick.test( action ) && data.click ) {
data.click();
}
resolve();
}
});
});
}
}
NotificationProviderGrowl.platforms = {
win32: "rich",
darwin: "rich",
linux: "rich"
};