void CustomFieldsListWidget::storeContact(KContacts::Addressee &contact) const { const CustomField::List customFields = mModel->customFields(); for (const CustomField &customField : customFields) { // write back values for local and global scope, leave external untouched if (customField.scope() != CustomField::ExternalScope) { if (!customField.value().isEmpty()) { contact.insertCustom(QStringLiteral("KADDRESSBOOK"), customField.key(), customField.value()); } else { contact.removeCustom(QStringLiteral("KADDRESSBOOK"), customField.key()); } } } // Now remove all fields that were available in loadContact (these are stored in mLocalCustomFields) // but are not part of customFields now, which means they have been removed or renamed by the user // in the editor dialog. for (const CustomField &oldCustomField : qAsConst(mLocalCustomFields)) { if (oldCustomField.scope() != CustomField::ExternalScope) { bool fieldStillExists = false; for (const CustomField &newCustomField : qAsConst(customFields)) { if (newCustomField.scope() != CustomField::ExternalScope) { if (newCustomField.key() == oldCustomField.key()) { fieldStillExists = true; break; } } } if (!fieldStillExists) { contact.removeCustom(QStringLiteral("KADDRESSBOOK"), oldCustomField.key()); } } } // And store the global custom fields descriptions as well CustomField::List globalCustomFields; for (const CustomField &customField : qAsConst(customFields)) { if (customField.scope() == CustomField::GlobalScope) { globalCustomFields << customField; } } CustomFieldManager::setGlobalCustomFieldDescriptions(globalCustomFields); }
void AddresseeTest::customFieldsTest() { KContacts::Addressee a; // test for empty QVERIFY(a.customs().isEmpty()); // test insert a.insertCustom(QStringLiteral("MyApp"), QStringLiteral("MyKey"), QStringLiteral("MyValue")); QCOMPARE(a.customs().count(), 1); QCOMPARE(a.custom(QStringLiteral("MyApp"), QStringLiteral("MyKey")), QStringLiteral("MyValue")); a.insertCustom(QStringLiteral("MyApp"), QStringLiteral("MyKey"), QStringLiteral("YourValue")); QCOMPARE(a.customs().count(), 1); // still one, we overwrite... QCOMPARE(a.custom(QStringLiteral("MyApp"), QStringLiteral("MyKey")), QStringLiteral("YourValue")); // test query non-existing app/key QCOMPARE(a.custom(QStringLiteral("MyApp"), QStringLiteral("UnknownKey")), QString()); QCOMPARE(a.custom(QStringLiteral("UnknownApp"), QStringLiteral("MyKey")), QString()); // test insert with different key a.insertCustom(QStringLiteral("MyApp"), QStringLiteral("AnotherKey"), QStringLiteral("OtherValue")); QCOMPARE(a.customs().count(), 2); QCOMPARE(a.custom(QStringLiteral("MyApp"), QStringLiteral("AnotherKey")), QStringLiteral("OtherValue")); QCOMPARE(a.custom(QStringLiteral("MyApp"), QStringLiteral("MyKey")), QStringLiteral("YourValue")); // test insert with different app a.insertCustom(QStringLiteral("OtherApp"), QStringLiteral("OtherKey"), QStringLiteral("OurValue")); QCOMPARE(a.customs().count(), 3); QCOMPARE(a.custom(QStringLiteral("OtherApp"), QStringLiteral("OtherKey")), QStringLiteral("OurValue")); QCOMPARE(a.custom(QStringLiteral("MyApp"), QStringLiteral("AnotherKey")), QStringLiteral("OtherValue")); QCOMPARE(a.custom(QStringLiteral("MyApp"), QStringLiteral("MyKey")), QStringLiteral("YourValue")); #if 0 //Order is not defined now as we use a QHash // test customs QCOMPARE(a.customs().at(0), QStringLiteral("MyApp-MyKey:YourValue")); QCOMPARE(a.customs().at(1), QStringLiteral("MyApp-AnotherKey:OtherValue")); QCOMPARE(a.customs().at(2), QStringLiteral("OtherApp-OtherKey:OurValue")); #endif // test equal operator KContacts::Addressee b; b.setUid(a.uid()); b.insertCustom(QStringLiteral("OtherApp"), QStringLiteral("OtherKey"), QStringLiteral("OurValue")); b.insertCustom(QStringLiteral("MyApp"), QStringLiteral("MyKey"), QStringLiteral("YourValue")); b.insertCustom(QStringLiteral("MyApp"), QStringLiteral("AnotherKey"), QStringLiteral("OtherValue")); QCOMPARE(a, b); b.insertCustom(QStringLiteral("MyApp"), QStringLiteral("AnotherKey"), QStringLiteral("WrongValue")); QVERIFY(a != b); // test setCustoms KContacts::Addressee c; c.insertCustom(QStringLiteral("ThisApp"), QStringLiteral("ShouldNotBe"), QStringLiteral("There")); QCOMPARE(c.customs().count(), 1); const QStringList testData = QStringList() << QStringLiteral("FirstApp-FirstKey:FirstValue") << QStringLiteral("SecondApp-SecondKey:SecondValue") << QStringLiteral("ThirdApp-ThirdKey:ThirdValue"); c.setCustoms(testData); QCOMPARE(c.customs().count(), 3); QCOMPARE(c.custom(QStringLiteral("FirstApp"), QStringLiteral("FirstKey")), QStringLiteral("FirstValue")); QCOMPARE(c.custom(QStringLiteral("SecondApp"), QStringLiteral("SecondKey")), QStringLiteral("SecondValue")); QCOMPARE(c.custom(QStringLiteral("ThirdApp"), QStringLiteral("ThirdKey")), QStringLiteral("ThirdValue")); // test remove QCOMPARE(c.customs().count(), 3); c.removeCustom(QStringLiteral("UnknownApp"), QStringLiteral("FirstKey")); QCOMPARE(c.customs().count(), 3); c.removeCustom(QStringLiteral("FirstApp"), QStringLiteral("UnknownKey")); QCOMPARE(c.customs().count(), 3); c.removeCustom(QStringLiteral("FirstApp"), QStringLiteral("FirstKey")); QCOMPARE(c.customs().count(), 2); }