{
CalEvent* pEvent = __pCalendarbook->GetEventN(event.GetOriginalEventId());
RecordId baseId = pEvent->GetBaseEventId();
- delete pEvent;
if (baseId == INVALID_RECORD_ID && event.IsRecurring())
{
- return true;
+ const Recurrence* pRecurrence = pEvent->GetRecurrence();
+ if (pRecurrence->GetCounts() > 1)
+ {
+ return true;
+ }
+ else if (pRecurrence->GetUntil())
+ {
+ DateTime untilDateChecker = ResourceManager::ConvertUtcTimeToWallTime(pEvent->GetStartTime());
+ switch (pRecurrence->GetFrequency())
+ {
+ case FREQ_DAILY:
+ untilDateChecker.AddDays(pRecurrence->GetInterval());
+ break;
+ case FREQ_WEEKLY:
+ untilDateChecker.AddDays(7 * pRecurrence->GetInterval());
+ break;
+ case FREQ_MONTHLY:
+ untilDateChecker.AddMonths(pRecurrence->GetInterval());
+ break;
+ case FREQ_YEARLY:
+ untilDateChecker.AddYears(pRecurrence->GetInterval());
+ break;
+ }
+
+ if (*pRecurrence->GetUntil() >= untilDateChecker)
+ {
+ return true;
+ }
+ }
+ return false;
}
else
{
return false;
}
+ delete pEvent;
}
{
if (__pEvent->GetBaseEventId() == INVALID_RECORD_ID && __pRecurrence)
{
- return true;
+ if (__pRecurrence->GetCounts() > 1)
+ {
+ return true;
+ }
+ else if (__pRecurrence->GetUntil())
+ {
+ DateTime untilDateChecker = ResourceManager::ConvertUtcTimeToWallTime(__pEvent->GetStartTime());
+ switch (__pRecurrence->GetFrequency())
+ {
+ case FREQ_DAILY:
+ untilDateChecker.AddDays(__pRecurrence->GetInterval());
+ break;
+ case FREQ_WEEKLY:
+ untilDateChecker.AddDays(7 * __pRecurrence->GetInterval());
+ break;
+ case FREQ_MONTHLY:
+ untilDateChecker.AddMonths(__pRecurrence->GetInterval());
+ break;
+ case FREQ_YEARLY:
+ untilDateChecker.AddYears(__pRecurrence->GetInterval());
+ break;
+ }
+
+ if (*__pRecurrence->GetUntil() >= untilDateChecker)
+ {
+ return true;
+ }
+ }
+ return false;
}
else
{