forked from linuxdeepin/dde-shell
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnotificationmanager.h
More file actions
99 lines (78 loc) · 3.4 KB
/
notificationmanager.h
File metadata and controls
99 lines (78 loc) · 3.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#include <QDBusContext>
#include <QDBusVariant>
class QTimer;
namespace notification {
class NotifyEntity;
class DataAccessor;
class NotificationSetting;
class NotificationManager : public QObject, public QDBusContext
{
Q_OBJECT
Q_PROPERTY(uint recordCount READ recordCount NOTIFY RecordCountChanged)
public:
explicit NotificationManager(QObject *parent = nullptr);
~NotificationManager() override;
public:
bool registerDbusService();
uint recordCount() const;
Q_INVOKABLE void actionInvoked(qint64 id, uint bubbleId, const QString &actionKey);
Q_INVOKABLE void notificationClosed(qint64 id, uint bubbleId, uint reason);
Q_INVOKABLE void notificationReplaced(qint64 id);
void removeNotification(qint64 id);
void removeNotifications(const QString &appName);
void removeNotifications();
Q_SIGNALS:
// Standard Notifications dbus implementation
void ActionInvoked(uint id, const QString &actionKey);
void NotificationClosed(uint id, uint reason);
// Extra DBus APIs
void RecordCountChanged(uint count);
void AppInfoChanged(const QString &id, uint item, const QDBusVariant &value);
void SystemInfoChanged(uint item, const QDBusVariant &value);
void AppAdded(const QString &id);
void AppRemoved(const QString &id);
void NotificationStateChanged(qint64 id, int processedType);
public Q_SLOTS:
// Standard Notifications dbus implementation
QStringList GetCapabilities();
uint Notify(const QString &appName, uint replacesId, const QString &appIcon, const QString &summary, const QString &body, const QStringList &actions, const QVariantMap &hints, int expireTimeout);
void CloseNotification(uint id);
void GetServerInformation(QString &name, QString &vendor, QString &version, QString &specVersion);
// Extra DBus APIS
QStringList GetAppList();
void SetAppInfo(const QString &appId, uint configItem, const QVariant &value);
QVariant GetAppInfo(const QString &appId, uint configItem);
void SetSystemInfo(uint configItem, const QVariant &value);
QVariant GetSystemInfo(uint configItem);
private:
bool isDoNotDisturb() const;
bool recordNotification(NotifyEntity &entity);
void tryPlayNotificationSound(const NotifyEntity &entity, const QString &appId, bool dndMode) const;
void emitRecordCountChanged();
void pushPendingEntity(const NotifyEntity &entity, int expireTimeout);
void updateEntityProcessed(qint64 id, uint reason);
void updateEntityProcessed(const NotifyEntity &entity);
QString appIdByAppName(const QString &appName) const;
void doActionInvoked(const NotifyEntity &entity, const QString &actionId);
bool invokeShellAction(const QString &data);
void initScreenLockedState();
private slots:
void onHandingPendingEntities();
void removePendingEntity(const NotifyEntity &entity);
void onScreenLockedChanged(bool);
private:
uint m_replacesCount = 0;
bool m_screenLocked = false;
DataAccessor *m_persistence = nullptr;
NotificationSetting *m_setting = nullptr;
QTimer *m_pendingTimeout = nullptr;
qint64 m_lastTimeoutPoint = std::numeric_limits<qint64>::max();
QMultiHash<qint64, NotifyEntity> m_pendingTimeoutEntities;
QStringList m_systemApps;
QMap<QString, QVariant> m_appNamesMap;
};
} // notification