void tst_QVersitOrganizerExporter::testExportEventDetails() { QFETCH(QList<QOrganizerItemDetail>, details); QFETCH(QList<QVersitProperty>, expectedProperties); QVersitOrganizerExporter exporter; QOrganizerEvent item; foreach (QOrganizerItemDetail detail, details) { item.saveDetail(&detail); }
QOrganizerEvent OrganizerItemTransform::convertCEventToQEvent(CEvent *cevent) { QOrganizerEvent retn; // Priority int tempint = cevent->getPriority(); if (tempint != -1) retn.setPriority(static_cast<QOrganizerItemPriority::Priority>(tempint)); // assume that the saved priority is vCal compliant. // Location geo coordinates QOrganizerItemLocation loc = retn.detail<QOrganizerItemLocation>(); if(addGeoToQOIL(QString::fromStdString(cevent->getGeo()), &loc)) retn.saveDetail(&loc); // Start time QDateTime tempdt = QDateTime::fromTime_t(cevent->getDateStart()); if (!tempdt.isNull()) retn.setStartDateTime(tempdt); // End time tempdt = QDateTime::fromTime_t(cevent->getDateEnd()); if (!tempdt.isNull()) retn.setEndDateTime(tempdt); // Recurrence information m_recTransformer.transformToQrecurrence(cevent->getRecurrence()); retn.setRecurrenceRules(m_recTransformer.recurrenceRules()); retn.setExceptionRules(m_recTransformer.exceptionRules()); retn.setRecurrenceDates(m_recTransformer.recurrenceDates()); retn.setExceptionDates(m_recTransformer.exceptionDates()); return retn; }
void tst_QOrganizerItemDetails::type() { QOrganizerItem oi; QOrganizerItemType t1, t2; QOrganizerEvent e; QOrganizerNote n; QOrganizerTodo t; QOrganizerJournal j; QOrganizerEventOccurrence eo; QOrganizerTodoOccurrence to; QVERIFY(e.type() == QOrganizerItemType::TypeEvent); QVERIFY(n.type() == QOrganizerItemType::TypeNote); QVERIFY(t.type() == QOrganizerItemType::TypeTodo); QVERIFY(j.type() == QOrganizerItemType::TypeJournal); QVERIFY(eo.type() == QOrganizerItemType::TypeEventOccurrence); QVERIFY(to.type() == QOrganizerItemType::TypeTodoOccurrence); // test property set t1.setType(QOrganizerItemType::TypeEvent); QCOMPARE(t1.type(), QOrganizerItemType::TypeEvent); QCOMPARE(static_cast<QOrganizerItemType::ItemType>(t1.value(QOrganizerItemType::FieldType).toInt()), QOrganizerItemType::TypeEvent); // test property add QVERIFY(oi.saveDetail(&t1)); QCOMPARE(oi.details(QOrganizerItemDetail::TypeItemType).count(), 1); QCOMPARE(QOrganizerItemType(oi.details(QOrganizerItemDetail::TypeItemType).value(0)).type(), t1.type()); // test property update t1.setType(QOrganizerItemType::TypeTodo); QVERIFY(oi.saveDetail(&t1)); QCOMPARE(static_cast<QOrganizerItemType::ItemType>(oi.details(QOrganizerItemDetail::TypeItemType).value(0).value(QOrganizerItemType::FieldType).toInt()), QOrganizerItemType::TypeTodo); // test property remove QVERIFY(!oi.removeDetail(&t1)); // cannot remove type QCOMPARE(oi.details(QOrganizerItemDetail::TypeItemType).count(), 1); t2.setType(QOrganizerItemType::TypeNote); QVERIFY(oi.saveDetail(&t2)); // overwrites t1 QCOMPARE(oi.details(QOrganizerItemDetail::TypeItemType).count(), 1); QVERIFY(!oi.removeDetail(&t2)); // cannot remove type - "succeeds" but count remains unchanged QCOMPARE(oi.details(QOrganizerItemDetail::TypeItemType).count(), 1); QVERIFY(!oi.removeDetail(&t2)); QCOMPARE(oi.details(QOrganizerItemDetail::TypeItemType).count(), 1); }
QDateTime TimeZone::convert(const QDateTime& dateTime) const { Q_ASSERT(isValid()); QOrganizerManager* manager = getManager(); int offset = 100000; // impossible value QDateTime latestPhase; foreach(const TimeZonePhase& phase, mPhases) { QOrganizerEvent event; event.setStartDateTime(phase.startDateTime()); event.setRecurrenceRules(QSet<QOrganizerRecurrenceRule>() << phase.recurrenceRule()); event.setRecurrenceDates(phase.recurrenceDates()); QList<QOrganizerItem> occurrences = manager->itemOccurrences(event, phase.startDateTime(), dateTime, 500); if (!occurrences.isEmpty()) { QDateTime phaseStart(static_cast<QOrganizerEventOccurrence>(occurrences.last()).startDateTime()); if (phaseStart > latestPhase) { latestPhase = phaseStart; offset = phase.utcOffset(); } } }
void tst_QOrganizerItemDetails::eventTime() { QOrganizerEventTime r; QOrganizerEvent e; QVERIFY(r.isEmpty()); QVERIFY(!r.isAllDay()); r.setStartDateTime(QDateTime(QDate(2010, 10, 13))); QVERIFY(r.startDateTime() == QDateTime(QDate(2010, 10, 13))); QVERIFY(!r.isAllDay()); r.setAllDay(true); QVERIFY(r.isAllDay()); r.setEndDateTime(QDateTime(QDate(2010, 10, 14))); QVERIFY(r.endDateTime() == QDateTime(QDate(2010, 10, 14))); // add QOrganizerEventTime r2; r2.setStartDateTime(QDateTime(QDate(2010, 10, 23))); r2.setEndDateTime(QDateTime(QDate(2010, 10, 24))); QVERIFY(e.saveDetail(&r)); QVERIFY(e.details<QOrganizerEventTime>().size() == 1); QVERIFY(e.detail<QOrganizerEventTime>() == r); QVERIFY(e.saveDetail(&r2)); // note that we don't enforce uniqueness in organizeritem; that's done by the manager! QVERIFY(e.details<QOrganizerEventTime>().size() == 2); QVERIFY(e.removeDetail(&r2)); QVERIFY(e.details<QOrganizerEventTime>().size() == 1); QVERIFY(e.detail<QOrganizerEventTime>() == r); // update r.setAllDay(false); QVERIFY(e.detail<QOrganizerEventTime>() != r); QVERIFY(e.saveDetail(&r)); QVERIFY(e.detail<QOrganizerEventTime>() == r); QVERIFY(e.details<QOrganizerEventTime>().size() == 1); // remove QVERIFY(e.removeDetail(&r)); QVERIFY(e.details<QOrganizerEventTime>().size() == 0); }
void snippets() { //! [Instantiating the default manager for the platform] QOrganizerManager defaultManager; //! [Instantiating the default manager for the platform] //! [Instantiating a specific manager] QOrganizerManager specificManager("KCal"); //! [Instantiating a specific manager] // XXX TODO: use rrule instead of rdates. QDateTime startDateTime = QDateTime::currentDateTime(); QDate firstOccDate = startDateTime.date().addDays(7); QDate secondOccDate = startDateTime.date().addDays(14); QDate thirdOccDate = startDateTime.date().addDays(21); QDateTime endDateTime = startDateTime.addDays(28); QSet<QDate> rDates; rDates << firstOccDate << secondOccDate << thirdOccDate; //! [Creating a recurrent event] QOrganizerEvent marshmallowMeeting; marshmallowMeeting.setRecurrenceDates(rDates); marshmallowMeeting.setPriority(QOrganizerItemPriority::HighPriority); marshmallowMeeting.setLocation("Meeting Room 8"); marshmallowMeeting.setDescription("A meeting every wednesday to discuss the vitally important topic of marshmallows"); marshmallowMeeting.setDisplayLabel("Marshmallow Conference"); if (!defaultManager.saveItem(&marshmallowMeeting)) qDebug() << "Failed to save the recurrent event; error:" << defaultManager.error(); //! [Creating a recurrent event] //! [Retrieving occurrences of a particular recurrent event within a time period] QList<QOrganizerItem> instances = defaultManager.itemOccurrences(marshmallowMeeting, startDateTime, endDateTime); //! [Retrieving occurrences of a particular recurrent event within a time period] qDebug() << "dumping retrieved instances:"; foreach(const QOrganizerItem& currInst, instances) { dumpItem(currInst); qDebug() << "...................."; }
void tst_QVersitOrganizerExporter::testExport_data() { QTest::addColumn<QList<QOrganizerItem> >("items"); QTest::addColumn<QVersitDocument>("expectedDocument"); { QVersitDocument document(QVersitDocument::ICalendar20Type); document.setComponentType(QLatin1String("VCALENDAR")); QVersitDocument nested(QVersitDocument::ICalendar20Type); nested.setComponentType(QLatin1String("VEVENT")); QVersitProperty property; property.setName(QLatin1String("SUMMARY")); property.setValue(QLatin1String("Bastille Day Party")); nested.addProperty(property); property.setName(QLatin1String("DTSTART")); property.setValue(QLatin1String("19970714T170000Z")); nested.addProperty(property); property.setName(QLatin1String("DTEND")); property.setValue(QLatin1String("19970715T035959Z")); nested.addProperty(property); document.addSubDocument(nested); nested.clear(); nested.setType(QVersitDocument::ICalendar20Type); nested.setComponentType(QLatin1String("VTODO")); property.setName(QLatin1String("SUMMARY")); property.setValue(QLatin1String("Take out the garbage")); nested.addProperty(property); property.setName(QLatin1String("DTSTART")); property.setValue(QLatin1String("20100609T080000")); nested.addProperty(property); property.setName(QLatin1String("DUE")); property.setValue(QLatin1String("20100610T080000")); nested.addProperty(property); document.addSubDocument(nested); nested.clear(); nested.setType(QVersitDocument::ICalendar20Type); nested.setComponentType(QLatin1String("VJOURNAL")); property.setName(QLatin1String("SUMMARY")); property.setValue(QLatin1String("Trip to Thailand")); nested.addProperty(property); property.setName(QLatin1String("DTSTART")); property.setValue(QLatin1String("20100615T112300")); nested.addProperty(property); document.addSubDocument(nested); QOrganizerEvent event; event.setDisplayLabel(QLatin1String("Bastille Day Party")); event.setStartDateTime(QDateTime(QDate(1997, 7, 14), QTime(17, 0, 0), Qt::UTC)); event.setEndDateTime(QDateTime(QDate(1997, 7, 15), QTime(3, 59, 59), Qt::UTC)); QOrganizerTodo todo; todo.setDisplayLabel(QLatin1String("Take out the garbage")); todo.setStartDateTime(QDateTime(QDate(2010, 6, 9), QTime(8, 0, 0))); todo.setDueDateTime(QDateTime(QDate(2010, 6, 10), QTime(8, 0, 0))); QOrganizerJournal journal; journal.setDisplayLabel(QLatin1String("Trip to Thailand")); journal.setDateTime(QDateTime(QDate(2010, 6, 15), QTime(11, 23, 0))); QList<QOrganizerItem> items; items << static_cast<QOrganizerItem>(event); items << static_cast<QOrganizerItem>(todo); items << static_cast<QOrganizerItem>(journal); QTest::newRow("sample event, todo and journal") << items << document; } { QVersitDocument document(QVersitDocument::ICalendar20Type); document.setComponentType(QLatin1String("VCALENDAR")); QVersitDocument nested(QVersitDocument::ICalendar20Type); nested.setComponentType(QLatin1String("VEVENT")); QVersitProperty property; property.setName(QLatin1String("UID")); property.setValue(QLatin1String("1234")); nested.addProperty(property); property.setName(QLatin1String("RECURRENCE-ID")); property.setValue(QLatin1String("20100608")); nested.addProperty(property); document.addSubDocument(nested); // An event occurrence with OriginalDate and Guid set QOrganizerEventOccurrence event; event.setGuid(QLatin1String("1234")); event.setOriginalDate(QDate(2010, 6, 8)); QList<QOrganizerItem> items; items << static_cast<QOrganizerItem>(event); QTest::newRow("event occurrence exception") << items << document; } }
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); }
void CalendarThreadWrapper::addToCalendar() { #if defined(MEEGO_EDITION_HARMATTAN) || defined(Q_WS_MAEMO_5) || defined(Q_OS_SYMBIAN) QString desc; const QString viaStation = m_result->viaStation(); if (viaStation.isEmpty()) desc.append(tr("%1 to %2").arg(m_result->departureStation()).arg(m_result->arrivalStation()) + "\n"); else desc.append(tr("%1 via %3 to %2").arg(m_result->departureStation()).arg(m_result->arrivalStation()).arg(viaStation) + "\n"); if (!m_result->info().isEmpty()) { desc.append(m_result->info() + "\n"); } for (int i=0; i < m_result->itemcount(); i++) { JourneyDetailResultItem *item = m_result->getItem(i); if (!item->train().isEmpty()) { desc.append(item->train() + "\n"); } desc.append(item->departureDateTime().date().toString() + " " + item->departureDateTime().time().toString("HH:mm") + " " + item->departureStation()); if (!item->departureInfo().isEmpty()) { desc.append(" - " + item->departureInfo()); } desc.append("\n"); desc.append(item->arrivalDateTime().date().toString() + " " + item->arrivalDateTime().time().toString("HH:mm") + " " + item->arrivalStation()); if (!item->arrivalInfo().isEmpty()) { desc.append(" - " + item->arrivalInfo()); } desc.append("\n"); if (!item->info().isEmpty()) { desc.append(item->info() + "\n"); } desc.append("--\n"); } desc.append(tr("\n(added by fahrplan app, please recheck informations before travel.)")); QOrganizerManager defaultManager; QOrganizerEvent event; if (viaStation.isEmpty()) event.setDisplayLabel(tr("Journey: %1 to %2").arg(m_result->departureStation()).arg(m_result->arrivalStation())); else event.setDisplayLabel(tr("Journey: %1 via %3 to %2").arg(m_result->departureStation()).arg(m_result->arrivalStation()).arg(viaStation)); event.setDescription(desc); event.setStartDateTime(m_result->departureDateTime()); event.setEndDateTime(m_result->arrivalDateTime()); emit addCalendarEntryComplete(defaultManager.saveItem(&event)); #else emit addCalendarEntryComplete(false); #endif QThread::currentThread()->exit(0); // Move back to GUI thread so the deleteLater() callback works (it requires // an event loop which is still alive) moveToThread(QCoreApplication::instance()->thread()); }