/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtContacts module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 2.0 or (at your option) the GNU General ** Public license version 3 or any later version approved by the KDE Free ** Qt Foundation. The licenses are as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-2.0.html and ** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QCONTACTMANAGERENGINE_H #define QCONTACTMANAGERENGINE_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE_CONTACTS class Q_CONTACTS_EXPORT QContactManagerEngine : public QObject { Q_OBJECT public: QContactManagerEngine() {} /* URI reporting */ virtual QString managerName() const = 0; // e.g. "memory" virtual QMap managerParameters() const; // e.g. "filename=private.db,cachesize=1024" virtual QMap idInterpretationParameters() const; // e.g. "filename=private.db" virtual int managerVersion() const = 0; inline QString managerUri() const { if (m_uri.isNull()) m_uri = QContactManager::buildUri(managerName(), idInterpretationParameters()); return m_uri; } inline QContactId contactId(const QByteArray &localId) const { return QContactId(managerUri(), localId); } inline QContactCollectionId collectionId(const QByteArray &localId) const { return QContactCollectionId(managerUri(), localId); } /* Filtering */ virtual QList contactIds(const QContactFilter &filter, const QList &sortOrders, QContactManager::Error *error) const; virtual QList contacts(const QContactFilter &filter, const QList& sortOrders, const QContactFetchHint &fetchHint, QContactManager::Error *error) const; virtual QList contacts(const QList &contactIds, const QContactFetchHint& fetchHint, QMap *errorMap, QContactManager::Error *error) const; virtual QContact contact(const QContactId &contactId, const QContactFetchHint &fetchHint, QContactManager::Error *error) const; virtual bool saveContact(QContact *contact, QContactManager::Error *error); virtual bool removeContact(const QContactId &contactId, QContactManager::Error *error); virtual bool saveRelationship(QContactRelationship *relationship, QContactManager::Error *error); virtual bool removeRelationship(const QContactRelationship &relationship, QContactManager::Error *error); virtual bool saveContacts(QList *contacts, QMap *errorMap, QContactManager::Error *error); virtual bool saveContacts(QList *contacts, const QList &typeMask, QMap *errorMap, QContactManager::Error *error); virtual bool removeContacts(const QList &contactIds, QMap *errorMap, QContactManager::Error *error); /* "Self" contact id (MyCard) */ virtual bool setSelfContactId(const QContactId &contactId, QContactManager::Error *error); virtual QContactId selfContactId(QContactManager::Error *error) const; /* Relationships between contacts */ virtual QList relationships(const QString &relationshipType, const QContactId& participantId, QContactRelationship::Role role, QContactManager::Error *error) const; virtual bool saveRelationships(QList *relationships, QMap* errorMap, QContactManager::Error *error); virtual bool removeRelationships(const QList &relationships, QMap *errorMap, QContactManager::Error *error); // collections virtual QContactCollectionId defaultCollectionId() const; virtual QContactCollection collection(const QContactCollectionId &collectionId, QContactManager::Error *error) const; virtual QList collections(QContactManager::Error *error) const; virtual bool saveCollection(QContactCollection *collection, QContactManager::Error *error); virtual bool removeCollection(const QContactCollectionId &collectionId, QContactManager::Error *error); /* Validation for saving */ virtual bool validateContact(const QContact &contact, QContactManager::Error *error) const; /* Asynchronous Request Support */ virtual void requestDestroyed(QContactAbstractRequest *req); virtual bool startRequest(QContactAbstractRequest *req); virtual bool cancelRequest(QContactAbstractRequest *req); virtual bool waitForRequestFinished(QContactAbstractRequest *req, int msecs); /* Capabilities reporting */ virtual bool isRelationshipTypeSupported(const QString &relationshipType, QContactType::TypeValues contactType) const; virtual bool isFilterSupported(const QContactFilter &filter) const; virtual QList supportedDataTypes() const; virtual QList supportedContactTypes() const; virtual QList supportedContactDetailTypes() const; Q_SIGNALS: void dataChanged(); void contactsAdded(const QList &contactIds); void contactsChanged(const QList &contactIds, const QList &typesChanged); void contactsRemoved(const QList &contactIds); void relationshipsAdded(const QList &affectedContactIds); void relationshipsRemoved(const QList &affectedContactIds); void selfContactIdChanged(const QContactId &oldId, const QContactId &newId); void collectionsAdded(const QList &collectionIds); void collectionsChanged(const QList &collectionIds); void collectionsRemoved(const QList &collectionIds); void collectionsModified(const QList > &collectionIds); public: // Async update functions static void updateRequestState(QContactAbstractRequest *req, QContactAbstractRequest::State state); static void updateContactIdFetchRequest(QContactIdFetchRequest *req, const QList& result, QContactManager::Error error, QContactAbstractRequest::State); static void updateContactFetchRequest(QContactFetchRequest *req, const QList &result, QContactManager::Error error, QContactAbstractRequest::State); static void updateContactFetchByIdRequest(QContactFetchByIdRequest *req, const QList& result, QContactManager::Error error, const QMap &errorMap, QContactAbstractRequest::State); static void updateContactRemoveRequest(QContactRemoveRequest *req, QContactManager::Error error, const QMap &errorMap, QContactAbstractRequest::State); static void updateContactSaveRequest(QContactSaveRequest *req, const QList &result, QContactManager::Error error, const QMap &errorMap, QContactAbstractRequest::State); static void updateRelationshipSaveRequest(QContactRelationshipSaveRequest *req, const QList &result, QContactManager::Error error, const QMap &errorMap, QContactAbstractRequest::State); static void updateRelationshipRemoveRequest(QContactRelationshipRemoveRequest *req, QContactManager::Error error, const QMap &errorMap, QContactAbstractRequest::State); static void updateRelationshipFetchRequest(QContactRelationshipFetchRequest *req, const QList &result, QContactManager::Error error, QContactAbstractRequest::State); // collections static void updateCollectionFetchRequest(QContactCollectionFetchRequest *request, const QList &result, QContactManager::Error error, QContactAbstractRequest::State newState); static void updateCollectionRemoveRequest(QContactCollectionRemoveRequest *request, QContactManager::Error error, const QMap &errorMap, QContactAbstractRequest::State newState); static void updateCollectionSaveRequest(QContactCollectionSaveRequest *request, const QList &result, QContactManager::Error error, const QMap &errorMap, QContactAbstractRequest::State newState); // Other protected area update functions static void setDetailAccessConstraints(QContactDetail *detail, QContactDetail::AccessConstraints constraints); static void setContactRelationships(QContact *contact, const QList &relationships); static void setDetailProvenance(QContactDetail *detail, const QString &provenance); /* Helper functions */ static int compareContact(const QContact &a, const QContact &b, const QList &sortOrders); static void addSorted(QList* sorted, const QContact &toAdd, const QList &sortOrders); static int compareVariant(const QVariant &first, const QVariant &second, Qt::CaseSensitivity sensitivity); static bool testFilter(const QContactFilter& filter, const QContact &contact); static QList sortContacts(const QList &contacts, const QList &sortOrders); static QContactFilter canonicalizedFilter(const QContactFilter &filter); private: /* QContactChangeSet is a utility class used to emit the appropriate signals */ friend class QContactChangeSet; mutable QString m_uri; }; QT_END_NAMESPACE_CONTACTS QT_BEGIN_NAMESPACE Q_DECLARE_INTERFACE(QtContacts::QContactManagerEngine, "org.qt-project.Qt.QContactManagerEngine") QT_END_NAMESPACE #endif // QCONTACTMANAGERENGINE_H