Qt Utilities  6.0.6
Common Qt related C++ classes and routines used by my applications such as dialogs, widgets and models
dbusnotification.h
Go to the documentation of this file.
1 #ifndef MISC_UTILS_NOTIFICATION_H
2 #define MISC_UTILS_NOTIFICATION_H
3 
4 #include "../global.h"
5 
6 #include <QObject>
7 #include <QSet>
8 #include <QVariantMap>
9 
10 #include <functional>
11 
12 QT_FORWARD_DECLARE_CLASS(QDBusPendingCallWatcher)
13 
14 class OrgFreedesktopNotificationsInterface;
15 
16 namespace QtUtilities {
17 
19 
21 
22 class QT_UTILITIES_EXPORT DBusNotification : public QObject {
23  Q_OBJECT
24  Q_PROPERTY(QString applicationName READ applicationName WRITE setApplicationName)
25  Q_PROPERTY(QString title READ title WRITE setTitle)
26  Q_PROPERTY(QString message READ message WRITE setMessage)
27  Q_PROPERTY(QString icon READ icon WRITE setIcon)
28  Q_PROPERTY(int timeout READ timeout WRITE setTimeout)
29  Q_PROPERTY(QStringList actions READ actions WRITE setActions)
30  Q_PROPERTY(bool visible READ isVisible)
31 
32 public:
33  class QT_UTILITIES_EXPORT Capabilities : public QSet<QString> {
34  public:
35  explicit Capabilities();
36  explicit Capabilities(const QStringList &capabilities);
37  bool isValid() const;
38  bool supportsBody() const;
39  bool supportsLinks() const;
40  bool supportsMarkup() const;
41  bool supportsImages() const;
42  bool supportsIcon() const;
43  bool supportsActions() const;
44  bool supportsAnimatedIcon() const;
45  bool supportsActionIcons() const;
46  bool supportsSound() const;
47  bool supportsPercistence() const;
48 
49  private:
50  bool m_valid;
51  };
52 
53  explicit DBusNotification(
54  const QString &title, NotificationIcon icon = NotificationIcon::Information, int timeout = 10000, QObject *parent = nullptr);
55  explicit DBusNotification(const QString &title, const QString &icon, int timeout = 10000, QObject *parent = nullptr);
56  ~DBusNotification() override;
57 
58  static bool isAvailable();
59  const QString &applicationName() const;
60  void setApplicationName(const QString &applicationName);
61  const QString &title() const;
62  void setTitle(const QString &title);
63  const QString &message() const;
64  void setMessage(const QString &message);
65  const QString &icon() const;
66  void setIcon(const QString &icon);
67  void setIcon(NotificationIcon icon);
68  const QImage image() const;
69  void setImage(const QImage &image);
70  const QString imagePath() const;
71  void setImagePath(const QString &imagePath);
72  int timeout() const;
73  void setTimeout(int timeout);
74  int urgency() const;
75  void setUrgency(quint8 urgency);
76  bool isResident() const;
77  void setResident(bool resident);
78  QString category() const;
79  void setCategory(const QString &category);
80  const QStringList &actions() const;
81  void setActions(const QStringList &actions);
82  const QVariantMap &hints() const;
83  QVariantMap &hints();
84  QVariant hint(const QString &name) const;
85  QVariant hint(const QString &name, const QString &fallbackNames...) const;
86  bool isVisible() const;
87  void deleteOnCloseOrError();
88  static bool queryCapabilities(const std::function<void(Capabilities &&capabilities)> &callback);
89 
90 public Q_SLOTS:
91  bool show();
92  bool show(const QString &message);
93  bool update(const QString &line);
94  bool hide();
95 
96 Q_SIGNALS:
98  void shown();
100  void error();
104  void actionInvoked(const QString &action);
105 
106 private Q_SLOTS:
107  void handleNotifyResult(QDBusPendingCallWatcher *);
108  static void handleNotificationClosed(uint id, uint reason);
109  static void handleActionInvoked(uint id, const QString &action);
110 
111 private:
112  static void initInterface();
113 
114  uint m_id;
115  QDBusPendingCallWatcher *m_watcher;
116  QString m_applicationName;
117  QString m_title;
118  QString m_msg;
119  QString m_icon;
120  int m_timeout;
121  QStringList m_actions;
122  QVariantMap m_hints;
123  static OrgFreedesktopNotificationsInterface *s_dbusInterface;
124 };
125 
127  : m_valid(false)
128 {
129 }
130 
131 inline DBusNotification::Capabilities::Capabilities(const QStringList &capabilities)
132 #if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
133  : QSet<QString>(capabilities.toSet())
134 #else
135  : QSet<QString>(capabilities.begin(), capabilities.end())
136 #endif
137  , m_valid(true)
138 {
139 }
140 
142 {
143  return m_valid;
144 }
145 
147 {
148  return contains(QStringLiteral("body"));
149 }
150 
152 {
153  return contains(QStringLiteral("body-hyperlinks"));
154 }
155 
157 {
158  return contains(QStringLiteral("body-markup"));
159 }
160 
162 {
163  return contains(QStringLiteral("body-images"));
164 }
165 
167 {
168  return contains(QStringLiteral("icon-static")) || supportsAnimatedIcon();
169 }
170 
172 {
173  return contains(QStringLiteral("actions"));
174 }
175 
177 {
178  return contains(QStringLiteral("icon-multi"));
179 }
180 
182 {
183  return contains(QStringLiteral("action-icons"));
184 }
185 
187 {
188  return contains(QStringLiteral("sound"));
189 }
190 
192 {
193  return contains(QStringLiteral("persistence"));
194 }
195 
200 inline const QString &DBusNotification::applicationName() const
201 {
202  return m_applicationName;
203 }
204 
210 {
211  m_applicationName = applicationName;
212 }
213 
214 inline const QString &DBusNotification::title() const
215 {
216  return m_title;
217 }
218 
219 inline void DBusNotification::setTitle(const QString &title)
220 {
221  m_title = title;
222 }
223 
224 inline const QString &DBusNotification::message() const
225 {
226  return m_msg;
227 }
228 
229 inline void DBusNotification::setMessage(const QString &message)
230 {
231  m_msg = message;
232 }
233 
238 inline const QString &DBusNotification::icon() const
239 {
240  return m_icon;
241 }
242 
249 inline void DBusNotification::setIcon(const QString &icon)
250 {
251  m_icon = icon;
252 }
253 
257 inline QVariant DBusNotification::hint(const QString &name) const
258 {
259  return m_hints[name];
260 }
261 
265 inline QVariant DBusNotification::hint(const QString &name, const QString &fallbackNames...) const
266 {
267  const auto variant(m_hints[name]);
268  return variant.isNull() ? this->hint(fallbackNames) : variant;
269 }
270 
275 inline const QString DBusNotification::imagePath() const
276 {
277  return hint(QStringLiteral("image-data"), QStringLiteral("image_path")).toString();
278 }
279 
285 inline void DBusNotification::setImagePath(const QString &imagePath)
286 {
287  m_hints[QStringLiteral("image-path")] = imagePath;
288 }
289 
290 inline int DBusNotification::timeout() const
291 {
292  return m_timeout;
293 }
294 
296 {
297  m_timeout = timeout;
298 }
299 
303 inline int DBusNotification::urgency() const
304 {
305  return m_hints[QStringLiteral("urgency")].toInt();
306 }
307 
312 {
313  m_hints[QStringLiteral("urgency")] = urgency;
314 }
315 
319 inline bool DBusNotification::isResident() const
320 {
321  return m_hints[QStringLiteral("resident")].toBool();
322 }
323 
327 inline void DBusNotification::setResident(bool resident)
328 {
329  m_hints[QStringLiteral("resident")] = resident;
330 }
331 
336 inline QString DBusNotification::category() const
337 {
338  return m_hints[QStringLiteral("category")].toString();
339 }
340 
345 inline void DBusNotification::setCategory(const QString &category)
346 {
347  m_hints[QStringLiteral("category")] = category;
348 }
349 
360 inline const QStringList &DBusNotification::actions() const
361 {
362  return m_actions;
363 }
364 
369 inline void DBusNotification::setActions(const QStringList &actions)
370 {
371  m_actions = actions;
372 }
373 
374 inline const QVariantMap &DBusNotification::hints() const
375 {
376  return m_hints;
377 }
378 
379 inline QVariantMap &DBusNotification::hints()
380 {
381  return m_hints;
382 }
383 
384 inline bool DBusNotification::isVisible() const
385 {
386  return m_id != 0;
387 }
388 } // namespace QtUtilities
389 
390 #endif // MISC_UTILS_NOTIFICATION_H
QtUtilities::NotificationIcon::Information
@ Information
QtUtilities::DBusNotification::setUrgency
void setUrgency(quint8 urgency)
Sets the urgency level (0 = low, 1 = normal, 2 = critical).
Definition: dbusnotification.h:311
QtUtilities::DBusNotification::category
QString category() const
Returns the category.
Definition: dbusnotification.h:336
QtUtilities::DBusNotification
The DBusNotification class emits D-Bus notifications.
Definition: dbusnotification.h:22
QtUtilities::DBusNotification::imagePath
const QString imagePath() const
Returns the image path.
Definition: dbusnotification.h:275
QtUtilities::DBusNotification::Capabilities::supportsMarkup
bool supportsMarkup() const
Definition: dbusnotification.h:156
QtUtilities::DBusNotification::setCategory
void setCategory(const QString &category)
Sets the category.
Definition: dbusnotification.h:345
QtUtilities::DBusNotification::setMessage
void setMessage(const QString &message)
Sets the message to be shown.
Definition: dbusnotification.h:229
QtUtilities::DBusNotification::isVisible
bool isVisible() const
Returns whether the notification is (still) visible.
Definition: dbusnotification.h:384
QtUtilities::DBusNotification::Capabilities::isValid
bool isValid() const
Definition: dbusnotification.h:141
QtUtilities::DBusNotification::setTitle
void setTitle(const QString &title)
Definition: dbusnotification.h:219
QtUtilities::DBusNotification::shown
void shown()
Emitted when the notification could be shown successful.
QtUtilities::DBusNotification::urgency
int urgency() const
Returns the urgency level (0 = low, 1 = normal, 2 = critical).
Definition: dbusnotification.h:303
QtUtilities::DBusNotification::Capabilities::supportsImages
bool supportsImages() const
Definition: dbusnotification.h:161
QtUtilities::DBusNotification::Capabilities
Definition: dbusnotification.h:33
QtUtilities::NotificationCloseReason::ActionInvoked
@ ActionInvoked
QtUtilities::DBusNotification::setActions
void setActions(const QStringList &actions)
Sets the actions for the notification.
Definition: dbusnotification.h:369
QtUtilities::DBusNotification::setResident
void setResident(bool resident)
Sets whether the notification will remain visible after an action has been clicked.
Definition: dbusnotification.h:327
QtUtilities::DBusNotification::Capabilities::supportsAnimatedIcon
bool supportsAnimatedIcon() const
Definition: dbusnotification.h:176
QtUtilities::DBusNotification::setTimeout
void setTimeout(int timeout)
Sets the number of milliseconds the notification will be visible after calling show().
Definition: dbusnotification.h:295
QT_UTILITIES_EXPORT
#define QT_UTILITIES_EXPORT
Marks the symbol to be exported by the qtutilities library.
QtUtilities::DBusNotification::message
QString message
Returns the assigned message.
Definition: dbusnotification.h:26
QtUtilities::NotificationCloseReason::Manually
@ Manually
QtUtilities::DBusNotification::applicationName
QString applicationName
Definition: dbusnotification.h:24
QtUtilities::NotificationIcon::NoIcon
@ NoIcon
QtUtilities::NotificationCloseReason::Undefined
@ Undefined
QtUtilities::DBusNotification::timeout
int timeout
Returns the number of milliseconds the notification will be visible after calling show().
Definition: dbusnotification.h:28
QtUtilities::DBusNotification::actions
QStringList actions
Returns the assigned actions.
Definition: dbusnotification.h:29
QtUtilities::NotificationCloseReason::Expired
@ Expired
QtUtilities::DBusNotification::Capabilities::supportsSound
bool supportsSound() const
Definition: dbusnotification.h:186
QtUtilities::DBusNotification::error
void error()
Emitted when the notification couldn't be shown.
QtUtilities::NotificationIcon::Critical
@ Critical
QtUtilities
!
Definition: trylocker.h:8
QtUtilities::DBusNotification::closed
void closed(NotificationCloseReason reason)
Emitted when the notification has been closed.
QtUtilities::DBusNotification::actionInvoked
void actionInvoked(const QString &action)
Emitted when action has been invoked.
QtUtilities::DBusNotification::Capabilities::Capabilities
Capabilities()
Definition: dbusnotification.h:126
QtUtilities::DBusNotification::title
QString title
Definition: dbusnotification.h:25
QtUtilities::NotificationIcon
NotificationIcon
Definition: dbusnotification.h:18
QtUtilities::DBusNotification::setImagePath
void setImagePath(const QString &imagePath)
Sets the image path.
Definition: dbusnotification.h:285
QtUtilities::DBusNotification::setIcon
void setIcon(const QString &icon)
Sets the icon name.
Definition: dbusnotification.h:249
QtUtilities::DBusNotification::isResident
bool isResident() const
Returns whether the notification will remain visible after an action has been clicked.
Definition: dbusnotification.h:319
QtUtilities::NotificationCloseReason
NotificationCloseReason
Definition: dbusnotification.h:20
QtUtilities::DBusNotification::hint
QVariant hint(const QString &name) const
Returns the hint with the specified name.
Definition: dbusnotification.h:257
QtUtilities::DBusNotification::Capabilities::supportsActions
bool supportsActions() const
Definition: dbusnotification.h:171
QtUtilities::NotificationIcon::Warning
@ Warning
QtUtilities::NotificationCloseReason::Dismissed
@ Dismissed
QtUtilities::DBusNotification::setApplicationName
void setApplicationName(const QString &applicationName)
Sets the application name to be used.
Definition: dbusnotification.h:209
QtUtilities::DBusNotification::Capabilities::supportsLinks
bool supportsLinks() const
Definition: dbusnotification.h:151
QtUtilities::DBusNotification::Capabilities::supportsIcon
bool supportsIcon() const
Definition: dbusnotification.h:166
QtUtilities::DBusNotification::Capabilities::supportsActionIcons
bool supportsActionIcons() const
Definition: dbusnotification.h:181
QtUtilities::DBusNotification::Capabilities::supportsBody
bool supportsBody() const
Definition: dbusnotification.h:146
QtUtilities::DBusNotification::icon
QString icon
Definition: dbusnotification.h:27
QtUtilities::DBusNotification::Capabilities::supportsPercistence
bool supportsPercistence() const
Definition: dbusnotification.h:191
QtUtilities::DBusNotification::hints
const QVariantMap & hints() const
Definition: dbusnotification.h:374