add basic construction of time management

This commit is contained in:
Simon Stürz 2016-03-29 14:31:23 +02:00 committed by Michael Zanetti
parent 80e7d289f7
commit affcb1ddf6
11 changed files with 185 additions and 4 deletions

View File

@ -462,11 +462,15 @@ void GuhCore::guhTimeout()
{ {
m_deviceManager->timeTick(); m_deviceManager->timeTick();
// TODO: evaluate special times
// Minute based time -> only evaluate time based rules if the minute changed // Minute based time -> only evaluate time based rules if the minute changed
if (m_currentDateTime.time().minute() != QDateTime::currentDateTime().time().minute()) { if (m_currentDateTime.time().minute() != QDateTime::currentDateTime().time().minute()) {
qCDebug(dcApplication) << "Guh time changed" << QDateTime::currentDateTime().time().toString("hh:mm:ss"); qCDebug(dcApplication) << "Guh time changed" << QDateTime::currentDateTime().time().toString("hh:mm:ss");
m_currentDateTime = QDateTime::currentDateTime(); m_currentDateTime = QDateTime::currentDateTime();
// TODO: evaluate timeDescriptor based rules
} }
} }

View File

@ -283,6 +283,8 @@ void JsonTypes::init()
s_logEntry.insert("o:eventType", loggingEventTypeRef()); s_logEntry.insert("o:eventType", loggingEventTypeRef());
s_logEntry.insert("o:errorCode", basicTypeToString(String)); s_logEntry.insert("o:errorCode", basicTypeToString(String));
s_initialized = true; s_initialized = true;
} }
@ -930,6 +932,9 @@ QString JsonTypes::basicTypeToString(const QVariant::Type &type)
case QVariant::Color: case QVariant::Color:
return "Color"; return "Color";
break; break;
case QVariant::Time:
return "Time";
break;
default: default:
return QVariant::typeToName(type); return QVariant::typeToName(type);
break; break;
@ -1472,6 +1477,9 @@ QPair<bool, QString> JsonTypes::validateBasicType(const QVariant &variant)
if (variant.canConvert(QVariant::Color) && QVariant(variant).convert(QVariant::Color)) { if (variant.canConvert(QVariant::Color) && QVariant(variant).convert(QVariant::Color)) {
return report(true, ""); 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())); return report(false, QString("Error validating basic type %1.").arg(variant.toString()));
} }

View File

@ -99,6 +99,7 @@ public:
Bool, Bool,
Variant, Variant,
Color, Color,
Time,
Object Object
}; };

View File

@ -22,9 +22,15 @@
namespace guhserver { 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_startTime(startTime),
m_duration(duration) m_duration(duration),
m_repeatingOption(repeatingOption)
{ {
} }
@ -39,4 +45,18 @@ QTime CalendarItem::duration() const
return m_duration; 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;
}
} }

View File

@ -23,20 +23,30 @@
#include <QTime> #include <QTime>
#include "repeatingoption.h"
namespace guhserver { namespace guhserver {
class CalendarItem class CalendarItem
{ {
public: public:
CalendarItem(const QTime startTime, const QTime duration); CalendarItem();
CalendarItem(const QTime &startTime, const QTime &duration, const RepeatingOption &repeatingOption);
QTime startTime() const; QTime startTime() const;
QTime duration() const; QTime duration() const;
RepeatingOption repeatingOption() const;
bool isValid() const;
bool evaluate(const QDateTime &dateTime) const;
private: private:
QTime m_startTime; QTime m_startTime;
QTime m_duration; QTime m_duration;
RepeatingOption m_repeatingOption;
}; };
} }

View File

@ -22,9 +22,38 @@
namespace guhserver { namespace guhserver {
RepeatingOption::RepeatingOption() RepeatingOption::RepeatingOption() :
m_mode(RepeatingModeNone)
{ {
} }
RepeatingOption::RepeatingOption(const RepeatingMode &mode, const QList<int> &weekDays, const QList<int> &monthDays) :
m_mode(mode),
m_weekDays(weekDays),
m_monthDays(monthDays)
{
}
RepeatingOption::RepeatingMode RepeatingOption::mode() const
{
return m_mode;
}
QList<int> RepeatingOption::weekDays() const
{
return m_weekDays;
}
QList<int> RepeatingOption::monthDays() const
{
return m_monthDays;
}
bool RepeatingOption::isEmtpy() const
{
return m_mode == RepeatingModeNone && m_weekDays.isEmpty() && m_monthDays.isEmpty();
}
} }

View File

@ -21,6 +21,7 @@
#ifndef REPEATINGOPTION_H #ifndef REPEATINGOPTION_H
#define REPEATINGOPTION_H #define REPEATINGOPTION_H
#include <QList>
#include <QMetaType> #include <QMetaType>
namespace guhserver { namespace guhserver {
@ -40,9 +41,20 @@ public:
}; };
RepeatingOption(); RepeatingOption();
RepeatingOption(const RepeatingMode &mode, const QList<int> &weekDays = QList<int>(), const QList<int> &monthDays = QList<int>());
RepeatingMode mode() const;
QList<int> weekDays() const;
QList<int> monthDays() const;
bool isEmtpy() const;
private:
RepeatingMode m_mode;
QList<int> m_weekDays;
QList<int> m_monthDays;
}; };

View File

@ -27,4 +27,29 @@ TimeDescriptor::TimeDescriptor()
} }
QList<TimeEventItem> TimeDescriptor::timeEventItems() const
{
return m_timeEventItems;
}
void TimeDescriptor::setTimeEventItems(const QList<TimeEventItem> &timeEventItems)
{
m_timeEventItems = timeEventItems;
}
QList<CalendarItem> TimeDescriptor::calendarItems() const
{
return m_calendarItems;
}
void TimeDescriptor::setCalendarItems(const QList<CalendarItem> &calendarItems)
{
m_calendarItems = calendarItems;
}
bool TimeDescriptor::isValid() const
{
return !m_timeEventItems.isEmpty() || !m_calendarItems.isEmpty();
}
} }

View File

@ -21,6 +21,9 @@
#ifndef TIMEDESCRIPTOR_H #ifndef TIMEDESCRIPTOR_H
#define TIMEDESCRIPTOR_H #define TIMEDESCRIPTOR_H
#include "timeeventitem.h"
#include "calendaritem.h"
namespace guhserver { namespace guhserver {
class TimeDescriptor class TimeDescriptor
@ -28,6 +31,17 @@ class TimeDescriptor
public: public:
explicit TimeDescriptor(); explicit TimeDescriptor();
QList<TimeEventItem> timeEventItems() const;
void setTimeEventItems(const QList<TimeEventItem> &timeEventItems);
QList<CalendarItem> calendarItems() const;
void setCalendarItems(const QList<CalendarItem> &calendarItems);
bool isValid() const;
private:
QList<TimeEventItem> m_timeEventItems;
QList<CalendarItem> m_calendarItems;
}; };
} }

View File

@ -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();
}
} }

View File

@ -21,6 +21,10 @@
#ifndef TIMEEVENTITEM_H #ifndef TIMEEVENTITEM_H
#define TIMEEVENTITEM_H #define TIMEEVENTITEM_H
#include <QDateTime>
#include "repeatingoption.h"
namespace guhserver { namespace guhserver {
class TimeEventItem class TimeEventItem
@ -28,6 +32,25 @@ class TimeEventItem
public: public:
TimeEventItem(); 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;
}; };
} }