/* * SPDX-FileCopyrightText: 2023 Sascha Nitsch (@grumpydevelop@contentnation.net) https://contentnation.net/en/grumpydevelop * * SPDX-License-Identifier: GPL-3.0-or-later */ /// /// class MainView extends View { constructor(app: CameraTrigger) { super(app); if (!this.app.pinMapping) { this.app.getPinMapping(this, this.render); } else { this.render(); } } finish() { } render() { var template = $("#tplMain").html(); var data:any = {}; data.l = this.app.lang; var keys = Object.keys(this.app.pinMapping); data.pinmapping = []; keys.forEach(function(key){ var pin = this.app.pinMapping[key]; if (pin[1] !== "none" && pin[1] !== "trigger") { data.pinmapping.push({pin: key, name: pin[0]}); } }); var html = Mustache.render(template, data); this.root.html(html); this.root.find("button.add").on("click", this, this.addTime); this.root.on("click","button.del", this, this.delTime); this.root.find(".minmax").on("click", this, this.toggleExpansion); this.root.find("#trigger button.trigger").on("click", this, this.trigger); this.root.find("#trigger button.save").on("click", this, this.save); } addTime(event: JQuery.TriggeredEvent) { event.preventDefault(); var target = $(event.currentTarget); var template = $("#tplMainTime").html(); var data:any = {}; var fform = target.parents(".fform"); data.name = fform.data("pin"); data.index = fform.find(".time").length; data.delta = event.data.app.pinMapping[data.name][1]==="digitalout"; data.l = event.data.app.lang; var html = Mustache.render(template, data); target.before(html); } delTime(event: JQuery.TriggeredEvent) { event.preventDefault(); var target = $(event.currentTarget).parent(); target.remove(); } toggleExpansion(event: JQuery.TriggeredEvent) { event.preventDefault(); var form = $(event.currentTarget).parents("div.fform") form.toggleClass("min"); return false; } trigger(event: JQuery.TriggeredEvent) { event.preventDefault(); event.data.realTrigger(true) } save(event: JQuery.TriggeredEvent) { event.preventDefault(); event.data.realTrigger(false) } realTrigger(alsoTrigger: boolean) { // get list of active pins var times={}; var inputs = this.root.find("form").serializeArray(); for (var i = 0 ; i < inputs.length; ++i) { var tokens = inputs[i].name.split("_"); var type = tokens[0] var pin = parseInt(tokens[1].substr(1)); var time = parseInt(inputs[i].value); if (type === "delta") { time += parseInt(inputs[i-1].value); } if (!times[time]) { times[time] = []; } var start = type === "start"; if (this.app.pinMapping[tokens[1]][2]) // inverted start = !start; switch (this.app.pinMapping[tokens[1]][1]) { // type case "digitalout": times[time].push((start ? "E" : "D") + pin); break; case "ircanon": times[time].push("C" + pin); break; case "irnikon": times[time].push("N" + pin); break; case "irsony": times[time].push("S" + pin); break; } } var keys = Object.keys(times).sort(function(a,b){var A=parseInt(a);var B=parseInt(b);return A diff) { var err = this.app.lang.main.needpause.replace("$1", needDelay); $.toast({ text: err, position: 'top-right', icon: 'error' }); this.root.find(".error").html(err); return; } if (diff>0) { cmdString += "d" + diff + ";"; } needDelay = 0; times[keys[j]].forEach(function(a) { if (a[0] === 'C') needDelay = 10; else if (a[0] === 'N') needDelay = 136; else if (a[0] === 'S') needDelay = 39; }); cmdString += times[keys[j]].join(";") + ";"; curTime = parseInt(keys[j]); } //check for trigger keys = Object.keys(this.app.pinMapping) for (var k = 0; k < keys.length ; ++k) { if (this.app.pinMapping[keys[k]][1] === "trigger") { cmdString += "T" + keys[k].substr(1) + ";"; } console.log(this.app.pinMapping[keys[k]]); } Api.post("/run", {"cmd": cmdString, "trigger": alsoTrigger}, this, this.app.success, this.app.error); } }