From e0545ad01ea3fae34d037652539ec2515ad3aaf9 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Mon, 26 Mar 2018 14:32:43 +0200 Subject: [PATCH] first work to add timedescriptor support, unfinished --- libnymea-common/libnymea-common.pro | 14 ++++++-- libnymea-common/types/calendaritem.cpp | 6 ++++ libnymea-common/types/calendaritem.h | 17 ++++++++++ libnymea-common/types/calendaritems.cpp | 6 ++++ libnymea-common/types/calendaritems.h | 17 ++++++++++ libnymea-common/types/rule.cpp | 6 ++++ libnymea-common/types/rule.h | 4 +++ libnymea-common/types/timedescriptor.cpp | 6 ++++ libnymea-common/types/timedescriptor.h | 17 ++++++++++ libnymea-common/types/timeeventitem.cpp | 32 ++++++++++++++++++ libnymea-common/types/timeeventitem.h | 33 +++++++++++++++++++ libnymea-common/types/timeeventitems.cpp | 6 ++++ libnymea-common/types/timeeventitems.h | 17 ++++++++++ mea/rulemanager.cpp | 14 +++++++- mea/rulemanager.h | 1 + .../magic/SelectEventDescriptorParamsPage.qml | 2 ++ 16 files changed, 195 insertions(+), 3 deletions(-) create mode 100644 libnymea-common/types/calendaritem.cpp create mode 100644 libnymea-common/types/calendaritem.h create mode 100644 libnymea-common/types/calendaritems.cpp create mode 100644 libnymea-common/types/calendaritems.h create mode 100644 libnymea-common/types/timedescriptor.cpp create mode 100644 libnymea-common/types/timedescriptor.h create mode 100644 libnymea-common/types/timeeventitem.cpp create mode 100644 libnymea-common/types/timeeventitem.h create mode 100644 libnymea-common/types/timeeventitems.cpp create mode 100644 libnymea-common/types/timeeventitems.h diff --git a/libnymea-common/libnymea-common.pro b/libnymea-common/libnymea-common.pro index 5b556f35..4a7c42f8 100644 --- a/libnymea-common/libnymea-common.pro +++ b/libnymea-common/libnymea-common.pro @@ -44,7 +44,12 @@ HEADERS += types/types.h \ types/paramdescriptor.h \ types/paramdescriptors.h \ types/interface.h \ - types/interfaces.h + types/interfaces.h \ + types/timedescriptor.h \ + types/timeeventitem.h \ + types/calendaritem.h \ + types/timeeventitems.h \ + types/calendaritems.h SOURCES += types/vendor.cpp \ types/vendors.cpp \ @@ -80,7 +85,12 @@ SOURCES += types/vendor.cpp \ types/paramdescriptor.cpp \ types/paramdescriptors.cpp \ types/interface.cpp \ - types/interfaces.cpp + types/interfaces.cpp \ + types/timedescriptor.cpp \ + types/timeeventitem.cpp \ + types/calendaritem.cpp \ + types/timeeventitems.cpp \ + types/calendaritems.cpp # install header file with relative subdirectory for(header, HEADERS) { diff --git a/libnymea-common/types/calendaritem.cpp b/libnymea-common/types/calendaritem.cpp new file mode 100644 index 00000000..18e4d9d9 --- /dev/null +++ b/libnymea-common/types/calendaritem.cpp @@ -0,0 +1,6 @@ +#include "calendaritem.h" + +CalendarItem::CalendarItem(QObject *parent) : QObject(parent) +{ + +} diff --git a/libnymea-common/types/calendaritem.h b/libnymea-common/types/calendaritem.h new file mode 100644 index 00000000..850679ce --- /dev/null +++ b/libnymea-common/types/calendaritem.h @@ -0,0 +1,17 @@ +#ifndef CALENDARITEM_H +#define CALENDARITEM_H + +#include + +class CalendarItem : public QObject +{ + Q_OBJECT +public: + explicit CalendarItem(QObject *parent = nullptr); + +signals: + +public slots: +}; + +#endif // CALENDARITEM_H \ No newline at end of file diff --git a/libnymea-common/types/calendaritems.cpp b/libnymea-common/types/calendaritems.cpp new file mode 100644 index 00000000..edd79427 --- /dev/null +++ b/libnymea-common/types/calendaritems.cpp @@ -0,0 +1,6 @@ +#include "calendaritems.h" + +CalendarItems::CalendarItems(QObject *parent) : QObject(parent) +{ + +} diff --git a/libnymea-common/types/calendaritems.h b/libnymea-common/types/calendaritems.h new file mode 100644 index 00000000..9b441f83 --- /dev/null +++ b/libnymea-common/types/calendaritems.h @@ -0,0 +1,17 @@ +#ifndef CALENDARITEMS_H +#define CALENDARITEMS_H + +#include + +class CalendarItems : public QObject +{ + Q_OBJECT +public: + explicit CalendarItems(QObject *parent = nullptr); + +signals: + +public slots: +}; + +#endif // CALENDARITEMS_H \ No newline at end of file diff --git a/libnymea-common/types/rule.cpp b/libnymea-common/types/rule.cpp index 40fbdf9c..1ab1b2ff 100644 --- a/libnymea-common/types/rule.cpp +++ b/libnymea-common/types/rule.cpp @@ -6,6 +6,7 @@ #include "stateevaluators.h" #include "ruleaction.h" #include "ruleactions.h" +#include "timedescriptor.h" Rule::Rule(const QUuid &id, QObject *parent) : QObject(parent), @@ -82,6 +83,11 @@ RuleActions *Rule::exitActions() const return m_exitActions; } +TimeDescriptor *Rule::timeDescriptor() const +{ + return m_timeDescriptor; +} + void Rule::setStateEvaluator(StateEvaluator *stateEvaluator) { if (m_stateEvaluator) { diff --git a/libnymea-common/types/rule.h b/libnymea-common/types/rule.h index cdfd959d..0aa40db8 100644 --- a/libnymea-common/types/rule.h +++ b/libnymea-common/types/rule.h @@ -7,6 +7,7 @@ class EventDescriptors; class RuleActions; class StateEvaluator; +class TimeDescriptor; class Rule : public QObject { @@ -19,6 +20,7 @@ class Rule : public QObject Q_PROPERTY(StateEvaluator* stateEvaluator READ stateEvaluator NOTIFY stateEvaluatorChanged) Q_PROPERTY(RuleActions* actions READ actions CONSTANT) Q_PROPERTY(RuleActions* exitActions READ exitActions CONSTANT) + Q_PROPERTY(TimeDescriptor* timeDescriptor READ timeDescriptor CONSTANT) public: explicit Rule(const QUuid &id = QUuid(), QObject *parent = nullptr); @@ -37,6 +39,7 @@ public: StateEvaluator *stateEvaluator() const; RuleActions* actions() const; RuleActions* exitActions() const; + TimeDescriptor* timeDescriptor() const; void setStateEvaluator(StateEvaluator* stateEvaluator); @@ -59,6 +62,7 @@ private: StateEvaluator *m_stateEvaluator = nullptr; RuleActions *m_actions = nullptr; RuleActions *m_exitActions = nullptr; + TimeDescriptor *m_timeDescriptor = nullptr; }; #endif // RULE_H diff --git a/libnymea-common/types/timedescriptor.cpp b/libnymea-common/types/timedescriptor.cpp new file mode 100644 index 00000000..54c0f8f8 --- /dev/null +++ b/libnymea-common/types/timedescriptor.cpp @@ -0,0 +1,6 @@ +#include "timedescriptor.h" + +TimeDescriptor::TimeDescriptor(QObject *parent) : QObject(parent) +{ + +} diff --git a/libnymea-common/types/timedescriptor.h b/libnymea-common/types/timedescriptor.h new file mode 100644 index 00000000..821fdb64 --- /dev/null +++ b/libnymea-common/types/timedescriptor.h @@ -0,0 +1,17 @@ +#ifndef TIMEDESCRIPTOR_H +#define TIMEDESCRIPTOR_H + +#include + +class TimeDescriptor : public QObject +{ + Q_OBJECT +public: + explicit TimeDescriptor(QObject *parent = nullptr); + +signals: + +public slots: +}; + +#endif // TIMEDESCRIPTOR_H \ No newline at end of file diff --git a/libnymea-common/types/timeeventitem.cpp b/libnymea-common/types/timeeventitem.cpp new file mode 100644 index 00000000..cee22edf --- /dev/null +++ b/libnymea-common/types/timeeventitem.cpp @@ -0,0 +1,32 @@ +#include "timeeventitem.h" + +TimeEventItem::TimeEventItem(QObject *parent) : QObject(parent) +{ + +} + +QDateTime TimeEventItem::dateTime() const +{ + return m_dateTime; +} + +void TimeEventItem::setDateTime(const QDateTime &dateTime) +{ + if (m_dateTime != dateTime) { + m_dateTime = dateTime; + emit dateTimeChanged(); + } +} + +QTime TimeEventItem::time() const +{ + return m_time; +} + +void TimeEventItem::setTime(const QTime &time) +{ + if (m_time != time) { + m_time = time; + emit timeChanged(); + } +} diff --git a/libnymea-common/types/timeeventitem.h b/libnymea-common/types/timeeventitem.h new file mode 100644 index 00000000..ad48e090 --- /dev/null +++ b/libnymea-common/types/timeeventitem.h @@ -0,0 +1,33 @@ +#ifndef TIMEEVENTITEM_H +#define TIMEEVENTITEM_H + +#include +#include +#include + +class TimeEventItem : public QObject +{ + Q_OBJECT + Q_PROPERTY(QDateTime dateTime READ dateTime WRITE setDateTime NOTIFY dateTimeChanged) + Q_PROPERTY(QTime time READ time WRITE setTime NOTIFY timeChanged) + +public: + explicit TimeEventItem(QObject *parent = nullptr); + + QDateTime dateTime() const; + void setDateTime(const QDateTime &dateTime); + + QTime time() const; + void setTime(const QTime &time); + +signals: + void dateTimeChanged(); + void timeChanged(); + +private: + QDateTime m_dateTime; + QTime m_time; + +}; + +#endif // TIMEEVENTITEM_H diff --git a/libnymea-common/types/timeeventitems.cpp b/libnymea-common/types/timeeventitems.cpp new file mode 100644 index 00000000..0449efe1 --- /dev/null +++ b/libnymea-common/types/timeeventitems.cpp @@ -0,0 +1,6 @@ +#include "timeeventitems.h" + +TimeEventItems::TimeEventItems(QObject *parent) : QObject(parent) +{ + +} diff --git a/libnymea-common/types/timeeventitems.h b/libnymea-common/types/timeeventitems.h new file mode 100644 index 00000000..c99fc250 --- /dev/null +++ b/libnymea-common/types/timeeventitems.h @@ -0,0 +1,17 @@ +#ifndef TIMEEVENTITEMS_H +#define TIMEEVENTITEMS_H + +#include + +class TimeEventItems : public QObject +{ + Q_OBJECT +public: + explicit TimeEventItems(QObject *parent = nullptr); + +signals: + +public slots: +}; + +#endif // TIMEEVENTITEMS_H \ No newline at end of file diff --git a/mea/rulemanager.cpp b/mea/rulemanager.cpp index 99f51980..e6a3edd3 100644 --- a/mea/rulemanager.cpp +++ b/mea/rulemanager.cpp @@ -12,6 +12,7 @@ #include "types/stateevaluator.h" #include "types/stateevaluators.h" #include "types/statedescriptor.h" +#include "types/timeeventitem.h" #include @@ -139,10 +140,11 @@ void RuleManager::getRuleDetailsReply(const QVariantMap ¶ms) qDebug() << "Got rule details for a rule we don't know"; return; } -// qDebug() << "got rule details for rule" << ruleMap; + qDebug() << "got rule details for rule" << ruleMap; parseEventDescriptors(ruleMap.value("eventDescriptors").toList(), rule); parseRuleActions(ruleMap.value("actions").toList(), rule); parseRuleExitActions(ruleMap.value("exitActions").toList(), rule); + parseTimeDescriptor(ruleMap.value("timeDescriptor").toMap(), rule); rule->setStateEvaluator(parseStateEvaluator(ruleMap.value("stateEvaluator").toMap())); } @@ -253,3 +255,13 @@ void RuleManager::parseRuleExitActions(const QVariantList &ruleActions, Rule *ru rule->exitActions()->addRuleAction(ruleAction); } } + +void RuleManager::parseTimeDescriptor(const QVariantMap &timeDescriptor, Rule *rule) +{ + foreach (const QVariant &timeEventItemVariant, timeDescriptor.value("timeEventItems").toList()) { + TimeEventItem *timeEventItem = new TimeEventItem(); + timeEventItem->setDateTime(QDateTime::fromSecsSinceEpoch(timeEventItemVariant.toMap().value("datetime").toULongLong())); + timeEventItem->setTime(QTime::fromString(timeEventItemVariant.toMap().value("time").toString())); +// timeEventItem->setRepeatingOption(); + } +} diff --git a/mea/rulemanager.h b/mea/rulemanager.h index 9eb85dc0..297f7e72 100644 --- a/mea/rulemanager.h +++ b/mea/rulemanager.h @@ -45,6 +45,7 @@ private: StateEvaluator* parseStateEvaluator(const QVariantMap &stateEvaluatorMap); void parseRuleActions(const QVariantList &ruleActions, Rule *rule); void parseRuleExitActions(const QVariantList &ruleActions, Rule *rule); + void parseTimeDescriptor(const QVariantMap &timeDescriptor, Rule *rule); signals: void addRuleReply(const QString &ruleError); diff --git a/mea/ui/magic/SelectEventDescriptorParamsPage.qml b/mea/ui/magic/SelectEventDescriptorParamsPage.qml index 2cb3ca63..00169069 100644 --- a/mea/ui/magic/SelectEventDescriptorParamsPage.qml +++ b/mea/ui/magic/SelectEventDescriptorParamsPage.qml @@ -33,6 +33,7 @@ Page { property alias paramType: paramDescriptorDelegate.paramType property alias value: paramDescriptorDelegate.value property alias considerParam: paramCheckBox.checked + property alias operatorType: paramDescriptorDelegate.operatorType CheckBox { id: paramCheckBox text: "Only consider event if" @@ -63,6 +64,7 @@ Page { for (var i = 0; i < delegateRepeater.count; i++) { var paramDelegate = delegateRepeater.itemAt(i); if (paramDelegate.considerParam) { + print("setting param descriptor to", paramDelegate.operatorType) root.eventDescriptor.paramDescriptors.setParamDescriptor(paramDelegate.paramType.id, paramDelegate.value, paramDelegate.operatorType) } }