QContactDetail *CntTransformOnlineAccount::transformItemField(const CContactItemField& field, const QContact &contact) { Q_UNUSED(contact); QContactOnlineAccount *onlineAccount = new QContactOnlineAccount(); CContactTextField* storage = field.TextStorage(); QString onlineAccountString = QString::fromUtf16(storage->Text().Ptr(), storage->Text().Length()); // Adding Online Account Detail. for (int i = 0; i < field.ContentType().FieldTypeCount(); i++) { if (field.ContentType().ContainsFieldType(KUidContactFieldVCardMapVOIP)) { onlineAccount->setAccountUri(onlineAccountString); onlineAccount->setSubTypes(QContactOnlineAccount::SubTypeSipVoip); } else if (field.ContentType().ContainsFieldType(KUidContactFieldVCardMapSWIS)) { onlineAccount->setAccountUri(onlineAccountString); onlineAccount->setSubTypes(QContactOnlineAccount::SubTypeVideoShare); } else if (field.ContentType().ContainsFieldType(KUidContactFieldVCardMapSIPID)) { onlineAccount->setAccountUri(onlineAccountString); onlineAccount->setSubTypes(QContactOnlineAccount::SubTypeSip); } } // set context for (int i = 0; i < field.ContentType().FieldTypeCount(); i++) { setContexts(field.ContentType().FieldType(i), *onlineAccount); } return onlineAccount; }
QContactDetail *CntTransformOnlineAccount::transformItemField(const CContactItemField& field, const QContact &contact) { QList<QContactDetail> onlineAccounts = contact.details(QContactOnlineAccount::DefinitionName); TLex label(field.Label()); int counter = -1; if (label.Val(counter) != KErrNone) { return NULL; } //check what online account detail the provided field belongs to. if there is no such detail yet, //let's create it. if (onlineAccounts.count() <= counter) { for (int i = onlineAccounts.count(); i <= counter; i++) { QContactOnlineAccount *account = new QContactOnlineAccount(); QContact& currentContact = const_cast<QContact&>(contact); currentContact.saveDetail(account); delete account; } onlineAccounts = contact.details(QContactOnlineAccount::DefinitionName); } QContactOnlineAccount *onlineAccount = new QContactOnlineAccount(onlineAccounts.at(counter)); CContactTextField* storage = field.TextStorage(); QString onlineAccountString = QString::fromUtf16(storage->Text().Ptr(), storage->Text().Length()); // Adding Online Account Detail. for (int i = 0; i < field.ContentType().FieldTypeCount(); i++) { //Account URI if (field.ContentType().ContainsFieldType(KUidContactFieldIMPP)) { onlineAccount->setAccountUri(onlineAccountString); onlineAccount->setSubTypes(QContactOnlineAccount::SubTypeImpp); } else if (field.ContentType().ContainsFieldType(KUidContactFieldVCardMapVOIP)) { onlineAccount->setAccountUri(onlineAccountString); onlineAccount->setSubTypes(QContactOnlineAccount::SubTypeSipVoip); } else if (field.ContentType().ContainsFieldType(KUidContactFieldVCardMapSWIS)) { onlineAccount->setAccountUri(onlineAccountString); onlineAccount->setSubTypes(QContactOnlineAccount::SubTypeVideoShare); } else if (field.ContentType().ContainsFieldType(KUidContactFieldVCardMapSIPID)) { onlineAccount->setAccountUri(onlineAccountString); onlineAccount->setSubTypes(QContactOnlineAccount::SubTypeSip); } //Service Provider else if (field.ContentType().FieldType(i) == KUidContactFieldServiceProvider) { onlineAccount->setServiceProvider(onlineAccountString); } } // set context for (int i = 0; i < field.ContentType().FieldTypeCount(); i++) { setContexts(field.ContentType().FieldType(i), *onlineAccount); } return onlineAccount; }
void TestSymbianEngine::saveContactWithPreferredDetails() { QContactManager::Error err; //save a contact with preferred details QContact c; c.setType(QContactType::TypeContact); QContactPhoneNumber number1; number1.setNumber("123"); number1.setSubTypes(QContactPhoneNumber::SubTypeMobile); c.saveDetail(&number1); c.setPreferredDetail("call", number1); QContactPhoneNumber number2; number2.setNumber("456"); number2.setSubTypes(QContactPhoneNumber::SubTypeMobile); c.saveDetail(&number2); c.setPreferredDetail("videocall", number2); QContactPhoneNumber number3; number3.setNumber("789"); number3.setSubTypes(QContactPhoneNumber::SubTypeMobile); c.saveDetail(&number3); c.setPreferredDetail("message", number3); QContactEmailAddress email; email.setEmailAddress("dummyemail"); c.saveDetail(&email); c.setPreferredDetail("email", email); QContactOnlineAccount onlineAccount; onlineAccount.setAccountUri("dummy"); onlineAccount.setSubTypes(QContactOnlineAccount::SubTypeImpp); c.saveDetail(&onlineAccount); c.setPreferredDetail("OnlineAccountActions", onlineAccount); QContactUrl url; url.setUrl("http://dummy"); c.saveDetail(&url); c.setPreferredDetail("url", url); QVERIFY(m_engine->saveContact(&c, &err)); QVERIFY(err == QContactManager::NoError); //fetch the saved contact and check preferred details QContactFetchHint hint = QContactFetchHint(); QContact fetched = m_engine->contact(c.localId(), hint, &err); QVERIFY(err == QContactManager::NoError); QContactDetail callDetail1 = fetched.preferredDetail("call"); QVERIFY(callDetail1.definitionName() == QContactPhoneNumber::DefinitionName); QContactPhoneNumber fetchedNumber1 = static_cast<QContactPhoneNumber>(callDetail1); QVERIFY(fetchedNumber1.number() == "123"); QContactDetail callDetail2 = fetched.preferredDetail("videocall"); QVERIFY(callDetail2.definitionName() == QContactPhoneNumber::DefinitionName); QContactPhoneNumber fetchedNumber2 = static_cast<QContactPhoneNumber>(callDetail2); QVERIFY(fetchedNumber2.number() == "456"); QContactDetail callDetail3 = fetched.preferredDetail("message"); QVERIFY(callDetail3.definitionName() == QContactPhoneNumber::DefinitionName); QContactPhoneNumber fetchedNumber3 = static_cast<QContactPhoneNumber>(callDetail3); QVERIFY(fetchedNumber3.number() == "789"); QContactDetail emailDetail = fetched.preferredDetail("email"); QVERIFY(emailDetail.definitionName() == QContactEmailAddress::DefinitionName); QContactEmailAddress fetchedEmail = static_cast<QContactEmailAddress>(emailDetail); QVERIFY(fetchedEmail.emailAddress() == "dummyemail"); QContactDetail onlineAccountDetail = fetched.preferredDetail("OnlineAccountActions"); QVERIFY(onlineAccountDetail.definitionName() == QContactOnlineAccount::DefinitionName); QContactOnlineAccount fetchedOnlineAccount = static_cast<QContactOnlineAccount>(onlineAccountDetail); QVERIFY(fetchedOnlineAccount.accountUri() == "dummy"); QContactDetail urlDetail = fetched.preferredDetail("url"); QVERIFY(urlDetail.definitionName() == QContactUrl::DefinitionName); QContactUrl fetchedUrl = static_cast<QContactUrl>(urlDetail); QVERIFY(fetchedUrl.url() == "http://dummy"); //save a contact with one preferred details for several actions QContact c2; c2.setType(QContactType::TypeContact); c2.saveDetail(&number1); c2.setPreferredDetail("call", number1); c2.setPreferredDetail("videocall", number1); c2.setPreferredDetail("message", number1); QVERIFY(m_engine->saveContact(&c2, &err)); QVERIFY(err == QContactManager::NoError); //fetch the saved contact and check preferred details QContact fetched2 = m_engine->contact(c2.localId(), hint, &err); QVERIFY(err == QContactManager::NoError); QContactDetail callDetail4 = fetched2.preferredDetail("call"); QVERIFY(callDetail4.definitionName() == QContactPhoneNumber::DefinitionName); QContactPhoneNumber fetchedNumber4 = static_cast<QContactPhoneNumber>(callDetail4); QVERIFY(fetchedNumber4.number() == "123"); QContactDetail callDetail5 = fetched2.preferredDetail("videocall"); QVERIFY(callDetail5.definitionName() == QContactPhoneNumber::DefinitionName); QContactPhoneNumber fetchedNumber5 = static_cast<QContactPhoneNumber>(callDetail5); QVERIFY(fetchedNumber5.number() == "123"); QContactDetail callDetail6 = fetched2.preferredDetail("message"); QVERIFY(callDetail6.definitionName() == QContactPhoneNumber::DefinitionName); QContactPhoneNumber fetchedNumber6 = static_cast<QContactPhoneNumber>(callDetail6); QVERIFY(fetchedNumber6.number() == "123"); }
void TestCntPresenceInfoProvider::testRequestInfo() { PrcPresenceWriter *writer = PrcPresenceWriter::createWriter(); PrcPresenceBuddyInfoQt *buddy = PrcPresenceBuddyInfoQt::createInstance(); buddy->setIdentity("sip:[email protected]"); buddy->setAvailability(PrcPresenceBuddyInfoQt::PrcNotAvailable, "meh"); writer->writePresence(*buddy); QContactManager manager("symbian"); QContact c; QContactName name; name.setFirstName("firstname"); name.setLastName("lastname"); c.saveDetail(&name); QContactPhoneNumber number; number.setNumber("1234567"); number.setContexts(QContactDetail::ContextHome); number.setSubTypes(QContactPhoneNumber::SubTypeMobile); c.saveDetail(&number); manager.saveContact(&c); ContactInfoFields fields; fields = ContactInfoTextField; QSignalSpy spy(mCntPresenceInfoProvider, SIGNAL(infoFieldReady(CntInfoProvider*, int, ContactInfoField, const QString&))); mCntPresenceInfoProvider->requestInfo(c, fields); QCOMPARE(spy.count(), 0); QVERIFY(mCntPresenceInfoProvider->mBuddyMap.isEmpty()); fields = ContactInfoIcon2Field; mCntPresenceInfoProvider->requestInfo(c, fields); QCOMPARE(spy.count(), 0); QVERIFY(mCntPresenceInfoProvider->mBuddyMap.isEmpty()); QContactOnlineAccount account; account.setSubTypes(QStringList() << QContactOnlineAccount::SubTypeSip); account.setServiceProvider("sip"); account.setAccountUri("*****@*****.**"); c.saveDetail(&account); QContactOnlineAccount account2; account2.setSubTypes(QStringList() << QContactOnlineAccount::SubTypeSipVoip); account.setServiceProvider("sip"); account2.setAccountUri("*****@*****.**"); c.saveDetail(&account2); QContactOnlineAccount account3; account3.setSubTypes(QStringList() << QContactOnlineAccount::SubTypeSip); account3.setAccountUri("malformatted"); c.saveDetail(&account3); manager.saveContact(&c); mCntPresenceInfoProvider->requestInfo(c, fields); QCOMPARE(spy.count(), 0); QCOMPARE(mCntPresenceInfoProvider->mBuddyMap.count(), 1); delete mCntPresenceInfoProvider; mCntPresenceInfoProvider = NULL; buddy->setAvailability(PrcPresenceBuddyInfoQt::PrcAvailable, "meh"); writer->writePresence(*buddy); mCntPresenceInfoProvider = new CntPresenceInfoProvider(); QSignalSpy spy2(mCntPresenceInfoProvider, SIGNAL(infoFieldReady(CntInfoProvider*, int, ContactInfoField, const QString&))); mCntPresenceInfoProvider->requestInfo(c, fields); QCOMPARE(spy2.count(), 1); QCOMPARE(mCntPresenceInfoProvider->mBuddyMap.count(), 1); delete buddy; delete writer; }