diff --git a/server/guhcore.cpp b/server/guhcore.cpp index 897c1ad2..9add12d0 100644 --- a/server/guhcore.cpp +++ b/server/guhcore.cpp @@ -462,11 +462,15 @@ void GuhCore::guhTimeout() { m_deviceManager->timeTick(); + // TODO: evaluate special times + // Minute based time -> only evaluate time based rules if the minute changed if (m_currentDateTime.time().minute() != QDateTime::currentDateTime().time().minute()) { qCDebug(dcApplication) << "Guh time changed" << QDateTime::currentDateTime().time().toString("hh:mm:ss"); m_currentDateTime = QDateTime::currentDateTime(); + // TODO: evaluate timeDescriptor based rules + } } diff --git a/server/jsonrpc/jsontypes.cpp b/server/jsonrpc/jsontypes.cpp index b529abfe..691fcbc1 100644 --- a/server/jsonrpc/jsontypes.cpp +++ b/server/jsonrpc/jsontypes.cpp @@ -283,6 +283,8 @@ void JsonTypes::init() s_logEntry.insert("o:eventType", loggingEventTypeRef()); s_logEntry.insert("o:errorCode", basicTypeToString(String)); + + s_initialized = true; } @@ -930,6 +932,9 @@ QString JsonTypes::basicTypeToString(const QVariant::Type &type) case QVariant::Color: return "Color"; break; + case QVariant::Time: + return "Time"; + break; default: return QVariant::typeToName(type); break; @@ -1472,6 +1477,9 @@ QPair JsonTypes::validateBasicType(const QVariant &variant) if (variant.canConvert(QVariant::Color) && QVariant(variant).convert(QVariant::Color)) { return report(true, ""); } + if (variant.canConvert(QVariant::Time) && QVariant(variant).convert(QVariant::Time)) { + return report(true, ""); + } return report(false, QString("Error validating basic type %1.").arg(variant.toString())); } diff --git a/server/jsonrpc/jsontypes.h b/server/jsonrpc/jsontypes.h index 88f52e55..4ae351d1 100644 --- a/server/jsonrpc/jsontypes.h +++ b/server/jsonrpc/jsontypes.h @@ -99,6 +99,7 @@ public: Bool, Variant, Color, + Time, Object }; diff --git a/server/time/calendaritem.cpp b/server/time/calendaritem.cpp index e1aedea1..8b5c8ec8 100644 --- a/server/time/calendaritem.cpp +++ b/server/time/calendaritem.cpp @@ -22,9 +22,15 @@ namespace guhserver { -CalendarItem::CalendarItem(const QTime startTime, const QTime duration) : +CalendarItem::CalendarItem() +{ + +} + +CalendarItem::CalendarItem(const QTime &startTime, const QTime &duration, const RepeatingOption &repeatingOption) : m_startTime(startTime), - m_duration(duration) + m_duration(duration), + m_repeatingOption(repeatingOption) { } @@ -39,4 +45,18 @@ QTime CalendarItem::duration() const return m_duration; } +bool CalendarItem::isValid() const +{ + return !m_startTime.isNull() && !m_duration.isNull(); +} + +bool CalendarItem::evaluate(const QDateTime &dateTime) const +{ + Q_UNUSED(dateTime) + + // TODO: evaluate the calendar item, return true if the current time matches the calendar item, otherwise false + + return false; +} + } diff --git a/server/time/calendaritem.h b/server/time/calendaritem.h index 1df12187..aaed216a 100644 --- a/server/time/calendaritem.h +++ b/server/time/calendaritem.h @@ -23,20 +23,30 @@ #include +#include "repeatingoption.h" + namespace guhserver { class CalendarItem { public: - CalendarItem(const QTime startTime, const QTime duration); + CalendarItem(); + CalendarItem(const QTime &startTime, const QTime &duration, const RepeatingOption &repeatingOption); QTime startTime() const; QTime duration() const; + RepeatingOption repeatingOption() const; + + bool isValid() const; + + bool evaluate(const QDateTime &dateTime) const; + private: QTime m_startTime; QTime m_duration; + RepeatingOption m_repeatingOption; }; } diff --git a/server/time/repeatingoption.cpp b/server/time/repeatingoption.cpp index e3e02bee..43ec7845 100644 --- a/server/time/repeatingoption.cpp +++ b/server/time/repeatingoption.cpp @@ -22,9 +22,38 @@ namespace guhserver { -RepeatingOption::RepeatingOption() +RepeatingOption::RepeatingOption() : + m_mode(RepeatingModeNone) { } +RepeatingOption::RepeatingOption(const RepeatingMode &mode, const QList &weekDays, const QList &monthDays) : + m_mode(mode), + m_weekDays(weekDays), + m_monthDays(monthDays) +{ + +} + +RepeatingOption::RepeatingMode RepeatingOption::mode() const +{ + return m_mode; +} + +QList RepeatingOption::weekDays() const +{ + return m_weekDays; +} + +QList RepeatingOption::monthDays() const +{ + return m_monthDays; +} + +bool RepeatingOption::isEmtpy() const +{ + return m_mode == RepeatingModeNone && m_weekDays.isEmpty() && m_monthDays.isEmpty(); +} + } diff --git a/server/time/repeatingoption.h b/server/time/repeatingoption.h index c32edd85..573cdd4d 100644 --- a/server/time/repeatingoption.h +++ b/server/time/repeatingoption.h @@ -21,6 +21,7 @@ #ifndef REPEATINGOPTION_H #define REPEATINGOPTION_H +#include #include namespace guhserver { @@ -40,9 +41,20 @@ public: }; RepeatingOption(); + RepeatingOption(const RepeatingMode &mode, const QList &weekDays = QList(), const QList &monthDays = QList()); + RepeatingMode mode() const; + QList weekDays() const; + QList monthDays() const; + bool isEmtpy() const; + +private: + RepeatingMode m_mode; + + QList m_weekDays; + QList m_monthDays; }; diff --git a/server/time/timedescriptor.cpp b/server/time/timedescriptor.cpp index 1cbc6b33..ca1ea8a9 100644 --- a/server/time/timedescriptor.cpp +++ b/server/time/timedescriptor.cpp @@ -27,4 +27,29 @@ TimeDescriptor::TimeDescriptor() } +QList TimeDescriptor::timeEventItems() const +{ + return m_timeEventItems; +} + +void TimeDescriptor::setTimeEventItems(const QList &timeEventItems) +{ + m_timeEventItems = timeEventItems; +} + +QList TimeDescriptor::calendarItems() const +{ + return m_calendarItems; +} + +void TimeDescriptor::setCalendarItems(const QList &calendarItems) +{ + m_calendarItems = calendarItems; +} + +bool TimeDescriptor::isValid() const +{ + return !m_timeEventItems.isEmpty() || !m_calendarItems.isEmpty(); +} + } diff --git a/server/time/timedescriptor.h b/server/time/timedescriptor.h index 8bde04d9..b2cfd142 100644 --- a/server/time/timedescriptor.h +++ b/server/time/timedescriptor.h @@ -21,6 +21,9 @@ #ifndef TIMEDESCRIPTOR_H #define TIMEDESCRIPTOR_H +#include "timeeventitem.h" +#include "calendaritem.h" + namespace guhserver { class TimeDescriptor @@ -28,6 +31,17 @@ class TimeDescriptor public: explicit TimeDescriptor(); + QList timeEventItems() const; + void setTimeEventItems(const QList &timeEventItems); + + QList calendarItems() const; + void setCalendarItems(const QList &calendarItems); + + bool isValid() const; + +private: + QList m_timeEventItems; + QList m_calendarItems; }; } diff --git a/server/time/timeeventitem.cpp b/server/time/timeeventitem.cpp index feabba25..8883adb1 100644 --- a/server/time/timeeventitem.cpp +++ b/server/time/timeeventitem.cpp @@ -27,4 +27,39 @@ TimeEventItem::TimeEventItem() } +QDateTime TimeEventItem::dateTime() const +{ + return m_dateTimer; +} + +void TimeEventItem::setDateTimer(const int &timeStamp) +{ + m_dateTimer = QDateTime::fromTime_t(timeStamp); +} + +QTime TimeEventItem::time() const +{ + return m_time; +} + +void TimeEventItem::setTimer(const QTime &time) +{ + m_time = time; +} + +RepeatingOption TimeEventItem::repatingOption() const +{ + return m_repeatingOption; +} + +void TimeEventItem::setRepeatingOption(const RepeatingOption &repeatingOption) +{ + m_repeatingOption = repeatingOption; +} + +bool TimeEventItem::isValid() const +{ + return !m_dateTimer.isNull() || !m_time.isNull(); +} + } diff --git a/server/time/timeeventitem.h b/server/time/timeeventitem.h index c31770a8..74e36b47 100644 --- a/server/time/timeeventitem.h +++ b/server/time/timeeventitem.h @@ -21,6 +21,10 @@ #ifndef TIMEEVENTITEM_H #define TIMEEVENTITEM_H +#include + +#include "repeatingoption.h" + namespace guhserver { class TimeEventItem @@ -28,6 +32,25 @@ class TimeEventItem public: TimeEventItem(); + QDateTime dateTime() const; + void setDateTimer(const int &timeStamp); + + QTime time() const; + void setTimer(const QTime &time); + + RepeatingOption repatingOption() const; + void setRepeatingOption(const RepeatingOption &repeatingOption); + + // TODO spectioalDayTime + + bool isValid() const; + +private: + QDateTime m_dateTimer; + QTime m_time; + + RepeatingOption m_repeatingOption; + }; }