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 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; }