void OrganizerItemTransform::addEventPostSaveDetails(QOrganizerItem *item, CEvent *cevent) { // Priority int tempint = cevent->getPriority(); if (tempint != -1) { QOrganizerItemPriority priority = item->detail<QOrganizerItemPriority>(); priority.setPriority(static_cast<QOrganizerItemPriority::Priority>(tempint)); // assume that the saved priority is vCal compliant. item->saveDetail(&priority); } // Start time QDateTime tempdt = QDateTime::fromTime_t(cevent->getDateStart()); if (!tempdt.isNull()) { QOrganizerEventTime eventTime = item->detail<QOrganizerEventTime>(); eventTime.setStartDateTime(tempdt); item->saveDetail(&eventTime); } // End time tempdt = QDateTime::fromTime_t(cevent->getDateEnd()); if (!tempdt.isNull()) { QOrganizerEventTime eventTime = item->detail<QOrganizerEventTime>(); eventTime.setEndDateTime(tempdt); item->saveDetail(&eventTime); } // Recurrence m_recTransformer.transformToQrecurrence(cevent->getRecurrence()); QOrganizerItemRecurrence recurrence = item->detail<QOrganizerItemRecurrence>(); recurrence.setRecurrenceRules(m_recTransformer.recurrenceRules()); recurrence.setExceptionRules(m_recTransformer.exceptionRules()); recurrence.setRecurrenceDates(m_recTransformer.recurrenceDates()); recurrence.setExceptionDates(m_recTransformer.exceptionDates()); item->saveDetail(&recurrence); // Timestamps time_t createdTime = cevent->getCreatedTime(); time_t lastModifiedTime = cevent->getLastModified(); if (createdTime || lastModifiedTime) { QOrganizerItemTimestamp timeStamps = item->detail<QOrganizerItemTimestamp>(); timeStamps.setCreated(QDateTime::fromTime_t(createdTime)); timeStamps.setLastModified(QDateTime::fromTime_t(lastModifiedTime)); item->saveDetail(&timeStamps); } }
void tst_QOrganizerItemDetails::recurrence() { QOrganizerItemRecurrence r; QOrganizerEvent e; QOrganizerRecurrenceRule testRule; testRule.setFrequency(QOrganizerRecurrenceRule::Weekly); testRule.setLimit(4); QSet<QOrganizerRecurrenceRule> rrules; rrules << testRule; QOrganizerRecurrenceRule exrule; exrule.setFrequency(QOrganizerRecurrenceRule::Daily); testRule.setLimit(12); QSet<QOrganizerRecurrenceRule> exrules; exrules << exrule; QSet<QDate> rdates, exdates; rdates << QDate(2010, 10, 13); exdates << QDate(2010, 11, 17) << QDate(2010, 11, 20); QVERIFY(e.details(QOrganizerItemDetail::TypeRecurrence).size() == 0); r.setRecurrenceRules(rrules); QVERIFY(r.recurrenceRules() == rrules); QVERIFY(r.recurrenceDates().isEmpty()); QVERIFY(r.exceptionRules().isEmpty()); r.setExceptionRules(exrules); QVERIFY(r.recurrenceRules() == rrules); QVERIFY(r.exceptionRules() == exrules); QVERIFY(r.exceptionDates().isEmpty()); r.setRecurrenceDates(rdates); QVERIFY(r.recurrenceDates() == rdates); QVERIFY(r.exceptionDates().isEmpty()); QVERIFY(r.recurrenceRules() == rrules); QVERIFY(r.exceptionRules() == exrules); r.setExceptionDates(exdates); QVERIFY(r.recurrenceDates() == rdates); QVERIFY(r.exceptionDates() == exdates); QVERIFY(r.recurrenceRules() == rrules); QVERIFY(r.exceptionRules() == exrules); // now save. QVERIFY(e.saveDetail(&r)); QVERIFY(e.details(QOrganizerItemDetail::TypeRecurrence).size() == 1); QVERIFY(e.detail(QOrganizerItemDetail::TypeRecurrence) == r); // update exdates << QDate(2010, 10, 17); r.setExceptionDates(exdates); QVERIFY(e.detail(QOrganizerItemDetail::TypeRecurrence) != r); QVERIFY(e.saveDetail(&r)); QVERIFY(e.detail(QOrganizerItemDetail::TypeRecurrence) == r); QVERIFY(e.details(QOrganizerItemDetail::TypeRecurrence).size() == 1); // should update, not add another. // remove. QVERIFY(e.removeDetail(&r)); QVERIFY(e.details(QOrganizerItemDetail::TypeRecurrence).size() == 0); }
/*! Sets the given list of dates \a exdates to be dates on which the event explicitly does not occur, even if the recurrence rules suggest that the event should occur on those dates. Any previously specified exception dates will be cleared when this function is called. */ void QOrganizerEvent::setExceptionDates(const QSet<QDate>& exdates) { QOrganizerItemRecurrence rec = detail<QOrganizerItemRecurrence>(); rec.setExceptionDates(exdates); saveDetail(&rec); }