-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathipcResponse.js
123 lines (114 loc) · 5.65 KB
/
ipcResponse.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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
const commands = ['userlogin', 'usergetstations', 'stationfetchplaylist', 'songstart', 'songfinish', 'defaultCommand', 'songlove'],
splitter = stdin => stdin.split("\n").map(str => str.split("=")).reduce((obj, [key, value]) => {
obj[key] = value
return obj
}, {})
function ipcResponse(globals) {
const { ipc, current, pastSongs, log, currentTime, isPlaying, spawnInstance, logger, response, notifier, pianobarLog } = globals, { config } = globals.config,
ipcResponse = {
cli: function ([command, stdin], socket) {
//log('command:', command)
if (commands.includes(command)) {
//console.log(command)
const status = splitter(stdin)
if (command == 'stationfetchplaylist' || command == 'usergetstations') {
//console.log(status)
}
current.push(status)
pastSongs.push(status)
const map = { songstart: 'nowPlaying', songlove: 'songLiked', userlogin: 'login' }
if (command in map && config.get('showNotifications')) {
const { notify, notificationTypes } = new notifier(globals)
notify(notificationTypes[map[command]]).catch(err => {})
}
//log(status)
} else {
console.log(command, "called with nothing to handle it")
//commands.defaultCommand(stdin)
}
},
getCurrentTime: function (command, socket) {
//log('got a request for current time')
ipc.server.emit(socket, 'getCurrentTime', currentTime.getNewest())
},
getStatus: function (command, socket) {
//log('got a request for current status')
ipc.server.emit(socket, 'getStatus', current.getNewest(command))
},
getAllStatus: function (command, socket) {
//log('got a request for current status')
ipc.server.emit(socket, 'getAllStatus', current.getAll())
},
connect: function (socket) {
pianobarLog.onpush(line => {
ipc.server.emit(socket, 'getLine', line)
ipc.server.emit(socket, 'getAllLines', pianobarLog.getAll())
})
},
disconnect: function (socket) {
ipc.server.emit(socket, 'killProcess')
},
quitPianobar: function (socket) {
response.writeCommand({ emit: ipc.server.emit.bind(ipc.server, socket) }, globals)('q')
},
sendLine: function (command, socket) {
response.writeCommand({ emit: ipc.server.emit.bind(ipc.server, socket) }, globals)(command)
},
getPastLines: function (amountOfLines = 1, socket) {
const lines = pianobarLog.getNewest(amountOfLines)
lines.reverse()
ipc.server.emit(socket, 'getPastLines', lines)
},
play: function (socket) {
response.play({ emit: ipc.server.emit.bind(ipc.server, socket) }, globals)()
},
pause: function (socket) {
response.pause({ emit: ipc.server.emit.bind(ipc.server, socket) }, globals)()
},
nextSong: function (socket) {
response.nextSong({ emit: ipc.server.emit.bind(ipc.server, socket) }, globals)(current.getNewest())
},
likeSong: function (socket) {
response.likeSong({ emit: ipc.server.emit.bind(ipc.server, socket) }, globals)(current.getNewest())
},
dislikeSong: function (socket) {
response.dislikeSong({ emit: ipc.server.emit.bind(ipc.server, socket) }, globals)(current.getNewest())
},
selectStation: function (command, socket) {
response.selectStation({ emit: ipc.server.emit.bind(ipc.server, socket) }, globals)(command)
},
shuffle: function (command, socket) {
response.shuffle({ emit: ipc.server.emit.bind(ipc.server, socket) }, globals)()
},
getPastSongs: function (command, socket) {
response.getPastSongs({ emit: ipc.server.emit.bind(ipc.server, socket) }, globals)(command)
},
getIsPlaying: function (command, socket) {
response.getisPlaying({ emit: ipc.server.emit.bind(ipc.server, socket) }, globals)()
},
get: function (commandsToGet, socket) {
Promise.all(commandsToGet.map(({ name, args }) => {
//console.log(commandsToGet)
return new Promise((resolve, reject) => {
const time = setTimeout(() => { resolve('timed out') }, 200)
if (!response[name]) {
resolve(name + 'is not a function on response')
return
}
const func = response[name]({
emit: function () {
clearTimeout(time)
resolve(Array.from(arguments))
}
}, globals)
func.apply(null, args)
})
})).then(responses => {
//console.log(JSON.stringify(responses))
ipc.server.emit(socket, 'get', responses)
})
}
}
return ipcResponse
}
module.exports = ipcResponse