Initial commit
This commit is contained in:
732
Backend/dist/Decks/Deck.js
vendored
Normal file
732
Backend/dist/Decks/Deck.js
vendored
Normal file
@@ -0,0 +1,732 @@
|
||||
exports.__esModule = true;
|
||||
exports.Deck = void 0;
|
||||
var StreamDeck = require("@elgato-stream-deck/node");
|
||||
var Jimp = require("jimp");
|
||||
var canvas_1 = require("canvas");
|
||||
var path = require("path");
|
||||
var Logger_1 = require("../Logger");
|
||||
canvas_1.registerFont(path.join(__filename, '..', '..', '..', '..', 'Static', 'font', 'Montserrat-ExtraLight.ttf'), {
|
||||
family: 'Montserrat',
|
||||
weight: '200'
|
||||
});
|
||||
canvas_1.registerFont(path.join(__filename, '..', '..', '..', '..', 'Static', 'font', 'Montserrat-Light.ttf'), {
|
||||
family: 'Montserrat',
|
||||
weight: '300'
|
||||
});
|
||||
canvas_1.registerFont(path.join(__filename, '..', '..', '..', '..', 'Static', 'font', 'Montserrat-Regular.ttf'), {
|
||||
family: 'Montserrat',
|
||||
weight: '400'
|
||||
});
|
||||
canvas_1.registerFont(path.join(__filename, '..', '..', '..', '..', 'Static', 'font', 'Montserrat-Medium.ttf'), {
|
||||
family: 'Montserrat',
|
||||
weight: '500'
|
||||
});
|
||||
canvas_1.registerFont(path.join(__filename, '..', '..', '..', '..', 'Static', 'font', 'Montserrat-SemiBold.ttf'), {
|
||||
family: 'Montserrat',
|
||||
weight: '600'
|
||||
});
|
||||
canvas_1.registerFont(path.join(__filename, '..', '..', '..', '..', 'Static', 'font', 'Montserrat-Bold.ttf'), {
|
||||
family: 'Montserrat',
|
||||
weight: '700'
|
||||
});
|
||||
canvas_1.registerFont(path.join(__filename, '..', '..', '..', '..', 'Static', 'font', 'Montserrat-ExtraBold.ttf'), {
|
||||
family: 'Montserrat',
|
||||
weight: '800'
|
||||
});
|
||||
var Deck = /** @class */ (function () {
|
||||
function Deck(settings, devicePath) {
|
||||
this.setDevicePath(devicePath);
|
||||
this.online = false;
|
||||
this.ready = false;
|
||||
this.name = settings.name;
|
||||
this.serialNumber = settings.serialNumber;
|
||||
this.model = settings.model;
|
||||
this.pageIndex = 0;
|
||||
this.captures = {
|
||||
confirm: {
|
||||
enabled: false,
|
||||
callback: null,
|
||||
callbacktriggers: []
|
||||
}
|
||||
};
|
||||
}
|
||||
Deck.prototype["export"] = function () {
|
||||
return {
|
||||
name: this.name,
|
||||
serialNumber: this.serialNumber,
|
||||
model: this.model
|
||||
};
|
||||
};
|
||||
Deck.prototype.init = function () {
|
||||
var _this = this;
|
||||
if (this.online) {
|
||||
this.columns = this.Deck.KEY_COLUMNS;
|
||||
this.rows = this.Deck.KEY_ROWS;
|
||||
this.keys = this.columns * this.rows;
|
||||
this.iconsize = this.Deck.ICON_SIZE;
|
||||
this.fill({ appearence: { background: { color: '#ffffff' } } });
|
||||
setTimeout(function () {
|
||||
_this.Deck.clearPanel();
|
||||
setTimeout(function () {
|
||||
var coords = _this.getWaveCoords();
|
||||
for (var i = 0; i < coords.length; i++)
|
||||
_this.setKey(coords[i][0], coords[i][1], {
|
||||
appearence: {
|
||||
image: {
|
||||
address: path.join(__filename, '..', '..', '..', '..', 'Static', 'logo', 'single.png'),
|
||||
size: 100,
|
||||
offsetX: 0,
|
||||
offsetY: 0,
|
||||
rotation: 0
|
||||
}
|
||||
}
|
||||
}, coords[i][2]);
|
||||
setTimeout(function () {
|
||||
var coords = _this.getWaveCoords();
|
||||
for (var i = 0; i < coords.length; i++)
|
||||
_this.setKey(coords[i][0], coords[i][1], {
|
||||
state: {
|
||||
type: 'empty',
|
||||
toggle: false,
|
||||
confirm: false
|
||||
},
|
||||
appearence: {}
|
||||
}, coords[i][2]);
|
||||
setTimeout(function () {
|
||||
var fadeCounter = 100;
|
||||
var fadeInterval = setInterval(function () {
|
||||
_this.Deck.setBrightness(fadeCounter);
|
||||
if (fadeCounter > 0)
|
||||
fadeCounter--;
|
||||
else {
|
||||
clearInterval(fadeInterval);
|
||||
_this.ready = true;
|
||||
Logger_1.Log('info', "Deck " + _this.name + " is ready for rendering");
|
||||
_this.updateAll();
|
||||
fadeInterval = setInterval(function () {
|
||||
_this.Deck.setBrightness(fadeCounter);
|
||||
if (fadeCounter < 100)
|
||||
fadeCounter++;
|
||||
else {
|
||||
clearInterval(fadeInterval);
|
||||
}
|
||||
}, 10);
|
||||
}
|
||||
}, 10);
|
||||
}, 1000);
|
||||
}, 1000);
|
||||
}, 1000);
|
||||
}, 300);
|
||||
}
|
||||
};
|
||||
Deck.prototype.setDevicePath = function (path) {
|
||||
var _this = this;
|
||||
if (path) {
|
||||
this.Deck = StreamDeck.openStreamDeck(path);
|
||||
this.listeners();
|
||||
this.online = true;
|
||||
this.Deck.on('error', function (error) {
|
||||
console.error("Deck:" + _this.name, error);
|
||||
_this.online = false;
|
||||
});
|
||||
this.init();
|
||||
}
|
||||
};
|
||||
Deck.prototype.handleKeyEvent = function (triggerKey, event) {
|
||||
var _this = this;
|
||||
var instance = this;
|
||||
var handleEvent = function (key) {
|
||||
switch (key.state.type) {
|
||||
case 'custom':
|
||||
if (key.state.toggle == false) {
|
||||
if (key.state.confirm == false) {
|
||||
if (key.actions != undefined && key.actions[event] != undefined) {
|
||||
Undecked.Integrations.executeActions(key.actions[event], instance);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (event == 'up')
|
||||
_this.showConfirm(function (result) {
|
||||
if (result == true) {
|
||||
if (key.actions != undefined && key.actions.up != undefined)
|
||||
Undecked.Integrations.executeActions(key.actions.up, instance);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (event == 'up') {
|
||||
//When latched = true & When unlatch = false
|
||||
var state = false;
|
||||
if (key._internal != undefined && key._internal._toggle != undefined)
|
||||
state = key._internal._toggle;
|
||||
var location = Undecked.Pages.KeyManager.getLocation(key.id);
|
||||
if (location) {
|
||||
var handle = function () {
|
||||
Undecked.Pages
|
||||
.get(location.pageID)
|
||||
.setKeyInternal(location.x, location.y, '_toggle', !state);
|
||||
var namestate = !state ? 'latch' : 'unlatch';
|
||||
if (key.actions != undefined && key.actions[namestate] != undefined) {
|
||||
Undecked.Integrations.executeActions(key.actions[namestate], instance);
|
||||
}
|
||||
};
|
||||
if (key.state.confirm == true) {
|
||||
_this.showConfirm(function (result) {
|
||||
if (result == true)
|
||||
handle();
|
||||
});
|
||||
}
|
||||
else
|
||||
handle();
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (key.state.confirm == false)
|
||||
if (key.actions != undefined && key.actions[event] != undefined)
|
||||
Undecked.Integrations.executeActions(key.actions[event], instance);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'pageup':
|
||||
if (event == 'down') {
|
||||
var upPageID = Undecked.Pages.getIdByIndex(_this.pageIndex - 1);
|
||||
if (upPageID)
|
||||
_this.setPageID(upPageID);
|
||||
}
|
||||
break;
|
||||
case 'pagedown':
|
||||
if (event == 'down') {
|
||||
var downPageID = Undecked.Pages.getIdByIndex(_this.pageIndex + 1);
|
||||
if (downPageID)
|
||||
_this.setPageID(downPageID);
|
||||
}
|
||||
break;
|
||||
}
|
||||
};
|
||||
if (this.ready == true && triggerKey.state != undefined) {
|
||||
if (triggerKey.state.type == 'ghost') {
|
||||
if (triggerKey.state.masterID != undefined) {
|
||||
var masterLocation = Undecked.Pages.KeyManager.getLocation(triggerKey.state.masterID);
|
||||
var masterPage = Undecked.Pages.get(masterLocation.pageID);
|
||||
if (masterPage) {
|
||||
var masterKey = masterPage.getKey(masterLocation.x, masterLocation.y);
|
||||
if (masterKey.state != undefined &&
|
||||
masterKey.state.ghostIDs != undefined &&
|
||||
masterKey.state.ghostIDs.includes(triggerKey.id))
|
||||
handleEvent(masterKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
handleEvent(triggerKey);
|
||||
}
|
||||
};
|
||||
Deck.prototype.listeners = function () {
|
||||
var _this = this;
|
||||
var instance = this;
|
||||
function indexToXY(index) {
|
||||
var y = Math.floor(index / instance.columns);
|
||||
var x = index - Math.floor(index / instance.columns) * instance.columns;
|
||||
return { x: x, y: y };
|
||||
}
|
||||
this.Deck.on('down', function (keyIndex) {
|
||||
var coords = indexToXY(keyIndex);
|
||||
if (Undecked.Pages.exists(instance.getPageID())) {
|
||||
var page = Undecked.Pages.get(instance.getPageID());
|
||||
var key = page.getKey(String(coords.x), String(coords.y));
|
||||
for (var captureType in _this.captures) {
|
||||
if (_this.captures[captureType].enabled == true) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
_this.handleKeyEvent(key, 'down');
|
||||
}
|
||||
});
|
||||
this.Deck.on('up', function (keyIndex) {
|
||||
var coords = indexToXY(keyIndex);
|
||||
if (Undecked.Pages.exists(instance.getPageID())) {
|
||||
var page = Undecked.Pages.get(instance.getPageID());
|
||||
var key = page.getKey(String(coords.x), String(coords.y));
|
||||
for (var captureType in _this.captures) {
|
||||
if (_this.captures[captureType].enabled == true) {
|
||||
if (_this.captures[captureType].callbacktriggers)
|
||||
for (var i = 0; i < _this.captures[captureType].callbacktriggers.length; i++) {
|
||||
var callbacktrigger = _this.captures[captureType].callbacktriggers[i];
|
||||
if (coords.x == callbacktrigger[0] && coords.y == callbacktrigger[1]) {
|
||||
_this.captures[captureType].callback(callbacktrigger[2]);
|
||||
_this.captures[captureType].enabled = false;
|
||||
_this.captures[captureType].callback = null;
|
||||
return _this.updateAll();
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
_this.handleKeyEvent(key, 'up');
|
||||
}
|
||||
});
|
||||
};
|
||||
Deck.prototype.setPageID = function (pageID) {
|
||||
var index = Undecked.Pages.getIndexById(pageID);
|
||||
if (index != this.pageIndex) {
|
||||
this.pageIndex = index;
|
||||
this.updateAll();
|
||||
}
|
||||
};
|
||||
Deck.prototype.getPageID = function () {
|
||||
return Undecked.Pages.getIdByIndex(this.pageIndex);
|
||||
};
|
||||
Deck.prototype.getName = function () {
|
||||
return this.name;
|
||||
};
|
||||
Deck.prototype.updateAll = function () {
|
||||
if (Undecked.Pages.exists(this.getPageID())) {
|
||||
var page = Undecked.Pages.get(this.getPageID());
|
||||
for (var x = 0; x < this.columns; x++) {
|
||||
for (var y = 0; y < this.rows; y++) {
|
||||
this.setKey(x, y, page.getKey(String(x), String(y)));
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
Deck.prototype.updateKey = function (x, y) {
|
||||
for (var captureType in this.captures)
|
||||
if (this.captures[captureType].enabled == true)
|
||||
return;
|
||||
if (Undecked.Pages.exists(this.getPageID())) {
|
||||
var page = Undecked.Pages.get(this.getPageID());
|
||||
this.setKey(x, y, page.requestKey(String(x), String(y)));
|
||||
}
|
||||
};
|
||||
Deck.prototype.fill = function (key) {
|
||||
for (var x = 0; x < this.columns; x++) {
|
||||
for (var y = 0; y < this.rows; y++) {
|
||||
this.setKey(x, y, key);
|
||||
}
|
||||
}
|
||||
};
|
||||
Deck.prototype.setKey = function (x, y, key, delay) {
|
||||
var _this = this;
|
||||
if (delay === void 0) { delay = 0; }
|
||||
if (x < this.columns && y < this.rows) {
|
||||
var keyIndex = y * this.columns + x;
|
||||
if (keyIndex < this.keys) {
|
||||
setTimeout(function () { return applyChanges(_this); }, delay);
|
||||
}
|
||||
var applyChanges = function (instance) {
|
||||
var canvas = canvas_1.createCanvas(Undecked.quality, Undecked.quality);
|
||||
var context = canvas.getContext('2d');
|
||||
context.textBaseline = 'middle';
|
||||
context.textAlign = 'center';
|
||||
if (key.state == undefined)
|
||||
key.state = { type: 'custom' };
|
||||
if (key.state.type == 'empty') {
|
||||
instance.Deck.clearKey(keyIndex);
|
||||
}
|
||||
else if (key.state.type == 'custom') {
|
||||
var appearence = key.appearence;
|
||||
render(appearence);
|
||||
}
|
||||
else if (key.state.type == 'ghost') {
|
||||
var appearence = key.appearence;
|
||||
appearence.system = {
|
||||
ghost: true
|
||||
};
|
||||
render(appearence);
|
||||
}
|
||||
else if (key.state.type == 'pageup') {
|
||||
render({
|
||||
text: { value: 'Up', color: '#ffffff', size: 18, offsetX: 0, offsetY: 25 },
|
||||
background: { color: '#4676b7' },
|
||||
image: {
|
||||
size: 100,
|
||||
rotation: 0,
|
||||
offsetX: 0,
|
||||
offsetY: -15,
|
||||
iconid: 'keyboard_arrow_up',
|
||||
iconstyle: 'white'
|
||||
},
|
||||
system: {
|
||||
border: {
|
||||
color: '#253e5e',
|
||||
thickness: 8
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
else if (key.state.type == 'pagedown') {
|
||||
render({
|
||||
text: { value: 'Down', color: '#ffffff', size: 18, offsetX: 0, offsetY: -25 },
|
||||
background: { color: '#4676b7' },
|
||||
image: {
|
||||
size: 100,
|
||||
rotation: 0,
|
||||
offsetX: 0,
|
||||
offsetY: 15,
|
||||
iconid: 'keyboard_arrow_down',
|
||||
iconstyle: 'white'
|
||||
},
|
||||
system: {
|
||||
border: {
|
||||
color: '#253e5e',
|
||||
thickness: 8
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
else if (key.state.type == 'currentpage') {
|
||||
render({
|
||||
text: {
|
||||
value: "Page\\n\\n" + (instance.pageIndex + 1),
|
||||
color: '#ffffff',
|
||||
size: 22,
|
||||
offsetX: 0,
|
||||
offsetY: 0
|
||||
},
|
||||
background: { color: '#4676b7' },
|
||||
system: {
|
||||
border: {
|
||||
color: '#253e5e',
|
||||
thickness: 8
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
function render(appearence) {
|
||||
function background(cb) {
|
||||
if (appearence.background != undefined) {
|
||||
context.fillStyle = appearence.background.color;
|
||||
context.fillRect(0, 0, Undecked.quality, Undecked.quality);
|
||||
context.fill();
|
||||
}
|
||||
cb();
|
||||
}
|
||||
function image(cb) {
|
||||
if (appearence.image != undefined) {
|
||||
var imageAddress = appearence.image.address != undefined
|
||||
? appearence.image.address
|
||||
: appearence.image.iconid != undefined
|
||||
? Undecked.Icons.getPath(appearence.image.iconid, appearence.image.iconstyle)
|
||||
: null;
|
||||
var imageSize = appearence.image.size != undefined
|
||||
? appearence.image.size / 100 * Undecked.quality
|
||||
: Undecked.quality;
|
||||
if (imageAddress) {
|
||||
var centerX = Undecked.quality / 2 + appearence.image.offsetX / 100 * Undecked.quality;
|
||||
var centerY = Undecked.quality / 2 + appearence.image.offsetY / 100 * Undecked.quality;
|
||||
canvas_1.loadImage(imageAddress).then(function (image) {
|
||||
context.save();
|
||||
context.translate(centerX, centerY);
|
||||
context.rotate(appearence.image.rotation * Math.PI / 180);
|
||||
context.drawImage(image, imageSize / 2 - imageSize, imageSize / 2 - imageSize, imageSize, imageSize);
|
||||
context.restore();
|
||||
cb();
|
||||
});
|
||||
}
|
||||
else
|
||||
cb();
|
||||
}
|
||||
else
|
||||
cb();
|
||||
}
|
||||
function text(cb) {
|
||||
if (appearence.text != undefined) {
|
||||
context.fillStyle = appearence.text.color;
|
||||
context.font = "700 " + appearence.text.size * (Undecked.quality / 100) + "px \"Montserrat\"";
|
||||
var text = appearence.text.value;
|
||||
var lineHeight = appearence.text.size * (Undecked.quality / 100);
|
||||
var centerX = Undecked.quality / 2 + appearence.text.offsetX / 100 * (Undecked.quality * 2);
|
||||
var centerY = Undecked.quality / 2 + appearence.text.offsetY / 100 * Undecked.quality;
|
||||
var canvasYCounter = centerY;
|
||||
var words = text != undefined ? text.replace(/\\n/g, ' \\n ').split(' ') : '';
|
||||
var line = '';
|
||||
var totalLineHeight = 0;
|
||||
for (var n = 0; n < words.length; n++) {
|
||||
if (words[n].length == 0)
|
||||
continue;
|
||||
var testLine = line + words[n] + ' ';
|
||||
var metrics = context.measureText(testLine);
|
||||
var testWidth = metrics.width;
|
||||
if (words[n] != '\\n')
|
||||
if (testWidth > Undecked.quality && n > 0) {
|
||||
line = words[n] + ' ';
|
||||
totalLineHeight += lineHeight;
|
||||
}
|
||||
else {
|
||||
line = testLine;
|
||||
}
|
||||
else {
|
||||
totalLineHeight += lineHeight;
|
||||
line = '';
|
||||
}
|
||||
}
|
||||
line = '';
|
||||
canvasYCounter = canvasYCounter - totalLineHeight / 2;
|
||||
var firstSkip = false;
|
||||
for (var n = 0; n < words.length; n++) {
|
||||
if (words[n].length == 0)
|
||||
continue;
|
||||
var testLine = line + words[n] + ' ';
|
||||
var metrics = context.measureText(testLine);
|
||||
var testWidth = metrics.width;
|
||||
if (words[n] != '\\n')
|
||||
if (testWidth > Undecked.quality && n > 0) {
|
||||
context.fillText(line, centerX, canvasYCounter);
|
||||
line = words[n] + ' ';
|
||||
canvasYCounter += lineHeight;
|
||||
}
|
||||
else {
|
||||
line = testLine;
|
||||
}
|
||||
else {
|
||||
context.fillText(line, centerX, canvasYCounter);
|
||||
line = '';
|
||||
canvasYCounter += firstSkip ? lineHeight * 2 : lineHeight;
|
||||
if (firstSkip)
|
||||
firstSkip = false;
|
||||
}
|
||||
}
|
||||
context.fillText(line, centerX, canvasYCounter);
|
||||
}
|
||||
cb();
|
||||
}
|
||||
function system(cb) {
|
||||
if (appearence.system != undefined) {
|
||||
if (appearence.system.border != undefined) {
|
||||
var relativeThickness = appearence.system.border.thickness / 100 * Undecked.quality;
|
||||
context.fillStyle = appearence.system.border.color;
|
||||
context.fillRect(0, 0, Undecked.quality, relativeThickness);
|
||||
context.rect(0, Undecked.quality - relativeThickness, Undecked.quality, relativeThickness);
|
||||
context.rect(0, 0, relativeThickness, Undecked.quality);
|
||||
context.rect(Undecked.quality - relativeThickness, 0, relativeThickness, Undecked.quality);
|
||||
context.fill();
|
||||
}
|
||||
if (appearence.system.ghost == true) {
|
||||
// var imageAddress = path.join(
|
||||
// __filename,
|
||||
// '..',
|
||||
// '..',
|
||||
// '..',
|
||||
// '..',
|
||||
// 'Static',
|
||||
// 'icon',
|
||||
// 'ghost.png'
|
||||
// );
|
||||
// var size = 50 / 100 * Undecked.quality;
|
||||
// loadImage(imageAddress).then((image) => {
|
||||
// context.save();
|
||||
// context.globalAlpha = 0.7;
|
||||
// context.translate(Undecked.quality / 2, Undecked.quality / 2);
|
||||
// context.drawImage(image, size / 2 - size, size / 2 - size, size, size);
|
||||
// context.restore();
|
||||
// cb();
|
||||
// });
|
||||
}
|
||||
}
|
||||
cb();
|
||||
}
|
||||
background(function () {
|
||||
image(function () {
|
||||
text(function () {
|
||||
system(function () {
|
||||
Jimp.read(canvas.toBuffer())
|
||||
.then(function (img) {
|
||||
return img.resize(instance.iconsize, instance.iconsize);
|
||||
})
|
||||
.then(function (image) {
|
||||
instance.Deck.fillKeyBuffer(keyIndex, image.bitmap.data, {
|
||||
format: 'rgba'
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
// if (keyData.color != undefined)
|
||||
// instance.Deck.fillKeyColor(keyIndex, keyData.color.r, keyData.color.g, keyData.color.b);
|
||||
// if (keyData.image != undefined) {
|
||||
};
|
||||
}
|
||||
};
|
||||
Deck.prototype.showConfirm = function (callback) {
|
||||
var _this = this;
|
||||
var cancel = [
|
||||
0,
|
||||
0,
|
||||
false
|
||||
];
|
||||
var deny = null;
|
||||
var confirm = null;
|
||||
if (this.columns % 2 == 0) {
|
||||
deny = [
|
||||
Math.floor(this.columns / 2) - 2,
|
||||
2,
|
||||
false
|
||||
];
|
||||
confirm = [
|
||||
Math.floor(this.columns / 2) + 1,
|
||||
2,
|
||||
true
|
||||
];
|
||||
}
|
||||
else {
|
||||
deny = [
|
||||
Math.floor(this.columns / 2) - 1,
|
||||
2,
|
||||
false
|
||||
];
|
||||
confirm = [
|
||||
Math.floor(this.columns / 2) + 1,
|
||||
2,
|
||||
true
|
||||
];
|
||||
}
|
||||
this.captures.confirm.enabled = true;
|
||||
this.captures.confirm.callbacktriggers = [
|
||||
cancel,
|
||||
deny,
|
||||
confirm
|
||||
];
|
||||
this.captures.confirm.callback = callback;
|
||||
this.Deck.clearPanel();
|
||||
this.setKey(confirm[0], confirm[1], {
|
||||
appearence: {
|
||||
image: {
|
||||
iconid: 'check',
|
||||
iconstyle: 'white',
|
||||
offsetX: 0,
|
||||
offsetY: 0,
|
||||
rotation: 0,
|
||||
size: 100
|
||||
},
|
||||
background: {
|
||||
color: '#4caf50'
|
||||
}
|
||||
}
|
||||
});
|
||||
this.setKey(deny[0], deny[1], {
|
||||
appearence: {
|
||||
image: {
|
||||
iconid: 'clear',
|
||||
iconstyle: 'white',
|
||||
offsetX: 0,
|
||||
offsetY: 0,
|
||||
rotation: 0,
|
||||
size: 100
|
||||
},
|
||||
background: {
|
||||
color: '#f44336'
|
||||
}
|
||||
}
|
||||
});
|
||||
this.setKey(cancel[0], cancel[1], {
|
||||
appearence: {
|
||||
image: {
|
||||
iconid: 'arrow_back',
|
||||
iconstyle: 'white',
|
||||
offsetX: 0,
|
||||
offsetY: 0,
|
||||
rotation: 0,
|
||||
size: 100
|
||||
},
|
||||
background: {
|
||||
color: '#000000'
|
||||
}
|
||||
}
|
||||
});
|
||||
var instance = this;
|
||||
var flickerList = [];
|
||||
function createText(value, x) {
|
||||
var data = {
|
||||
appearence: {
|
||||
text: {
|
||||
color: '#ffffff',
|
||||
offsetX: 1,
|
||||
offsetY: 0,
|
||||
size: 30,
|
||||
value: value
|
||||
},
|
||||
background: {
|
||||
color: '#000000'
|
||||
}
|
||||
}
|
||||
};
|
||||
instance.setKey(x, 1, data);
|
||||
flickerList.push({ x: x, data: data });
|
||||
}
|
||||
if (this.columns % 2 == 0) {
|
||||
createText('Are', 2);
|
||||
createText('you', 3);
|
||||
createText('sure', 4);
|
||||
createText('?', 5);
|
||||
}
|
||||
else {
|
||||
createText('Are', 1);
|
||||
createText('you', 2);
|
||||
createText('sure?', 3);
|
||||
}
|
||||
var flickerInterval = setInterval(function () {
|
||||
if (_this.captures.confirm.enabled == true) {
|
||||
for (var i = 0; i < flickerList.length; i++) {
|
||||
var flickeritem = flickerList[i];
|
||||
if (flickeritem.data.appearence.background.color == '#000000') {
|
||||
flickeritem.data.appearence.background.color = '#ffffff';
|
||||
flickeritem.data.appearence.text.color = '#000000';
|
||||
}
|
||||
else {
|
||||
flickeritem.data.appearence.background.color = '#000000';
|
||||
flickeritem.data.appearence.text.color = '#ffffff';
|
||||
}
|
||||
instance.setKey(flickeritem.x, 1, flickeritem.data);
|
||||
}
|
||||
}
|
||||
else
|
||||
clearInterval(flickerInterval);
|
||||
}, 500);
|
||||
};
|
||||
Deck.prototype.getWaveCoords = function () {
|
||||
var coords = [];
|
||||
for (var x0 = 0; x0 < 8; x0++) {
|
||||
var delay = x0;
|
||||
coords.push([
|
||||
x0,
|
||||
0,
|
||||
delay * 200
|
||||
]);
|
||||
}
|
||||
for (var x1 = -1; x1 < 8; x1++) {
|
||||
var delay = x1 + 1;
|
||||
if (x1 >= 0)
|
||||
coords.push([
|
||||
x1,
|
||||
1,
|
||||
delay * 200
|
||||
]);
|
||||
}
|
||||
for (var x2 = -2; x2 < 8; x2++) {
|
||||
var delay = x2 + 2;
|
||||
if (x2 >= 0)
|
||||
coords.push([
|
||||
x2,
|
||||
2,
|
||||
delay * 200
|
||||
]);
|
||||
}
|
||||
for (var x3 = -3; x3 < 8; x3++) {
|
||||
var delay = x3 + 3;
|
||||
if (x3 >= 0)
|
||||
coords.push([
|
||||
x3,
|
||||
3,
|
||||
delay * 200
|
||||
]);
|
||||
}
|
||||
return coords;
|
||||
};
|
||||
return Deck;
|
||||
}());
|
||||
exports.Deck = Deck;
|
||||
;
|
||||
//# sourceMappingURL=Deck.js.map
|
||||
1
Backend/dist/Decks/Deck.js.map
vendored
Normal file
1
Backend/dist/Decks/Deck.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
99
Backend/dist/Decks/DeckManager.js
vendored
Normal file
99
Backend/dist/Decks/DeckManager.js
vendored
Normal file
@@ -0,0 +1,99 @@
|
||||
exports.__esModule = true;
|
||||
exports.DeckManager = void 0;
|
||||
var path = require("path");
|
||||
var Logger_1 = require("../Logger");
|
||||
var StreamDeck = require("@elgato-stream-deck/node");
|
||||
var Deck_1 = require("./Deck");
|
||||
var fs = require("fs-extra");
|
||||
var writeFile = fs.writeFile, pathExists = fs.pathExists, readJson = fs.readJson;
|
||||
var DeckManager = /** @class */ (function () {
|
||||
function DeckManager() {
|
||||
}
|
||||
DeckManager.prototype.load = function (callback) {
|
||||
var _this = this;
|
||||
this.managerConfigPath = path.join(Undecked.dataPath, 'decks.json');
|
||||
this.decks = {};
|
||||
this.loadConfig(function () {
|
||||
for (var i = 0; i < _this.managerConfig.decks.length; i++) {
|
||||
var deckConfig = _this.managerConfig.decks[i];
|
||||
_this.decks[deckConfig.serialNumber] = new Deck_1.Deck(deckConfig, null);
|
||||
}
|
||||
_this.ensureDecks(function (newDecks) {
|
||||
Logger_1.Log('info', "Loaded " + (Object.keys(_this.decks).length - newDecks) + " existing deck(s) and " + newDecks + " new deck(s)");
|
||||
callback();
|
||||
});
|
||||
});
|
||||
};
|
||||
DeckManager.prototype.loadConfig = function (callback) {
|
||||
var _this = this;
|
||||
pathExists(this.managerConfigPath, function (err, exists) {
|
||||
if (err)
|
||||
throw err;
|
||||
if (exists) {
|
||||
readJson(_this.managerConfigPath, function (err, json) {
|
||||
if (err)
|
||||
throw err;
|
||||
_this.managerConfig = json;
|
||||
callback();
|
||||
});
|
||||
}
|
||||
else {
|
||||
_this.managerConfig = defaultDeckConfig;
|
||||
_this.saveConfig(callback);
|
||||
}
|
||||
});
|
||||
};
|
||||
DeckManager.prototype.saveConfig = function (callback) {
|
||||
var toSave = {
|
||||
decks: []
|
||||
};
|
||||
for (var serialNumber in this.decks)
|
||||
toSave.decks.push(this.decks[serialNumber]["export"]());
|
||||
writeFile(this.managerConfigPath, JSON.stringify(toSave, null, 4), function (err) {
|
||||
if (err)
|
||||
Logger_1.Log('error', 'Error whilst saving manager config', err.message);
|
||||
if (callback)
|
||||
callback();
|
||||
});
|
||||
};
|
||||
DeckManager.prototype.hasDeck = function (serialNumber) {
|
||||
return this.decks[serialNumber] != undefined;
|
||||
};
|
||||
DeckManager.prototype.getDeck = function (serialNumber) {
|
||||
if (this.decks[serialNumber])
|
||||
return this.decks[serialNumber];
|
||||
return null;
|
||||
};
|
||||
DeckManager.prototype.ensureDecks = function (callback) {
|
||||
var _this = this;
|
||||
var currentDecks = Object.keys(this.decks).length;
|
||||
var decks = StreamDeck.listStreamDecks();
|
||||
for (var i = 0; i < decks.length; i++) {
|
||||
if (!this.hasDeck(decks[i].serialNumber))
|
||||
this.decks[decks[i].serialNumber] = new Deck_1.Deck({
|
||||
serialNumber: decks[i].serialNumber,
|
||||
model: decks[i].model,
|
||||
name: "Unnamed " + decks[i].model
|
||||
}, decks[i].path);
|
||||
else
|
||||
this.decks[decks[i].serialNumber].setDevicePath(decks[i].path);
|
||||
}
|
||||
if (Object.keys(this.decks).length > currentDecks)
|
||||
this.saveConfig(function () { return callback(Object.keys(_this.decks).length - currentDecks); });
|
||||
else
|
||||
callback(0);
|
||||
};
|
||||
DeckManager.prototype.getList = function () {
|
||||
var list = [];
|
||||
for (var serialNumber in this.decks) {
|
||||
list.push({ serialNumber: serialNumber, name: this.decks[serialNumber].getName() });
|
||||
}
|
||||
return list;
|
||||
};
|
||||
return DeckManager;
|
||||
}());
|
||||
exports.DeckManager = DeckManager;
|
||||
var defaultDeckConfig = {
|
||||
decks: []
|
||||
};
|
||||
//# sourceMappingURL=DeckManager.js.map
|
||||
1
Backend/dist/Decks/DeckManager.js.map
vendored
Normal file
1
Backend/dist/Decks/DeckManager.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"DeckManager.js","sourceRoot":"","sources":["../../src/Decks/DeckManager.ts"],"names":[],"mappings":"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"}
|
||||
Reference in New Issue
Block a user