/* SPDX-FileCopyrightText: 2013 David Edmundson SPDX-License-Identifier: LGPL-2.1-or-later */ #ifndef ALLCONTACTSMONITOR_H #define ALLCONTACTSMONITOR_H #include #include #include #include namespace KPeople { class AllContactsMonitorPrivate; /*! * \class KPeople::AllContactsMonitor * \inmodule KPeopleBackend * \inheaderfile KPeopleBackend/AllContactsMonitor * * \brief This class should be subclassed by each datasource and return a list of * all contacts that the datasource knows about. * * Subclasses are expected to be asynchronous * * \since 5.8 */ class KPEOPLEBACKEND_EXPORT AllContactsMonitor : public QObject { Q_OBJECT public: /*! * */ explicit AllContactsMonitor(); // TODO make protected? this isn't useful unless subclassed ~AllContactsMonitor() override; /*! * Returns all currently loaded contacts */ virtual QMap contacts(); // TODO redo as a state enum - InitialLoad, Fail, Loaded /*! * */ bool isInitialFetchComplete() const; /*! * */ bool initialFetchSuccess() const; Q_SIGNALS: /*! * DataSources should emit this whenever a known contact changes */ void contactChanged(const QString &contactUri, const KPeople::AbstractContact::Ptr &contact); /*! * DataSources should emit this whenever a contact is added */ void contactAdded(const QString &contactUri, const KPeople::AbstractContact::Ptr &contact); /*! * DataSources should emit this whenever a contact is removed and they are no longer able to supply up-to-date data on a contact */ void contactRemoved(const QString &contactUri); /*! * Notifies that the DataSource has completed it's initial fetch. * * \warning DataSources should use emitInitialFetchComplete() instead of emitting this signal * directly. * * \a success True when the fetch was successful, False when an error occurred. */ void initialFetchComplete(bool success); protected Q_SLOTS: /*! * DataSources should call this once they have finished initial retrieval of all contacts from their * storage. * * This will emit initialFetchComplete() signal * * \a success Whether the fetch was successful. */ void emitInitialFetchComplete(bool success); private: Q_DISABLE_COPY(AllContactsMonitor) Q_DECLARE_PRIVATE(AllContactsMonitor) AllContactsMonitorPrivate *d_ptr; }; } typedef QSharedPointer AllContactsMonitorPtr; #endif // ALLCONTACTSMONITOR_H