From b6eedca37e50a7557e43f225a2828f6a6fff5ac4 Mon Sep 17 00:00:00 2001 From: Yuri Trikoz Date: Sat, 27 Jun 2020 05:22:24 +0300 Subject: [PATCH] extract isScenarioEnabled() --- src/Scenario.cpp | 158 ++++++++++++++++++++++++----------------------- 1 file changed, 81 insertions(+), 77 deletions(-) diff --git a/src/Scenario.cpp b/src/Scenario.cpp index 341a5be7..e7a78423 100644 --- a/src/Scenario.cpp +++ b/src/Scenario.cpp @@ -2,86 +2,90 @@ static const char* MODULE = "Scen"; -void loopScenario() { - bool enabled = jsonReadBool(configSetupJson, "scen"); - if (enabled) { - if ((jsonReadStr(configOptionJson, "scenario_status") != "")) { - String str = scenario; - str += "\n"; - str.replace("\r\n", "\n"); - str.replace("\r", "\n"); - - size_t i = 0; - while (str.length()) { - String block = selectToMarker(str, "end"); - if (!block.length()) { - return; - } - i++; - - if (scenario_line_status[i] == 1) { - //выделяем первую строку самого сценария button1 = 1 (условие) - String condition = selectToMarker(block, "\n"); - String param_name = selectFromMarkerToMarker(condition, " ", 0); - String order = jsonReadStr(configOptionJson, "scenario_status"); //читаем весь файл событий - String param = selectToMarker(order, ","); //читаем первое событие из файла событий - if (param_name == param) { //если поступившее событие равно событию заданному buttonSet1 в файле начинаем его обработку - - String sign = selectFromMarkerToMarker(condition, " ", 1); //читаем знак (=) - String value = selectFromMarkerToMarker(condition, " ", 2); //читаем значение (1) - if (value.indexOf("digit") != -1) { - // value = add_set(value); - value = jsonReadStr(configLiveJson, value); - } - if (value.indexOf("time") != -1) { - // value = add_set(value); - value = jsonReadStr(configLiveJson, value); - } - boolean flag = false; //если одно из значений совпало то только тогда начинаем выполнять комнады - if (sign == "=") { - if (jsonReadStr(configLiveJson, param_name) == value) flag = true; - } - if (sign == "!=") { - if (jsonReadStr(configLiveJson, param_name) != value) flag = true; - } - if (sign == "<") { - if (jsonReadStr(configLiveJson, param_name).toInt() < value.toInt()) flag = true; - } - if (sign == ">") { - if (jsonReadStr(configLiveJson, param_name).toInt() > value.toInt()) flag = true; - } - if (sign == ">=") { - if (jsonReadStr(configLiveJson, param_name).toInt() >= value.toInt()) flag = true; - } - if (sign == "<=") { - if (jsonReadStr(configLiveJson, param_name).toInt() <= value.toInt()) flag = true; - } - - if (flag) { - block = deleteBeforeDelimiter(block, "\n"); //удаляем строку самого сценария оставляя только команды - stringExecute(block); //выполняем все команды - - pm.info(condition + "'"); - } - } - } - str = deleteBeforeDelimiter(str, "end\n"); //удаляем первый сценарий - //----------------------------------------------------------------------------------------------------------------------- - } - String tmp2 = jsonReadStr(configOptionJson, "scenario_status"); //читаем файл событий - tmp2 = deleteBeforeDelimiter(tmp2, ","); //удаляем выполненное событие - jsonWriteStr(configOptionJson, "scenario_status", tmp2); //записываем обновленный файл событий - i = 0; - } - } +boolean isScenarioEnabled() { + return jsonReadBool(configSetupJson, "scen") && jsonReadStr(configOptionJson, "scenario_status") != ""; } -//событие выглядит как имя плюс set плюс номер: button+Set+1 -void eventGen(String event_name, String number) { - if (jsonReadStr(configSetupJson, "scen") == "1") { - String tmp = jsonReadStr(configOptionJson, "scenario_status"); //генерирование события - jsonWriteStr(configOptionJson, "scenario_status", tmp + event_name + number + ","); +void loopScenario() { + if (!isScenarioEnabled()) { + return; } + String str = scenario; + str += "\n"; + str.replace("\r\n", "\n"); + str.replace("\r", "\n"); + + size_t i = 0; + while (str.length()) { + String block = selectToMarker(str, "end"); + if (!block.length()) { + return; + } + i++; + + if (scenario_line_status[i] == 1) { + //выделяем первую строку самого сценария button1 = 1 (условие) + String condition = selectToMarker(block, "\n"); + String param_name = selectFromMarkerToMarker(condition, " ", 0); + String order = jsonReadStr(configOptionJson, "scenario_status"); //читаем весь файл событий + String param = selectToMarker(order, ","); //читаем первое событие из файла событий + if (param_name == param) { //если поступившее событие равно событию заданному buttonSet1 в файле начинаем его обработку + + String sign = selectFromMarkerToMarker(condition, " ", 1); //читаем знак (=) + String value = selectFromMarkerToMarker(condition, " ", 2); //читаем значение (1) + if (value.indexOf("digit") != -1) { + // value = add_set(value); + value = jsonReadStr(configLiveJson, value); + } + if (value.indexOf("time") != -1) { + // value = add_set(value); + value = jsonReadStr(configLiveJson, value); + } + boolean flag = false; //если одно из значений совпало то только тогда начинаем выполнять комнады + if (sign == "=") { + if (jsonReadStr(configLiveJson, param_name) == value) flag = true; + } + if (sign == "!=") { + if (jsonReadStr(configLiveJson, param_name) != value) flag = true; + } + if (sign == "<") { + if (jsonReadStr(configLiveJson, param_name).toInt() < value.toInt()) flag = true; + } + if (sign == ">") { + if (jsonReadStr(configLiveJson, param_name).toInt() > value.toInt()) flag = true; + } + if (sign == ">=") { + if (jsonReadStr(configLiveJson, param_name).toInt() >= value.toInt()) flag = true; + } + if (sign == "<=") { + if (jsonReadStr(configLiveJson, param_name).toInt() <= value.toInt()) flag = true; + } + + if (flag) { + block = deleteBeforeDelimiter(block, "\n"); //удаляем строку самого сценария оставляя только команды + stringExecute(block); //выполняем все команды + + pm.info(condition + "'"); + } + } + } + str = deleteBeforeDelimiter(str, "end\n"); //удаляем первый сценарий + //----------------------------------------------------------------------------------------------------------------------- + } + String tmp2 = jsonReadStr(configOptionJson, "scenario_status"); //читаем файл событий + tmp2 = deleteBeforeDelimiter(tmp2, ","); //удаляем выполненное событие + jsonWriteStr(configOptionJson, "scenario_status", tmp2); //записываем обновленный файл событий +} + +// событие: имя + Set + номер +// button+Set+1 +void eventGen(String event_name, String number) { + if (!jsonReadBool(configSetupJson, "scen")) { + return; + } + // генерирование события + String tmp = jsonReadStr(configOptionJson, "scenario_status"); + jsonWriteStr(configOptionJson, "scenario_status", tmp + event_name + number + ","); } String add_set(String str) {