1 /* 2 SPDX-FileCopyrightText: 2019 Kai Uwe Broulik <kde@privat.broulik.de> 3 4 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 5 */ 6 7 #pragma once 8 9 #include <QDBusContext> 10 #include <QDBusObjectPath> 11 #include <QObject> 12 #include <QSet> 13 #include <QVector> 14 15 #include "notifications.h" 16 17 class QDBusServiceWatcher; 18 class QTimer; 19 20 namespace NotificationManager 21 { 22 class Job; 23 24 class Q_DECL_HIDDEN JobsModelPrivate : public QObject, protected QDBusContext 25 { 26 Q_OBJECT 27 28 public: 29 JobsModelPrivate(QObject *parent); 30 ~JobsModelPrivate() override; 31 32 // DBus 33 // kuiserver 34 void registerService(const QString &service, const QString &objectPath); 35 void emitJobUrlsChanged(); 36 bool requiresJobTracker() const; 37 QStringList registeredJobContacts() const; 38 // V1 39 QDBusObjectPath requestView(const QString &appName, const QString &appIconName, int capabilities); 40 // V2 41 QDBusObjectPath requestView(const QString &desktopEntry, int capabilities, const QVariantMap &hints); 42 43 Q_SIGNALS: 44 void jobViewAboutToBeAdded(int row, Job *job); 45 void jobViewAdded(int row, Job *job); 46 47 void jobViewAboutToBeRemoved(int row); //, Job *job); 48 void jobViewRemoved(int row); 49 50 void jobViewChanged(int row, Job *job, const QVector<int> &roles); 51 52 void serviceOwnershipLost(); 53 54 // DBus 55 // kuiserver 56 void jobUrlsChanged(const QStringList &urls); 57 58 public: // stuff used by public class 59 bool init(); 60 61 void remove(Job *job); 62 void removeAt(int row); 63 64 bool m_valid = false; 65 QVector<Job *> m_jobViews; 66 67 private: 68 void unwatchJob(Job *job); 69 void onServiceUnregistered(const QString &serviceName); 70 71 void updateApplicationPercentage(const QString &desktopEntry); 72 73 QStringList jobUrls() const; 74 void scheduleUpdate(Job *job, Notifications::Roles role); 75 76 QDBusServiceWatcher *m_serviceWatcher = nullptr; 77 // Job -> serviceName 78 QHash<Job *, QString> m_jobServices; 79 int m_highestJobId = 1; 80 81 QTimer *m_compressUpdatesTimer = nullptr; 82 QHash<Job *, QVector<int>> m_pendingDirtyRoles; 83 84 QVector<Job *> m_pendingJobViews; 85 }; 86 87 } // namespace NotificationManager 88