Files
IoTManager/include/Class/LineParsing.h

150 lines
3.4 KiB
C
Raw Normal View History

2020-07-29 00:58:59 +02:00
#pragma once
#include <Arduino.h>
#include "Global.h"
2020-07-31 00:56:10 +02:00
class LineParsing {
2020-07-29 21:38:39 +02:00
protected:
2020-07-31 00:56:10 +02:00
String _key;
String _file;
String _page;
String _descr;
String _order;
String _addr;
String _pin;
String _map;
String _c;
String _inv;
String _state;
2020-07-31 01:52:57 +02:00
String _db;
2020-07-29 00:58:59 +02:00
public:
2020-07-31 00:56:10 +02:00
LineParsing() :
_key{""},
_file{""},
_page{""},
_descr{""},
_order{""},
_addr{""},
_pin{""},
_map{""},
_c{""},
_inv{""},
2020-07-31 01:52:57 +02:00
_state{""},
_db{""}
2020-07-29 00:58:59 +02:00
{};
void update() {
//String order = sCmd.order();
//pm.info("create '" + order + "'");
for (int i = 1; i < 12; i++) {
2020-08-02 01:54:26 +02:00
if (i == 1) _key = sCmd.next();
if (i == 2) _file = sCmd.next();
if (i == 3) _page = sCmd.next();
if (i == 4) _descr = sCmd.next();
if (i == 5) _order = sCmd.next();
2020-07-29 00:58:59 +02:00
}
for (int i = 1; i < 6; i++) {
String arg = sCmd.next();
if (arg != "") {
if (arg.indexOf("pin[") != -1) {
2020-07-31 00:56:10 +02:00
_pin = extractInner(arg);
2020-07-29 00:58:59 +02:00
}
if (arg.indexOf("inv[") != -1) {
2020-07-31 00:56:10 +02:00
_inv = extractInner(arg);
2020-07-29 00:58:59 +02:00
}
if (arg.indexOf("st[") != -1) {
2020-07-31 00:56:10 +02:00
_state = extractInner(arg);
2020-07-29 00:58:59 +02:00
}
2020-07-31 01:52:57 +02:00
if (arg.indexOf("db[") != -1) {
_db = extractInner(arg);
}
2020-07-29 00:58:59 +02:00
}
}
2020-07-31 00:56:10 +02:00
createWidgetClass(_descr, _page, _order, _file, _key);
2020-07-29 00:58:59 +02:00
}
String gkey() {
2020-07-31 00:56:10 +02:00
return _key;
2020-07-29 00:58:59 +02:00
}
String gfile() {
2020-07-31 00:56:10 +02:00
return _file;
2020-07-29 00:58:59 +02:00
}
String gpage() {
2020-07-31 00:56:10 +02:00
return _page;
2020-07-29 00:58:59 +02:00
}
String gdescr() {
2020-07-31 00:56:10 +02:00
return _descr;
2020-07-29 00:58:59 +02:00
}
String gorder() {
2020-07-31 00:56:10 +02:00
return _order;
2020-07-29 00:58:59 +02:00
}
String gpin() {
2020-07-31 00:56:10 +02:00
return _pin;
2020-07-29 00:58:59 +02:00
}
String ginv() {
2020-07-31 00:56:10 +02:00
return _inv;
2020-07-29 00:58:59 +02:00
}
String gstate() {
2020-07-31 00:56:10 +02:00
return _state;
2020-07-29 00:58:59 +02:00
}
void clear() {
2020-07-31 00:56:10 +02:00
_key = "";
_file = "";
_page = "";
_descr = "";
_order = "";
_addr = "";
_pin = "";
_map = "";
_c = "";
_inv = "";
_state = "";
2020-07-31 01:52:57 +02:00
_db = "";
2020-07-29 00:58:59 +02:00
}
String extractInnerDigit(String str) {
int p1 = str.indexOf("[");
int p2 = str.indexOf("]");
return str.substring(p1 + 1, p2);
}
void createWidgetClass(String descr, String page, String order, String filename, String topic) {
String buf = "{}";
if (!loadWidgetClass(filename, buf)) {
return;
}
descr.replace("#", " ");
page.replace("#", " ");
jsonWriteStr(buf, "page", page);
jsonWriteStr(buf, "order", order);
jsonWriteStr(buf, "descr", descr);
jsonWriteStr(buf, "topic", prex + "/" + topic);
#ifdef LAYOUT_IN_RAM
all_widgets += widget + "\r\n";
#else
addFile("layout.txt", buf);
#endif
}
bool loadWidgetClass(const String& filename, String& buf) {
buf = readFile(getWidgetFileClass(filename), 2048);
bool res = !(buf == "Failed" || buf == "Large");
if (!res) {
//pm.error("on load" + filename);
}
return res;
}
const String getWidgetFileClass(const String& name) {
return "/widgets/" + name + ".json";
}
};