void CDBirthdayController::updateBirthdays(const QList<QContact> &changedBirthdays) { foreach (const QContact &contact, changedBirthdays) { const QContactBirthday contactBirthday = contact.detail<QContactBirthday>(); #ifdef USING_QTPIM const QString contactDisplayLabel = contact.detail<QContactDisplayLabel>().label(); #else const QString contactDisplayLabel = contact.displayLabel(); #endif const CalendarBirthday calendarBirthday = mCalendar->birthday(apiId(contact)); // Display label or birthdate was removed from the contact, so delete it from the calendar. if (contactDisplayLabel.isEmpty() || contactBirthday.date().isNull()) { if (!calendarBirthday.date().isNull()) { debug() << "Contact: " << apiId(contact) << " removed birthday or displayLabel, so delete the calendar event"; mCalendar->deleteBirthday(apiId(contact)); } // Display label or birthdate was changed on the contact, so update the calendar. } else if ((contactDisplayLabel != calendarBirthday.summary()) || (contactBirthday.date() != calendarBirthday.date())) { debug() << "Contact with calendar birthday: " << calendarBirthday.date() << " and calendar displayLabel: " << calendarBirthday.summary() << " changed details to: " << contactBirthday.date() << contactDisplayLabel << ", so update the calendar event"; mCalendar->updateBirthday(contact); } } }
QContactDetail *CntTransformBirthday::transformItemField(const CContactItemField& field, const QContact &contact) { Q_UNUSED(contact); QContactBirthday *birthday = new QContactBirthday(); CContactDateField* storage = field.DateTimeStorage(); TTime time(storage->Time()); QDate qDate(time.DateTime().Year(), time.DateTime().Month() + 1, time.DateTime().Day() + 1); birthday->setDate(qDate); return birthday; }
void TestBirthdayPlugin::testChangeName() { const QString contactID = QUuid::createUuid().toString(); const QDateTime contactBirthDate = QDateTime::currentDateTime(); // Add contact with birthday to tracker. QContactName contactName; contactName.setFirstName(contactID); QContactBirthday contactBirthday; contactBirthday.setDateTime(contactBirthDate); QContact contact; QVERIFY(contact.saveDetail(&contactName)); QVERIFY(contact.saveDetail(&contactBirthday)); QVERIFY2(mManager->saveContact(&contact), "Error saving contact to tracker"); // Wait until calendar event gets to calendar. loopWait(calendarTimeout); // Open calendar database. mKCal::ExtendedCalendar::Ptr calendar = mKCal::ExtendedCalendar::Ptr(new mKCal::ExtendedCalendar(KDateTime::Spec::LocalZone())); mKCal::ExtendedStorage::Ptr storage = mKCal::ExtendedCalendar::defaultStorage(calendar); storage->open(); QVERIFY2(not storage->notebook(calNotebookId).isNull(), "No calendar database found"); // Check calendar database for contact. QVERIFY2(storage->loadNotebookIncidences(calNotebookId), "Unable to load events from notebook"); KCalCore::Event::List eventList = calendar->events(); QCOMPARE(countCalendarEvents(eventList, contact), 1); // Change the contact name and see if the calendar is updated. const QString newContactID = QUuid::createUuid().toString(); contactName.setFirstName(newContactID); QVERIFY(contact.saveDetail(&contactName)); // TODO: Should it be necessary to refetch the contact to get the synthesised displayLabel? contact = mManager->contact(apiId(contact)); QVERIFY2(mManager->saveContact(&contact), "Unable to update test contact in tracker"); // Wait until calendar event gets to calendar. loopWait(calendarTimeout); // Search for any events in the calendar. QVERIFY2(storage->loadNotebookIncidences(calNotebookId), "Unable to load events from notebook"); eventList = calendar->events(); QCOMPARE(countCalendarEvents(eventList, contact), 1); // Close the calendar. QVERIFY2(storage->close(), "Error closing the calendar"); }
void CDBirthdayController::syncBirthdays(const QList<QContact> &birthdayContacts) { QHash<ContactIdType, CalendarBirthday> oldBirthdays = mCalendar->birthdays(); // Check all birthdays from the contacts if the stored calendar item is up-to-date foreach (const QContact &contact, birthdayContacts) { #ifdef USING_QTPIM const QString contactDisplayLabel = contact.detail<QContactDisplayLabel>().label(); #else const QString contactDisplayLabel = contact.displayLabel(); #endif if (contactDisplayLabel.isNull()) { debug() << "Contact: " << contact << " has no displayLabel, so not syncing to calendar"; continue; } QHash<ContactIdType, CalendarBirthday>::Iterator it = oldBirthdays.find(apiId(contact)); if (oldBirthdays.end() != it) { const QContactBirthday contactBirthday = contact.detail<QContactBirthday>(); const CalendarBirthday &calendarBirthday = *it; // Display label or birthdate was changed on the contact, so update the calendar. if ((contactDisplayLabel != calendarBirthday.summary()) || (contactBirthday.date() != calendarBirthday.date())) { debug() << "Contact with calendar birthday: " << contactBirthday.date() << " and calendar displayLabel: " << calendarBirthday.summary() << " changed details to: " << contact << ", so update the calendar event"; mCalendar->updateBirthday(contact); } // Birthday exists, so not a garbage one oldBirthdays.erase(it); } else { // Create new birthday mCalendar->updateBirthday(contact); } } // Remaining old birthdays in the calendar db do not did not match any contact, so remove them. foreach (const ContactIdType &id, oldBirthdays.keys()) { debug() << "Birthday with contact id" << id << "no longer has a matching contact, trashing it"; mCalendar->deleteBirthday(id); } }
void TestBirthdayPlugin::testLeapYears() { const QString contactID = QUuid::createUuid().toString(); QFETCH(QDate, contactBirthDate); // Add contact with birthday to tracker. QContactName contactName; contactName.setFirstName(contactID); QContactBirthday contactBirthday; contactBirthday.setDate(contactBirthDate); QContact contact; QVERIFY(contact.saveDetail(&contactName)); QVERIFY(contact.saveDetail(&contactBirthday)); QVERIFY(saveContact(contact)); // Wait until calendar event gets to calendar. loopWait(calendarTimeout); // Open calendar database. mKCal::ExtendedCalendar::Ptr calendar = mKCal::ExtendedCalendar::Ptr(new mKCal::ExtendedCalendar(KDateTime::Spec::LocalZone())); mKCal::ExtendedStorage::Ptr storage = mKCal::ExtendedCalendar::defaultStorage(calendar); QVERIFY(storage->open()); QVERIFY(not storage->notebook(calNotebookId).isNull()); // Check calendar database for contact. QVERIFY(storage->loadNotebookIncidences(calNotebookId)); const KCalCore::Event::List eventList = findCalendarEvents(calendar->events(), contact); QCOMPARE(eventList.count(), 1); const KCalCore::Event::Ptr event = eventList.first(); QCOMPARE(event->summary(), contactID); QCOMPARE(event->dtStart().date(), contactBirthDate); QCOMPARE(event->allDay(), true); // Check number of recurrences and their values. const KDateTime first(QDate(2000, 1, 1), QTime(), KDateTime::ClockTime); const KDateTime last(QDate(2020, 12, 31), QTime(), KDateTime::ClockTime); const KCalCore::DateTimeList instances = event->recurrence()->timesInInterval(first, last); QCOMPARE(instances.length(), 13); for(int i = 0; i < instances.length(); ++i) { QCOMPARE(instances.at(i).date(), contactBirthDate.addYears(i)); } }
void TestBirthdayPlugin::testAddAndRemoveBirthday() { const QString contactID = QUuid::createUuid().toString(); const QDateTime contactBirthDate = QDateTime::currentDateTime(); // Add contact with birthday to tracker. QContactName contactName; contactName.setFirstName(contactID); QContactBirthday contactBirthday; contactBirthday.setDateTime(contactBirthDate); QContact contact; QVERIFY(contact.saveDetail(&contactName)); QVERIFY(contact.saveDetail(&contactBirthday)); QVERIFY2(mManager->saveContact(&contact), "Error saving contact to tracker"); // Wait until calendar event gets to calendar. loopWait(calendarTimeout); // Open calendar database, which should have been created by the birthday plugin. mKCal::ExtendedCalendar::Ptr calendar = mKCal::ExtendedCalendar::Ptr(new mKCal::ExtendedCalendar(KDateTime::Spec::LocalZone())); mKCal::ExtendedStorage::Ptr storage = mKCal::ExtendedCalendar::defaultStorage(calendar); storage->open(); QVERIFY2(not storage->notebook(calNotebookId).isNull(), "No calendar database found"); // Check calendar database for contact. QVERIFY2(storage->loadNotebookIncidences(calNotebookId), "Unable to load events from notebook"); KCalCore::Event::List eventList = calendar->events(); QCOMPARE(countCalendarEvents(eventList, contact), 1); // Delete the contact and see if the birthday is also deleted. QVERIFY2(mManager->removeContact(apiId(contact)), "Unable to delete test contact from tracker database"); // Wait until calendar event gets to calendar. loopWait(calendarTimeout); // Search for any events in the calendar. QVERIFY2(storage->loadNotebookIncidences(calNotebookId), "Unable to load events from notebook"); eventList = calendar->events(); QCOMPARE(countCalendarEvents(eventList, contact), 0); // Close the calendar. QVERIFY2(storage->close(), "Error closing the calendar"); }
void SymbianPluginPerfomance::createComplexContacts() { // Create N contacts QList<QContact> contactsList; for(int i=0; i<NO_OF_CONTACTS; i++) { QContact alice; // Contact details QString c = QString::number(i); QString first("Alice"); QString last("Jones"); QContactName aliceName; aliceName.setFirstName(first.append(c)); aliceName.setLastName(last.append(c)); alice.saveDetail(&aliceName); QContactPhoneNumber number; number.setContexts("Home"); number.setSubTypes("Mobile"); number.setNumber("12345678"); alice.saveDetail(&number); alice.setPreferredDetail("DialAction", number); QContactPhoneNumber number2; number2.setContexts("Work"); number2.setSubTypes("Landline"); number2.setNumber("555-4444"); alice.saveDetail(&number2); QContactAddress add; add.setStreet("Leeds West Yorkshire"); add.setPostcode("10087"); add.setRegion("New York"); add.setCountry("United States"); alice.saveDetail(&add); /* Commented out to ensure compatibility with pre-10.1 platforms QContactGender gender; gender.setGender("Female"); alice.saveDetail(&gender); */ QContactBirthday bday; bday.setDate(QDate(25,10,1978)); alice.saveDetail(&bday); /* Commented out to ensure compatibility with pre-10.1 platforms QContactOnlineAccount acc; acc.setAccountUri("sips:[email protected]"); acc.setSubTypes(QContactOnlineAccount::SubTypeSip); alice.saveDetail(&acc); */ QContactEmailAddress email; email.setEmailAddress("mailto:[email protected]"); alice.saveDetail(&email); QContactOrganization org; org.setDepartment(QStringList("Services")); org.setTitle("Assistant Manager"); // Commented out to ensure compatibility with pre-10.1 platforms //org.setLocation("Nokia Cyber Park"); alice.saveDetail(&org); contactsList.append(alice); } // Save the contacts mTime.restart(); QMap<int, QContactManager::Error> errors; mCntMng->saveContacts(&contactsList, &errors); foreach(QContactManager::Error error, errors) { QCOMPARE(error, QContactManager::NoError); }