/**************************************************************************** ** ** 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 QCONTACTMANAGER_H #define QCONTACTMANAGER_H #include #include #include #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE_CONTACTS class QContactAction; class QContactFilter; class QContactManagerData; class Q_CONTACTS_EXPORT QContactManager : public QObject { Q_OBJECT public: #ifdef Q_QDOC // qdoc's parser fails to recognise the default map argument explicit QContactManager(const QString& managerName = QString(), const QMap& parameters = 0, QObject* parent = nullptr); QContactManager(const QString& managerName, int implementationVersion, const QMap& parameters = 0, QObject* parent = nullptr); #else explicit QContactManager(const QString& managerName = QString(), const QMap& parameters = (QMap()), QObject* parent = nullptr); QContactManager(const QString& managerName, int implementationVersion, const QMap& parameters = (QMap()), QObject* parent = nullptr); #endif explicit QContactManager(QObject* parent); inline static const QString ParameterSignalSources() {return QStringLiteral("SignalSources");}; inline static const QString ParameterSignalDefinitions() {return QStringLiteral("SignalDefinitions");}; inline static const QString ParameterValueOnlyOtherProcesses() {return QStringLiteral("OnlyOtherProcesses");}; inline static const QString ParameterValueOnlyOtherManagers() {return QStringLiteral("OnlyOtherManagers");}; static QContactManager* fromUri(const QString& uri, QObject* parent = nullptr); ~QContactManager(); // dtor QString managerName() const; // e.g. "memory" QMap managerParameters() const; // e.g. "filename=private.db" QString managerUri() const; // managerName + managerParameters int managerVersion() const; static bool parseUri(const QString &uri, QString *managerName, QMap *params); static QString buildUri(const QString &managerName, const QMap ¶ms); static QString buildUri(const QString &managerName, const QMap ¶ms, int implementationVersion); enum Error { NoError = 0, DoesNotExistError, AlreadyExistsError, InvalidDetailError, InvalidRelationshipError, LockedError, DetailAccessError, PermissionsError, OutOfMemoryError, NotSupportedError, BadArgumentError, UnspecifiedError, VersionMismatchError, LimitReachedError, InvalidContactTypeError, TimeoutError, MissingPlatformRequirementsError }; enum Operation { Add, Change, Remove }; /* Error reporting */ QContactManager::Error error() const; QMap errorMap() const; /* Contacts - Accessors and Mutators */ QList contactIds(const QList& sortOrders = QList()) const; QList contactIds(const QContactFilter& filter, const QList& sortOrders = QList()) const; QList contacts(const QList& sortOrders = QList(), const QContactFetchHint& fetchHint = QContactFetchHint()) const; QList contacts(const QContactFilter& filter, const QList& sortOrders = QList(), const QContactFetchHint& fetchHint = QContactFetchHint()) const; QList contacts(const QList& contactIds, const QContactFetchHint& fetchHint = QContactFetchHint(), QMap* errorMap = nullptr) const; QContact contact(const QContactId& contactId, const QContactFetchHint& fetchHint = QContactFetchHint()) const; // retrieve a contact bool saveContact(QContact* contact); // note: MODIFIES contact (sets the contactId) bool removeContact(const QContactId& contactId); // remove the contact from the persistent store bool saveContacts(QList* contacts, QMap* errorMap = nullptr); // batch API - save. bool saveContacts(QList* contacts, const QList& typeMask, QMap* errorMap = nullptr); // Partial save bool removeContacts(const QList& contactIds, QMap* errorMap = nullptr); // batch API - remove. /* "Self" contact id (MyCard) */ bool setSelfContactId(const QContactId& contactId); QContactId selfContactId() const; /* Relationships */ QList relationships(const QContactId& participantId, QContactRelationship::Role role = QContactRelationship::Either) const; QList relationships(const QString& relationshipType = QString(), const QContactId& participantId = QContactId(), QContactRelationship::Role role = QContactRelationship::Either) const; bool saveRelationship(QContactRelationship* relationship); bool saveRelationships(QList* relationships, QMap* errorMap = nullptr); bool removeRelationship(const QContactRelationship& relationship); bool removeRelationships(const QList& relationships, QMap* errorMap = nullptr); /* Capabilities reporting */ bool isRelationshipTypeSupported(const QString& relationshipType, QContactType::TypeValues contactType = QContactType::TypeContact) const; QList supportedDataTypes() const; bool isFilterSupported(const QContactFilter& filter) const; QList supportedContactTypes() const; QList supportedContactDetailTypes() const; // collections QContactCollectionId defaultCollectionId() const; QContactCollection collection(const QContactCollectionId& collectionId) const; QList collections() const; bool saveCollection(QContactCollection* collection); bool removeCollection(const QContactCollectionId& collectionId); /* return a list of available backends for which a QContactManager can be constructed. */ static QStringList availableManagers(); 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); // need both? or just new? void collectionsAdded(const QList &collectionIds); void collectionsChanged(const QList &collectionIds); void collectionsRemoved(const QList &collectionIds); void collectionsModified(const QList > &collectionIds); protected: void connectNotify(const QMetaMethod &signal) override; void disconnectNotify(const QMetaMethod &signal) override; private: friend class QContactManagerData; void createEngine(const QString& managerName, const QMap& parameters); Q_DISABLE_COPY(QContactManager) Q_PRIVATE_SLOT(d, void _q_contactsUpdated(const QList& ids, const QList& typesChanged)) Q_PRIVATE_SLOT(d, void _q_contactsDeleted(const QList& ids)) // private data pointer QContactManagerData* d; }; QT_END_NAMESPACE_CONTACTS #endif // QCONTACTMANAGER_H