void ReportGenerator::contactToTemplate( TextTemplate *tmpl, const QString& prefix, const KContacts::Addressee& contact ) { if( contact.isEmpty() ) return; tmpl->setValue( ADDRESS_TAG( prefix, "NAME" ), escapeTrml2pdfXML( contact.realName() ) ); QString co = contact.organization(); if( co.isEmpty() ) { co = contact.realName(); } tmpl->setValue( ADDRESS_TAG( prefix, "ORGANISATION" ), escapeTrml2pdfXML( co ) ); tmpl->setValue( ADDRESS_TAG( prefix, "URL" ), escapeTrml2pdfXML( contact.url().toString() ) ); tmpl->setValue( ADDRESS_TAG( prefix, "EMAIL" ), escapeTrml2pdfXML( contact.preferredEmail() ) ); tmpl->setValue( ADDRESS_TAG( prefix, "PHONE" ), escapeTrml2pdfXML( contact.phoneNumber( KContacts::PhoneNumber::Work ).number() ) ); tmpl->setValue( ADDRESS_TAG( prefix, "FAX" ), escapeTrml2pdfXML( contact.phoneNumber( KContacts::PhoneNumber::Fax ).number() ) ); tmpl->setValue( ADDRESS_TAG( prefix, "CELL" ), escapeTrml2pdfXML( contact.phoneNumber( KContacts::PhoneNumber::Cell ).number() ) ); KContacts::Address address; address = contact.address( KContacts::Address::Pref ); if( address.isEmpty() ) address = contact.address(KContacts::Address::Work ); if( address.isEmpty() ) address = contact.address(KContacts::Address::Home ); if( address.isEmpty() ) address = contact.address(KContacts::Address::Postal ); tmpl->setValue( ADDRESS_TAG( prefix, "POSTBOX" ), escapeTrml2pdfXML( address.postOfficeBox() ) ); tmpl->setValue( ADDRESS_TAG( prefix, "EXTENDED" ), escapeTrml2pdfXML( address.extended() ) ); tmpl->setValue( ADDRESS_TAG( prefix, "STREET" ), escapeTrml2pdfXML( address.street() ) ); tmpl->setValue( ADDRESS_TAG( prefix, "LOCALITY" ), escapeTrml2pdfXML( address.locality() ) ); tmpl->setValue( ADDRESS_TAG( prefix, "REGION" ), escapeTrml2pdfXML( address.region() ) ); tmpl->setValue( ADDRESS_TAG( prefix, "POSTCODE" ), escapeTrml2pdfXML( address.postalCode() ) ); tmpl->setValue( ADDRESS_TAG( prefix, "COUNTRY" ), escapeTrml2pdfXML( address.country() ) ); tmpl->setValue( ADDRESS_TAG( prefix, "REGION" ), escapeTrml2pdfXML( address.region() ) ); tmpl->setValue( ADDRESS_TAG( prefix,"LABEL" ), escapeTrml2pdfXML( address.label() ) ); }
static void setOtherCountry(const QString &value, KContacts::Address &address) { address.setCountry(value); }
void ContactsHandler::compare(Akonadi::AbstractDifferencesReporter *reporter, const Akonadi::Item &leftItem, const Akonadi::Item &rightItem) { Q_ASSERT(leftItem.hasPayload<KContacts::Addressee>()); Q_ASSERT(rightItem.hasPayload<KContacts::Addressee>()); const KContacts::Addressee leftContact = leftItem.payload<KContacts::Addressee>(); const KContacts::Addressee rightContact = rightItem.payload<KContacts::Addressee>(); const QString modifiedBy = mSession->userName(); const QString modifiedOn = formatDate(getDateModified(rightContact)); reporter->setLeftPropertyValueTitle(i18nc("@title:column", "My Contact")); reporter->setRightPropertyValueTitle( i18nc("@title:column", "Their Contact: modified by %1 on %2", modifiedBy, modifiedOn)); bool seenPrimaryAddress = false; bool seenOtherAddress = false; const AccessorHash accessors = accessorHash(); AccessorHash::const_iterator it = accessors.constBegin(); AccessorHash::const_iterator endIt = accessors.constEnd(); for (; it != endIt; ++it) { // check if this is a read-only field if ((*it).getter == nullptr) { continue; } QString leftValue = (*it).getter(leftContact); QString rightValue = (*it).getter(rightContact); QString diffName = (*it).diffName; if (diffName.isEmpty()) { // check for special fields if (isAddressValue(it.key())) { if (isPrimaryAddressValue(it.key())) { if (!seenPrimaryAddress) { diffName = i18nc("item:intable", "Primary Address"); seenPrimaryAddress = true; const KContacts::Address leftAddress = leftContact.address(KContacts::Address::Work | KContacts::Address::Pref); const KContacts::Address rightAddress = rightContact.address(KContacts::Address::Work | KContacts::Address::Pref); leftValue = leftAddress.formattedAddress(); rightValue = rightAddress.formattedAddress(); } else { // already printed, skip continue; } } else { if (!seenOtherAddress) { seenOtherAddress = true; diffName = i18nc("item:intable", "Other Address"); const KContacts::Address leftAddress = leftContact.address(KContacts::Address::Home); const KContacts::Address rightAddress = rightContact.address(KContacts::Address::Home); leftValue = leftAddress.formattedAddress(); rightValue = rightAddress.formattedAddress(); } else { // already printed, skip continue; } } } else if (it.key() == QLatin1String("do_not_call")) { diffName = i18nc("@item:intable", "Do Not Call"); leftValue = getDoNotCall(leftContact) == QLatin1String("1") ? QStringLiteral("Yes") : QStringLiteral("No"); rightValue = getDoNotCall(rightContact) == QLatin1String("1") ? QStringLiteral("Yes") : QStringLiteral("No"); } else { // internal field, skip continue; } } if (leftValue.isEmpty() && rightValue.isEmpty()) { continue; } if (leftValue.isEmpty()) { reporter->addProperty(Akonadi::AbstractDifferencesReporter::AdditionalRightMode, diffName, leftValue, rightValue); } else if (rightValue.isEmpty()) { reporter->addProperty(Akonadi::AbstractDifferencesReporter::AdditionalLeftMode, diffName, leftValue, rightValue); } else if (leftValue != rightValue) { reporter->addProperty(Akonadi::AbstractDifferencesReporter::ConflictMode, diffName, leftValue, rightValue); } } }
static void setOtherPostalcode(const QString &value, KContacts::Address &address) { address.setPostalCode(value); }
static void setOtherState(const QString &value, KContacts::Address &address) { address.setRegion(value); }
static void setOtherCity(const QString &value, KContacts::Address &address) { address.setLocality(value); }
static void setOtherStreet(const QString &value, KContacts::Address &address) { address.setStreet(value); }
ObjectPtr Private::JSONToContact(const QVariantMap& data) { ContactPtr contact(new Contact); /* Google contact ID */ contact->setUid(Private::stringFromXMLMap(data, QStringLiteral("id"))); /* Google ETAG. This can be used to identify if the item was changed remotly */ contact->setEtag(data.value(QStringLiteral("gd$etag")).toString()); /* Date and time when contact was updated on the remote server */ contact->setUpdated(QDateTime::fromString(Private::stringFromXMLMap(data, QStringLiteral("updated")), Qt::ISODate)); /* If the contact was deleted, we don't need more info about it. * Just store our own flag, which will be then parsed by the resource * itself. */ contact->setDeleted(data.value(QStringLiteral("gd$deleted")).isValid()); /* Store URL of the picture. The URL will be used later by PhotoJob to fetch the picture * itself. */ const QVariantList links = data.value(QStringLiteral("link")).toList(); Q_FOREACH(const QVariant &link, links) { const QVariantMap linkMap = link.toMap(); if (linkMap.value(QStringLiteral("rel")).toString() == QLatin1String("http://schemas.google.com/contacts/2008/rel#photo")) { contact->setPhotoUrl(linkMap.value(QStringLiteral("href")).toString()); } } /* Name */ if (data.contains(QStringLiteral("title"))) { contact->setName(Private::stringFromXMLMap(data, QStringLiteral("title"))); } /* Formatted name */ if (data.contains(QStringLiteral("gd$name"))) { const QVariantMap name = data.value(QStringLiteral("gd$name")).toMap(); if (name.contains(QStringLiteral("gd$fullName"))) { contact->setFormattedName(Private::stringFromXMLMap(name, QStringLiteral("gd$fullName"))); } if (name.contains(QStringLiteral("gd$givenName"))) { contact->setGivenName(Private::stringFromXMLMap(name, QStringLiteral("gd$givenName"))); } if (name.contains(QStringLiteral("gd$familyName"))) { contact->setFamilyName(Private::stringFromXMLMap(name, QStringLiteral("gd$familyName"))); } if (name.contains(QStringLiteral("gd$additionalName"))) { contact->setAdditionalName(Private::stringFromXMLMap(name, QStringLiteral("gd$additionalName"))); } if (name.contains(QStringLiteral("gd$namePrefix"))) { contact->setPrefix(Private::stringFromXMLMap(name, QStringLiteral("gd$namePrefix"))); } if (name.contains(QStringLiteral("gd$nameSuffix"))) { contact->setSuffix(Private::stringFromXMLMap(name, QStringLiteral("gd$nameSuffix"))); } } /* Note */ if (data.contains(QStringLiteral("content"))) { contact->setNote(Private::stringFromXMLMap(data, QStringLiteral("content"))); } /* Organization (work) - KABC supports only one organization */ if (data.contains(QStringLiteral("gd$organization"))) { const QVariantList organizations = data.value(QStringLiteral("gd$organization")).toList(); const QVariantMap organization = organizations.first().toMap(); if (organization.contains(QStringLiteral("gd$orgName"))) { contact->setOrganization(Private::stringFromXMLMap(organization, QStringLiteral("gd$orgName"))); } if (organization.contains(QStringLiteral("gd$orgDepartment"))) { contact->setDepartment(Private::stringFromXMLMap(organization, QStringLiteral("gd$orgDepartment"))); } if (organization.contains(QStringLiteral("gd$orgTitle"))) { contact->setTitle(Private::stringFromXMLMap(organization, QStringLiteral("gd$orgTitle"))); } if (organization.contains(QStringLiteral("gd$where"))) { contact->setOffice(Private::stringFromXMLMap(organization, QStringLiteral("gd$where"))); } } /* Nickname */ if (data.contains(QStringLiteral("gContact$nickname"))) { contact->setNickName(Private::stringFromXMLMap(data, QStringLiteral("gContact$nickname"))); } /* Occupation (= organization/title) */ if (data.contains(QStringLiteral("gContact$occupation"))) { contact->setProfession(Private::stringFromXMLMap(data, QStringLiteral("gContact$occupation"))); } /* Relationships */ if (data.contains(QStringLiteral("gContact$relation"))) { const QVariantList relations = data.value(QStringLiteral("gContact$relation")).toList(); Q_FOREACH(const QVariant &r, relations) { const QVariantMap relation = r.toMap(); if (relation.value(QStringLiteral("rel")).toString() == QLatin1String("spouse")) { contact->setSpousesName(relation.value(QStringLiteral("$t")).toString()); continue; } if (relation.value(QStringLiteral("rel")).toString() == QLatin1String("manager")) { contact->setManagersName(relation.value(QStringLiteral("$t")).toString()); continue; } if (relation.value(QStringLiteral("rel")).toString() == QLatin1String("assistant")) { contact->setAssistantsName(relation.value(QStringLiteral("$t")).toString()); continue; } } } /* Anniversary */ if (data.contains(QStringLiteral("gContact$event"))) { const QVariantList events = data.value(QStringLiteral("gContact$event")).toList(); Q_FOREACH(const QVariant &e, events) { const QVariantMap event = e.toMap(); if (event.value(QStringLiteral("rel")).toString() == QLatin1String("anniversary")) { QVariantMap when = event.value(QStringLiteral("gd$when")).toMap(); contact->setAnniversary(when.value(QStringLiteral("startTime")).toString()); } } } /* Websites */ if (data.contains(QStringLiteral("gContact$website"))) { const QVariantList websites = data.value(QStringLiteral("gContact$website")).toList(); Q_FOREACH(const QVariant &w, websites) { const QVariantMap web = w.toMap(); if (web.value(QStringLiteral("rel")).toString() == QLatin1String("home-page")) { KContacts::ResourceLocatorUrl url; url.setUrl(QUrl(web.value(QStringLiteral("href")).toString())); contact->setUrl(url); continue; } if (web.value(QStringLiteral("rel")).toString() == QLatin1String("blog")) { contact->setBlogFeed(web.value(QStringLiteral("href")).toString()); continue; } } } /* Emails */ const QVariantList emails = data.value(QStringLiteral("gd$email")).toList(); Q_FOREACH(const QVariant & em, emails) { const QVariantMap email = em.toMap(); contact->insertEmail(email.value(QStringLiteral("address")).toString(), email.value(QStringLiteral("primary")).toBool()); } /* IMs */ const QVariantList ims = data.value(QStringLiteral("gd$im")).toList(); Q_FOREACH(const QVariant & i, ims) { const QVariantMap im = i.toMap(); const QString protocol = Contact::IMSchemeToProtocolName(im.value(QStringLiteral("protocol")).toString()); contact->insertCustom(QLatin1String("messaging/") + protocol, QStringLiteral("All"), im.value(QStringLiteral("address")).toString()); } /* Phone numbers */ const QVariantList phones = data.value(QStringLiteral("gd$phoneNumber")).toList(); Q_FOREACH(const QVariant & p, phones) { const QVariantMap phone = p.toMap(); contact->insertPhoneNumber(KContacts::PhoneNumber(phone.value(QStringLiteral("$t")).toString(), Contact::phoneSchemeToType(phone.value(QStringLiteral("rel")).toString()))); } /* Addresses */ const QVariantList addresses = data.value(QStringLiteral("gd$structuredPostalAddress")).toList(); Q_FOREACH(const QVariant & a, addresses) { const QVariantMap address = a.toMap(); KContacts::Address addr; if (!address.contains(QStringLiteral("gd$city")) && !address.contains(QStringLiteral("gd$country")) && !address.contains(QStringLiteral("gd$postcode")) && !address.contains(QStringLiteral("gd$region")) && !address.contains(QStringLiteral("gd$pobox"))) { addr.setExtended(Private::stringFromXMLMap(address, QStringLiteral("gd$street"))); } else { if (address.contains(QStringLiteral("gd$street"))) { addr.setStreet(Private::stringFromXMLMap(address, QStringLiteral("gd$street"))); } if (address.contains(QStringLiteral("gd$country"))) { addr.setCountry(Private::stringFromXMLMap(address, QStringLiteral("gd$country"))); } if (address.contains(QStringLiteral("gd$city"))) { addr.setLocality(Private::stringFromXMLMap(address, QStringLiteral("gd$city"))); } if (address.contains(QStringLiteral("gd$postcode"))) { addr.setPostalCode(Private::stringFromXMLMap(address, QStringLiteral("gd$postcode"))); } if (address.contains(QStringLiteral("gdregion"))) { addr.setRegion(Private::stringFromXMLMap(address, QStringLiteral("gd$region"))); } if (address.contains(QStringLiteral("gd$pobox"))) { addr.setPostOfficeBox(Private::stringFromXMLMap(address, QStringLiteral("gd$pobox"))); } } addr.setType(Contact::addressSchemeToType(address.value(QStringLiteral("rel")).toString())); contact->insertAddress(addr); } /* Birthday */ const QVariantMap bDay = data.value(QStringLiteral("gContact$birthday")).toMap(); if (!bDay.isEmpty()) { QString birthday = bDay.value(QStringLiteral("when")).toString(); /* Birthdays in format "--MM-DD" are valid and mean that no year has * been specified. Since KABC does not support birthdays without year, * we simulate that by specifying a fake year - 1900 */ if (birthday.startsWith(QLatin1String("--"))) { birthday = QLatin1String("1900") + birthday.mid(1); } contact->setBirthday(QDateTime::fromString(birthday, QStringLiteral("yyyy-MM-dd"))); } /* User-defined fields */ const QVariantList userDefined = data.value(QStringLiteral("gContact$userDefinedField")).toList(); Q_FOREACH(const QVariant & u, userDefined) { const QVariantMap field = u.toMap(); contact->insertCustom(QStringLiteral("KADDRESSBOOK"), field.value(QStringLiteral("key")).toString(), field.value(QStringLiteral("value")).toString()); } /* Groups */ const QVariantList groups = data.value(QStringLiteral("gContact$groupMembershipInfo")).toList(); QStringList groupsList; Q_FOREACH(const QVariant & g, groups) { const QVariantMap group = g.toMap(); if (group.value(QStringLiteral("deleted")).toBool() == false) { groupsList.append(group.value(QStringLiteral("href")).toString()); } } contact->insertCustom(QStringLiteral("GCALENDAR"), QStringLiteral("groupMembershipInfo"), groupsList.join(QStringLiteral(","))); return contact; }