diff --git a/server/time/timeeventitem.cpp b/server/time/timeeventitem.cpp index e22f5aea..bfc89e9a 100644 --- a/server/time/timeeventitem.cpp +++ b/server/time/timeeventitem.cpp @@ -104,7 +104,7 @@ bool TimeEventItem::evaluate(const QDateTime &lastEvaluationTime, const QDateTim begin.setHMS(0, lastEvaluationTime.time().minute(), lastEvaluationTime.time().second()); end.setHMS(0, dateTime.time().minute(), dateTime.time().second()); vut.setHMS(0, m_time.minute(), m_time.second()); - return begin < vut && vut < end; + return begin < vut && vut <= end; } case RepeatingOption::RepeatingModeWeekly: return m_repeatingOption.evaluateWeekDay(dateTime) && @@ -120,13 +120,15 @@ bool TimeEventItem::evaluate(const QDateTime &lastEvaluationTime, const QDateTim } // Check dateTime and yearly repeating - if (m_repeatingOption.mode() == RepeatingOption::RepeatingModeYearly) - return m_dateTime.date().month() == dateTime.date().month() && - m_dateTime.date().day() == dateTime.date().day() && - lastEvaluationTime.time() < m_dateTime.time() && m_dateTime.time() <= dateTime.time(); + if (m_repeatingOption.mode() == RepeatingOption::RepeatingModeYearly) { + // adjust the stored year to the current one... + QDateTime adjustedTime = m_dateTime; + adjustedTime.setDate(QDate(dateTime.date().year(), m_dateTime.date().month(), m_dateTime.date().day())); + return lastEvaluationTime < adjustedTime && adjustedTime <= dateTime; + } // Check dateTime matches - return dateTime == m_dateTime; + return lastEvaluationTime < m_dateTime && m_dateTime <= dateTime; } } diff --git a/tests/auto/timemanager/testtimemanager.cpp b/tests/auto/timemanager/testtimemanager.cpp index 2fb92293..c2251c59 100644 --- a/tests/auto/timemanager/testtimemanager.cpp +++ b/tests/auto/timemanager/testtimemanager.cpp @@ -1408,10 +1408,10 @@ void TestTimeManager::testEventItemYearly() verifyRuleError(response); RuleId ruleId = RuleId(response.toMap().value("params").toMap().value("ruleId").toString()); - QDateTime oneMinuteBeforeEvent = dateTime.addSecs(-60); + // Tick now, one minute before, on time, one minute after // not triggering - GuhCore::instance()->timeManager()->setTime(oneMinuteBeforeEvent); + GuhCore::instance()->timeManager()->setTime(dateTime.addSecs(-60)); verifyRuleNotExecuted(); // trigger GuhCore::instance()->timeManager()->setTime(dateTime); @@ -1421,17 +1421,18 @@ void TestTimeManager::testEventItemYearly() GuhCore::instance()->timeManager()->setTime(dateTime.addSecs(60)); verifyRuleNotExecuted(); - oneMinuteBeforeEvent = oneMinuteBeforeEvent.addYears(1); + // Tick next year, one minute bofore, on time, one minute after + QDateTime nextYear = dateTime.addYears(1); // not triggering - GuhCore::instance()->timeManager()->setTime(oneMinuteBeforeEvent); + GuhCore::instance()->timeManager()->setTime(nextYear.addSecs(-60)); verifyRuleNotExecuted(); // trigger - GuhCore::instance()->timeManager()->setTime(dateTime); + GuhCore::instance()->timeManager()->setTime(nextYear); verifyRuleExecuted(mockActionIdNoParams); cleanupMockHistory(); // not triggering - GuhCore::instance()->timeManager()->setTime(dateTime.addSecs(60)); + GuhCore::instance()->timeManager()->setTime(nextYear.addSecs(60)); verifyRuleNotExecuted(); cleanupMockHistory(); @@ -1469,14 +1470,16 @@ void TestTimeManager::testEnableDisableTimeRule() RuleId ruleId = RuleId(response.toMap().value("params").toMap().value("ruleId").toString()); // not triggering - GuhCore::instance()->timeManager()->setTime(dateTime.addMSecs(-60)); + GuhCore::instance()->timeManager()->setTime(dateTime.addSecs(-2)); + GuhCore::instance()->timeManager()->setTime(dateTime.addSecs(-1)); verifyRuleNotExecuted(); // trigger GuhCore::instance()->timeManager()->setTime(dateTime); verifyRuleExecuted(mockActionIdNoParams); cleanupMockHistory(); // not triggering - GuhCore::instance()->timeManager()->setTime(dateTime.addMSecs(60)); + GuhCore::instance()->timeManager()->setTime(dateTime.addSecs(1)); + GuhCore::instance()->timeManager()->setTime(dateTime.addSecs(2)); verifyRuleNotExecuted(); @@ -1487,6 +1490,7 @@ void TestTimeManager::testEnableDisableTimeRule() verifyRuleError(response); // trigger + GuhCore::instance()->timeManager()->setTime(dateTime.addSecs(-1)); GuhCore::instance()->timeManager()->setTime(dateTime); verifyRuleNotExecuted(); @@ -1496,7 +1500,9 @@ void TestTimeManager::testEnableDisableTimeRule() verifyRuleError(response); // trigger + GuhCore::instance()->timeManager()->setTime(dateTime.addSecs(-1)); GuhCore::instance()->timeManager()->setTime(dateTime); + qWarning() << "-----------------------------------------------"; verifyRuleExecuted(mockActionIdNoParams); cleanupMockHistory();