85 lines
1.7 KiB
JavaScript
85 lines
1.7 KiB
JavaScript
'use strict';
|
|
|
|
const EventEmitter = require('events'),
|
|
keypress = require('keypress');
|
|
|
|
class UI extends EventEmitter {
|
|
|
|
constructor(config) {
|
|
|
|
super();
|
|
|
|
this.touchThreshold = config.touchThreshold || 24;
|
|
this.releaseThreshold = config.releaseThreshold || 12;
|
|
|
|
if(process.platform == 'linux' && process.arch == 'arm')
|
|
this.mprInit();
|
|
|
|
this.keyboardInit();
|
|
|
|
}
|
|
|
|
keyboardInit() {
|
|
|
|
keypress(process.stdin);
|
|
|
|
process.stdin.on('keypress', (ch, key) => {
|
|
if(key && key.name == 'right') this.skip();
|
|
if(key && key.name == 'left') this.rewind();
|
|
if(key && key.name == 'up') this.volumeup();
|
|
if(key && key.name == 'down') this.volumedown();
|
|
if(key && key.name == 'space') this.pause();
|
|
if(key && key.name == 'i') this.interesting();
|
|
if(key && key.ctrl && key.name == 'c') process.exit();
|
|
});
|
|
|
|
process.stdin.setRawMode(true);
|
|
process.stdin.resume();
|
|
|
|
}
|
|
|
|
mprInit() {
|
|
|
|
const MPR121 = require('adafruit-mpr121'),
|
|
mpr121 = new MPR121(0x5A, 1);
|
|
|
|
mpr121.setThresholds(this.touchThreshold, this.releaseThreshold);
|
|
|
|
mpr121.on('touch', (pin) => {
|
|
if(pin === 0) this.skip();
|
|
if(pin === 1) this.pause();;
|
|
if(pin === 2) this.rewind();
|
|
if(pin === 3) this.interesting();
|
|
if(pin === 4) this.volumeup();
|
|
if(pin === 5) this.volumedown();
|
|
});
|
|
|
|
}
|
|
|
|
skip(pressed) {
|
|
this.emit('skip');
|
|
}
|
|
|
|
pause(pressed) {
|
|
this.emit('pause');
|
|
}
|
|
|
|
rewind(pressed) {
|
|
this.emit('rewind');
|
|
}
|
|
|
|
interesting(pressed) {
|
|
this.emit('interesting');
|
|
}
|
|
|
|
volumeup(pressed) {
|
|
this.emit('volumeup');
|
|
}
|
|
|
|
volumedown(pressed) {
|
|
this.emit('volumedown');
|
|
}
|
|
|
|
}
|
|
|
|
exports = module.exports = UI;
|