diff --git a/server/jsonrpc/jsontypes.cpp b/server/jsonrpc/jsontypes.cpp index f7f065c2..12bfe164 100644 --- a/server/jsonrpc/jsontypes.cpp +++ b/server/jsonrpc/jsontypes.cpp @@ -517,7 +517,7 @@ QVariantMap JsonTypes::packStateDescriptor(const StateDescriptor &stateDescripto variantMap.insert("stateTypeId", stateDescriptor.stateTypeId().toString()); variantMap.insert("deviceId", stateDescriptor.deviceId().toString()); variantMap.insert("value", stateDescriptor.stateValue()); - variantMap.insert("operator", valueOperator().at(stateDescriptor.operatorType())); + variantMap.insert("operator", s_valueOperator.at(stateDescriptor.operatorType())); return variantMap; } @@ -534,7 +534,7 @@ QVariantMap JsonTypes::packStateEvaluator(const StateEvaluator &stateEvaluator) } if (!childEvaluators.isEmpty() || stateEvaluator.stateDescriptor().isValid()) - variantMap.insert("operator", stateOperator().at(stateEvaluator.operatorType())); + variantMap.insert("operator", s_stateOperator.at(stateEvaluator.operatorType())); if (childEvaluators.count() > 0) { variantMap.insert("childEvaluators", childEvaluators); @@ -712,6 +712,7 @@ QVariantMap JsonTypes::packRule(const Rule &rule) eventDescriptorList.append(JsonTypes::packEventDescriptor(eventDescriptor)); } ruleMap.insert("eventDescriptors", eventDescriptorList); + ruleMap.insert("stateEvaluator", JsonTypes::packStateEvaluator(rule.stateEvaluator())); QVariantList actionList; foreach (const RuleAction &action, rule.actions()) { @@ -724,7 +725,6 @@ QVariantMap JsonTypes::packRule(const Rule &rule) exitActionList.append(JsonTypes::packRuleAction(action)); } ruleMap.insert("exitActions", exitActionList); - ruleMap.insert("stateEvaluator", JsonTypes::packStateEvaluator(rule.stateEvaluator())); return ruleMap; } diff --git a/server/ruleengine.cpp b/server/ruleengine.cpp index a5d54e62..05576e18 100644 --- a/server/ruleengine.cpp +++ b/server/ruleengine.cpp @@ -246,7 +246,6 @@ RuleEngine::RuleEngine(QObject *parent) : } settings.endGroup(); - settings.endGroup(); // Load stateEvaluator StateEvaluator stateEvaluator = StateEvaluator::loadFromSettings(settings, "stateEvaluator"); @@ -1020,10 +1019,15 @@ void RuleEngine::saveRule(const Rule &rule) if (!rule.timeDescriptor().isEmpty()) { settings.beginGroup("calendarItems"); for (int i = 0; i < rule.timeDescriptor().calendarItems().count(); i++) { - const CalendarItem &calendarItem = rule.timeDescriptor().calendarItems().at(i); settings.beginGroup("CalendarItem-" + QString::number(i)); - settings.setValue("dateTime", calendarItem.dateTime().toTime_t()); - settings.setValue("startTime", calendarItem.startTime().toString("hh:mm")); + + const CalendarItem &calendarItem = rule.timeDescriptor().calendarItems().at(i); + if (calendarItem.dateTime().isValid()) + settings.setValue("dateTime", calendarItem.dateTime().toTime_t()); + + if (calendarItem.startTime().isValid()) + settings.setValue("startTime", calendarItem.startTime().toString("hh:mm")); + settings.setValue("duration", calendarItem.duration()); settings.setValue("mode", calendarItem.repeatingOption().mode()); @@ -1049,10 +1053,15 @@ void RuleEngine::saveRule(const Rule &rule) settings.beginGroup("timeEventItems"); for (int i = 0; i < rule.timeDescriptor().timeEventItems().count(); i++) { - const TimeEventItem &timeEventItem = rule.timeDescriptor().timeEventItems().at(i); settings.beginGroup("TimeEventItem-" + QString::number(i)); - settings.setValue("dateTime", timeEventItem.dateTime().toTime_t()); - settings.setValue("time", timeEventItem.time().toString("hh:mm")); + const TimeEventItem &timeEventItem = rule.timeDescriptor().timeEventItems().at(i); + + if (timeEventItem.dateTime().isValid()) + settings.setValue("dateTime", timeEventItem.dateTime().toTime_t()); + + if (timeEventItem.time().isValid()) + settings.setValue("time", timeEventItem.time().toString("hh:mm")); + settings.setValue("mode", timeEventItem.repeatingOption().mode()); // Save weekDays diff --git a/tests/auto/rules/testrules.cpp b/tests/auto/rules/testrules.cpp index 4274a750..a7799895 100644 --- a/tests/auto/rules/testrules.cpp +++ b/tests/auto/rules/testrules.cpp @@ -1073,11 +1073,13 @@ void TestRules::loadStoreConfig() QVERIFY2(found, "missing eventdescriptor"); } + qDebug() << endl << rule1; + QVERIFY2(rule1.value("name").toString() == "TestRule", "Loaded wrong name for rule"); QVariantMap replyStateEvaluator= rule1.value("stateEvaluator").toMap(); QVariantList replyChildEvaluators = replyStateEvaluator.value("childEvaluators").toList(); - QVERIFY2(replyStateEvaluator.value("operator") == "StateOperatorAnd", "There should be the AND operator."); QVERIFY2(replyChildEvaluators.count() == 2, "There shoud be exactly 2 childEvaluators"); + QVERIFY2(replyStateEvaluator.value("operator") == "StateOperatorAnd", "There should be the AND operator."); foreach (const QVariant &childEvaluator, replyChildEvaluators) { QVERIFY2(childEvaluator.toMap().contains("stateDescriptor"), "StateDescriptor missing in StateEvaluator"); diff --git a/tests/auto/timemanager/testtimemanager.cpp b/tests/auto/timemanager/testtimemanager.cpp index ac991f32..8a662c35 100644 --- a/tests/auto/timemanager/testtimemanager.cpp +++ b/tests/auto/timemanager/testtimemanager.cpp @@ -218,18 +218,22 @@ void TestTimeManager::loadSaveTimeDescriptor() response = injectAndWait("Rules.GetRuleDetails", params); verifyRuleError(response); - QVariantMap timeDescriptorMap = response.toMap().value("params").toMap().value("rule").toMap().value("timeDescriptor").toMap(); - qDebug() << QJsonDocument::fromVariant(timeDescriptorMap).toJson(); - // Restart the server restartServer(); // Get the loaded rule + + response = injectAndWait("Rules.GetRuleDetails", params); verifyRuleError(response); + QVariantMap timeDescriptorMap = response.toMap().value("params").toMap().value("rule").toMap().value("timeDescriptor").toMap(); + //qDebug() << QJsonDocument::fromVariant(timeDescriptorMap).toJson(); + QVariantMap timeDescriptorMapLoaded = response.toMap().value("params").toMap().value("rule").toMap().value("timeDescriptor").toMap(); - qDebug() << QJsonDocument::fromVariant(timeDescriptorMapLoaded).toJson(); + //qDebug() << QJsonDocument::fromVariant(timeDescriptorMapLoaded).toJson(); + + qDebug() << endl << timeDescriptorMap << endl << endl << timeDescriptorMapLoaded; QCOMPARE(timeDescriptorMap, timeDescriptorMapLoaded);