This repository was archived by the owner on Dec 17, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathControllerKeyboard.js
98 lines (81 loc) · 2.84 KB
/
ControllerKeyboard.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
import debug from 'debug'
import { EventEmitter } from 'inf-ee'
import { clipboard, keyboard, Key } from '@nut-tree/nut-js'
import { asArray } from './utils.js'
const log = debug('sio:keyboard')
export class ControllerKeyboard extends EventEmitter {
constructor(options = {}) {
super()
console.log('Constructing Keyboard Controller')
this._config = options.config || {}
this.componentName = 'Keyboard Controller'
}
async connect(options = {}) {
this._config = options.config || {}
// Keyboard.nativeAdapter.keyboard.setKeyboardDelay(0)
// keyboard.config.autoDelayMs = 0
this.emit('connected')
}
disconnect() {
this.emit('disconnect')
}
fire(keys) {
keys = asArray(keys).map((key) => this.mapKey(key))
for (const key of keys) {
if (!key.keyCode || !Number.isInteger(key.keyCode, 10)) {
this.log('error', `Keyboard Combination Contains undefined or not a number: ${key.keyName} = ${key.keyCode}`)
return
}
}
console.log(keys)
this.log('info', 'Sending Keyboard Shortcut:', keys.map((key) => key.keyName).join(' + '))
return keyboard.type(...keys.map((key) => key.keyCode))
}
pressKey(keys) {
keys = asArray(keys).map((key) => this.mapKey(key))
for (const key of keys) {
if (!key.keyCode || !Number.isInteger(key.keyCode, 10)) {
this.log('error', `Keyboard Combination Contains undefined or not a number: ${key.keyName} = ${key.keyCode}`)
return
}
}
this.log('info', 'Pressing Keyboard Shortcut:', keys.map((key) => key.keyName).join(' + '))
return keyboard.pressKey(...keys.map((key) => key.keyCode))
}
releaseKey(keys) {
keys = asArray(keys).map((key) => this.mapKey(key))
for (const key of keys) {
if (!key.keyCode || !Number.isInteger(key.keyCode, 10)) {
this.log('error', `Keyboard Combination Contains undefined or not a number: ${key.keyName} = ${key.keyCode}`)
return
}
}
this.log('info', 'Releaseing Keyboard Shortcut:', keys.map((key) => key.keyName).join(' + '))
return keyboard.releaseKey(...keys.map((key) => key.keyCode))
}
typeViaKeyboard(text) {
this.log('info', `Typing via Keyboard: ${text}`)
return keyboard.type(text)
}
typeViaClipboard(text) {
clipboard.copy(text)
this.log('info', `Type via Clipboard: ${text}`)
return this.fire([Key.LeftSuper, Key.V])
}
type(text) {
return this.typeViaClipboard(text)
}
mapKey(key) {
key = key.length === 1 ? key.toUpperCase() : key
return {
key,
keyName: Number.isInteger(key) ? Key[`${key}`] : key,
keyCode: Number.isInteger(key) ? key : Key[key],
}
}
log(level, ...args) {
this.emit('log', { component: this.componentName, level: level.toLowerCase(), message: args })
log(`${level}: ${args.join(' ')}`)
}
}
export default ControllerKeyboard