File indexing completed on 2025-02-16 04:23:12

0001 /*
0002     SPDX-FileCopyrightText: 2022 Volker Krause <vkrause@kde.org>
0003     SPDX-License-Identifier: LGPL-2.0-or-later
0004 */
0005 
0006 #ifndef KUNIFIEDPUSH_DISTRIBUTOR_H
0007 #define KUNIFIEDPUSH_DISTRIBUTOR_H
0008 
0009 #include "abstractpushprovider.h"
0010 #include "command.h"
0011 
0012 #include "../shared/clientinfo_p.h"
0013 #include "../shared/distributorstatus_p.h"
0014 
0015 #include <QDBusContext>
0016 #include <QObject>
0017 
0018 #include <deque>
0019 #include <memory>
0020 #include <vector>
0021 
0022 namespace KUnifiedPush {
0023 
0024 class Client;
0025 class Message;
0026 
0027 /** UnifiedPush distributor service. */
0028 class Distributor : public QObject, public QDBusContext
0029 {
0030     Q_OBJECT
0031 public:
0032     explicit Distributor(QObject *parent = nullptr);
0033     ~Distributor();
0034 
0035     // UnifiedPush D-Bus interface
0036     QString Register(const QString &serviceName, const QString &token, const QString &description, QString &registrationResultReason);
0037     void Unregister(const QString &token);
0038 
0039     // KCM D-Bus interface
0040     int status() const;
0041     QString pushProviderId() const;
0042     QVariantMap pushProviderConfiguration(const QString &pushProviderId) const;
0043     void setPushProvider(const QString &pushProviderId, const QVariantMap &config);
0044     QList<KUnifiedPush::ClientInfo> registeredClients() const;
0045     void forceUnregisterClient(const QString &token);
0046 
0047 Q_SIGNALS:
0048     void statusChanged();
0049     void pushProviderChanged();
0050     void registeredClientsChanged();
0051 
0052 private:
0053     void messageReceived(const Message &msg) const;
0054     void clientRegistered(const Client &client, AbstractPushProvider::Error error, const QString &errorMsg);
0055     void clientUnregistered(const Client &client, AbstractPushProvider::Error error);
0056     void providerConnected();
0057     void providerDisconnected(AbstractPushProvider::Error error, const QString &errorMsg);
0058 
0059     QStringList clientTokens() const;
0060 
0061     bool setupPushProvider();
0062     void purgeUnavailableClients();
0063 
0064     bool hasCurrentCommand() const;
0065     void processNextCommand();
0066 
0067     void setStatus(DistributorStatus::Status status);
0068 
0069     bool isNetworkAvailable() const;
0070 
0071     std::unique_ptr<AbstractPushProvider> m_pushProvider;
0072     std::vector<Client> m_clients;
0073     Command m_currentCommand;
0074     std::deque<Command> m_commandQueue;
0075     DistributorStatus::Status m_status = DistributorStatus::Unknown;
0076 };
0077 
0078 }
0079 
0080 #endif // KUNIFIEDPUSH_DISTRIBUTOR_H