/*! Returns true if this id is less than the \a other id. This id will be considered less than the \a other id if the manager URI of this id is alphabetically less than the manager URI of the \a other id. If both ids have the same manager URI, this id will be considered less than the \a other id if the local id of this id is less than the local id of the \a other id. The invalid, empty id consists of an empty manager URI and the invalid, zero local id, and hence will be less than any non-invalid id. This operator is provided primarily to allow use of a QContactId as a key in a QMap. \since 1.0 */ bool QContactId::operator<(const QContactId& other) const { const int comp = this->managerUri().compare(other.managerUri()); if (comp != 0) return comp < 0; return this->localId() < other.localId(); }
/*! Adds QContactTag details to the \a contacts, based on the \a relationships. Tags are created such that if a group contact, B with display label "b", has a HasMember relationship with a contact, A, then a QContactTag, "b", is added to A. Group contacts can be passed in with the \a contacts list. If a contact is part of a group which is not in \a contacts, the \a manager is queried to find them. */ void createTagsFromGroups(QList<QContact>* contacts, const QList<QContactRelationship>& relationships, const QContactManager* manager) { // Map from QContactIds to group names QMap<QContactId, QString> groupMap; // Map from QContactIds to indices into the contacts list QMap<QContactId, int> indexMap; // Build up groupMap and indexMap for (int i = 0; i < contacts->size(); ++i) { QContact contact = contacts->at(i); if (contact.type() == QContactType::TypeGroup) { // In practice, you may want to check that there aren't two distinct groups with the // same name, and you may want to use a field other than display label. groupMap.insert(contact.id(), contact.displayLabel()); } indexMap.insert(contact.id(), i); } // Now add all the tags specified by the group relationships foreach (const QContactRelationship& rel, relationships) { if (rel.relationshipType() == QContactRelationship::HasMember && indexMap.contains(rel.second())) { QString groupName = groupMap.value(rel.first()); // Have we seen the group before? if (groupName.isEmpty()) { // Try and find the group in the manager QContactId groupId = rel.second(); QContactFetchHint fetchHint; fetchHint.setDetailDefinitionsHint(QStringList(QContactDisplayLabel::DefinitionName)); QContact contact = manager->contact(groupId.localId(), fetchHint); if (!contact.isEmpty()) { groupName = contact.displayLabel(); groupMap.insert(groupId, groupName); // Cache the group id/name } } if (!groupName.isEmpty()) { // Add the tag QContactTag tag; tag.setTag(groupName); (*contacts)[indexMap.value(rel.second())].saveDetail(&tag); } } } }
QDebug operator<<(QDebug dbg, const QContactId& id) { dbg.nospace() << "QContactId(" << id.managerUri() << ", " << id.localId() << ")"; return dbg.maybeSpace(); }
/*! * Returns the hash value for \a key. * \since 1.0 */ uint qHash(const QContactId &key) { return QT_PREPEND_NAMESPACE(qHash)(key.managerUri()) + QT_PREPEND_NAMESPACE(qHash)(key.localId()); }