You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
3.0 KiB
JavaScript
101 lines
3.0 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
import path from 'path'
|
|
import fs from 'fs'
|
|
import WebSocket from 'ws'
|
|
|
|
const identifier = 'de.lubiland.ts5.hotkeys'
|
|
|
|
const XDG_CONFIG_HOME = process.env.XDG_CONFIG_HOME ?? path.join(process.env.HOME, '.config')
|
|
const configDirectory = path.join(XDG_CONFIG_HOME, 'ts5-hotkeys')
|
|
const keyFile = path.join(configDirectory, 'apikey')
|
|
|
|
fs.readFile(keyFile, 'utf8', (err, data) => {
|
|
if (!err && data) {
|
|
// connect and authentiate with our existing API key
|
|
const apiKey = data
|
|
|
|
const ws = new WebSocket('ws://127.0.0.1:5899')
|
|
|
|
ws.onopen = event => {
|
|
console.log('Authenticating...')
|
|
ws.send(JSON.stringify(({
|
|
'type': 'auth',
|
|
'payload': {
|
|
'identifier': identifier,
|
|
'content': {
|
|
'apiKey': apiKey
|
|
}
|
|
}
|
|
})))
|
|
}
|
|
|
|
ws.onmessage = event => {
|
|
if (JSON.parse(event.data).type === 'auth') {
|
|
console.log('Triggering button event...')
|
|
|
|
const buttonName = process.argv[2]
|
|
|
|
let buttonEvent = {
|
|
"type": "buttonPress",
|
|
"payload": {
|
|
"button": buttonName
|
|
}
|
|
}
|
|
|
|
// send key-down and key-up event
|
|
buttonEvent.payload.state = true
|
|
console.log(buttonEvent)
|
|
ws.send(JSON.stringify(buttonEvent))
|
|
|
|
buttonEvent.payload.state = false
|
|
console.log(buttonEvent)
|
|
ws.send(JSON.stringify(buttonEvent))
|
|
|
|
|
|
ws.close()
|
|
}
|
|
}
|
|
} else {
|
|
// connect and do an initial app registration
|
|
const ws = new WebSocket('ws://127.0.0.1:5899')
|
|
|
|
ws.onopen = event => {
|
|
console.log('Registering app...')
|
|
ws.send(JSON.stringify(({
|
|
'type': 'auth',
|
|
'payload': {
|
|
'identifier': identifier,
|
|
'version': '0.0.1',
|
|
'name': 'External Hotkeys',
|
|
'description': 'External Hotkeys',
|
|
'content': {
|
|
'apiKey': ''
|
|
}
|
|
}
|
|
})))
|
|
}
|
|
|
|
ws.onmessage = event => {
|
|
if (JSON.parse(event.data).type === 'auth') {
|
|
const apiKey = JSON.parse(event.data).payload.apiKey
|
|
|
|
console.log('Writing API key...')
|
|
fs.mkdir(configDirectory, {recursive: true}, (err, path) => {
|
|
if (!err) {
|
|
fs.writeFile(keyFile, apiKey, err => {
|
|
if (err) {
|
|
throw err
|
|
}
|
|
})
|
|
} else if (err) {
|
|
throw err
|
|
}
|
|
})
|
|
|
|
ws.close()
|
|
}
|
|
}
|
|
}
|
|
})
|