Qt Utilities  6.0.1
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();
102  void closed(NotificationCloseReason reason);
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  : QSet<QString>(capabilities.toSet())
133  , m_valid(true)
134 {
135 }
136 
138 {
139  return m_valid;
140 }
141 
143 {
144  return contains(QStringLiteral("body"));
145 }
146 
148 {
149  return contains(QStringLiteral("body-hyperlinks"));
150 }
151 
153 {
154  return contains(QStringLiteral("body-markup"));
155 }
156 
158 {
159  return contains(QStringLiteral("body-images"));
160 }
161 
163 {
164  return contains(QStringLiteral("icon-static")) || supportsAnimatedIcon();
165 }
166 
168 {
169  return contains(QStringLiteral("actions"));
170 }
171 
173 {
174  return contains(QStringLiteral("icon-multi"));
175 }
176 
178 {
179  return contains(QStringLiteral("action-icons"));
180 }
181 
183 {
184  return contains(QStringLiteral("sound"));
185 }
186 
188 {
189  return contains(QStringLiteral("persistence"));
190 }
191 
196 inline const QString &DBusNotification::applicationName() const
197 {
198  return m_applicationName;
199 }
200 
206 {
207  m_applicationName = applicationName;
208 }
209 
210 inline const QString &DBusNotification::title() const
211 {
212  return m_title;
213 }
214 
215 inline void DBusNotification::setTitle(const QString &title)
216 {
217  m_title = title;
218 }
219 
220 inline const QString &DBusNotification::message() const
221 {
222  return m_msg;
223 }
224 
225 inline void DBusNotification::setMessage(const QString &message)
226 {
227  m_msg = message;
228 }
229 
234 inline const QString &DBusNotification::icon() const
235 {
236  return m_icon;
237 }
238 
245 inline void DBusNotification::setIcon(const QString &icon)
246 {
247  m_icon = icon;
248 }
249 
253 inline QVariant DBusNotification::hint(const QString &name) const
254 {
255  return m_hints[name];
256 }
257 
261 inline QVariant DBusNotification::hint(const QString &name, const QString &fallbackNames...) const
262 {
263  const auto variant(m_hints[name]);
264  return variant.isNull() ? this->hint(fallbackNames) : variant;
265 }
266 
271 inline const QString DBusNotification::imagePath() const
272 {
273  return hint(QStringLiteral("image-data"), QStringLiteral("image_path")).toString();
274 }
275 
281 inline void DBusNotification::setImagePath(const QString &imagePath)
282 {
283  m_hints[QStringLiteral("image-path")] = imagePath;
284 }
285 
286 inline int DBusNotification::timeout() const
287 {
288  return m_timeout;
289 }
290 
292 {
293  m_timeout = timeout;
294 }
295 
299 inline int DBusNotification::urgency() const
300 {
301  return m_hints[QStringLiteral("urgency")].toInt();
302 }
303 
308 {
309  m_hints[QStringLiteral("urgency")] = urgency;
310 }
311 
315 inline bool DBusNotification::isResident() const
316 {
317  return m_hints[QStringLiteral("resident")].toBool();
318 }
319 
323 inline void DBusNotification::setResident(bool resident)
324 {
325  m_hints[QStringLiteral("resident")] = resident;
326 }
327 
332 inline QString DBusNotification::category() const
333 {
334  return m_hints[QStringLiteral("category")].toString();
335 }
336 
341 inline void DBusNotification::setCategory(const QString &category)
342 {
343  m_hints[QStringLiteral("category")] = category;
344 }
345 
356 inline const QStringList &DBusNotification::actions() const
357 {
358  return m_actions;
359 }
360 
365 inline void DBusNotification::setActions(const QStringList &actions)
366 {
367  m_actions = actions;
368 }
369 
370 inline const QVariantMap &DBusNotification::hints() const
371 {
372  return m_hints;
373 }
374 
375 inline QVariantMap &DBusNotification::hints()
376 {
377  return m_hints;
378 }
379 
380 inline bool DBusNotification::isVisible() const
381 {
382  return m_id != 0;
383 }
384 } // namespace QtUtilities
385 
386 #endif // MISC_UTILS_NOTIFICATION_H
QtUtilities::NotificationIcon::Information
QtUtilities::DBusNotification::setUrgency
void setUrgency(quint8 urgency)
Sets the urgency level (0 = low, 1 = normal, 2 = critical).
Definition: dbusnotification.h:307
QtUtilities::DBusNotification::category
QString category() const
Returns the category.
Definition: dbusnotification.h:332
QtUtilities::DBusNotification::timeout
int timeout() const
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:271
QtUtilities::DBusNotification::Capabilities::supportsMarkup
bool supportsMarkup() const
Definition: dbusnotification.h:152
QtUtilities::DBusNotification::icon
const QString & icon() const
QtUtilities::DBusNotification::setCategory
void setCategory(const QString &category)
Sets the category.
Definition: dbusnotification.h:341
QtUtilities::DBusNotification::setMessage
void setMessage(const QString &message)
Sets the message to be shown.
Definition: dbusnotification.h:225
QtUtilities::DBusNotification::isVisible
bool isVisible() const
Returns whether the notification is (still) visible.
Definition: dbusnotification.h:380
QtUtilities::DBusNotification::applicationName
const QString & applicationName() const
QtUtilities::DBusNotification::actions
const QStringList & actions() const
QtUtilities::DBusNotification::Capabilities::isValid
bool isValid() const
Definition: dbusnotification.h:137
QtUtilities::DBusNotification::setTitle
void setTitle(const QString &title)
Definition: dbusnotification.h:215
QtUtilities::DBusNotification::urgency
int urgency() const
Returns the urgency level (0 = low, 1 = normal, 2 = critical).
Definition: dbusnotification.h:299
QtUtilities::DBusNotification::Capabilities::supportsImages
bool supportsImages() const
Definition: dbusnotification.h:157
QtUtilities::DBusNotification::Capabilities
Definition: dbusnotification.h:33
QtUtilities::NotificationCloseReason::ActionInvoked
QtUtilities::DBusNotification::setActions
void setActions(const QStringList &actions)
Sets the actions for the notification.
Definition: dbusnotification.h:365
QtUtilities::DBusNotification::setResident
void setResident(bool resident)
Sets whether the notification will remain visible after an action has been clicked.
Definition: dbusnotification.h:323
QtUtilities::DBusNotification::Capabilities::supportsAnimatedIcon
bool supportsAnimatedIcon() const
Definition: dbusnotification.h:172
QtUtilities::DBusNotification::setTimeout
void setTimeout(int timeout)
Sets the number of milliseconds the notification will be visible after calling show().
Definition: dbusnotification.h:291
QT_UTILITIES_EXPORT
#define QT_UTILITIES_EXPORT
Marks the symbol to be exported by the qtutilities library.
QtUtilities::NotificationCloseReason::Manually
QtUtilities::DBusNotification::message
const QString & message() const
QtUtilities::NotificationIcon::NoIcon
QtUtilities::NotificationCloseReason::Undefined
QtUtilities::NotificationCloseReason::Expired
QtUtilities::DBusNotification::Capabilities::supportsSound
bool supportsSound() const
Definition: dbusnotification.h:182
QtUtilities::DBusNotification::title
const QString & title() const
QtUtilities::NotificationIcon::Critical
QtUtilities
!
Definition: trylocker.h:8
QtUtilities::DBusNotification::Capabilities::Capabilities
Capabilities()
Definition: dbusnotification.h:126
QtUtilities::NotificationIcon
NotificationIcon
Definition: dbusnotification.h:18
QtUtilities::DBusNotification::setImagePath
void setImagePath(const QString &imagePath)
Sets the image path.
Definition: dbusnotification.h:281
QtUtilities::DBusNotification::setIcon
void setIcon(const QString &icon)
Sets the icon name.
Definition: dbusnotification.h:245
QtUtilities::DBusNotification::isResident
bool isResident() const
Returns whether the notification will remain visible after an action has been clicked.
Definition: dbusnotification.h:315
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:253
QtUtilities::DBusNotification::Capabilities::supportsActions
bool supportsActions() const
Definition: dbusnotification.h:167
QtUtilities::NotificationIcon::Warning
QtUtilities::NotificationCloseReason::Dismissed
QtUtilities::DBusNotification::setApplicationName
void setApplicationName(const QString &applicationName)
Sets the application name to be used.
Definition: dbusnotification.h:205
QtUtilities::DBusNotification::Capabilities::supportsLinks
bool supportsLinks() const
Definition: dbusnotification.h:147
QtUtilities::DBusNotification::Capabilities::supportsIcon
bool supportsIcon() const
Definition: dbusnotification.h:162
QtUtilities::DBusNotification::Capabilities::supportsActionIcons
bool supportsActionIcons() const
Definition: dbusnotification.h:177
QtUtilities::DBusNotification::Capabilities::supportsBody
bool supportsBody() const
Definition: dbusnotification.h:142
QtUtilities::DBusNotification::Capabilities::supportsPercistence
bool supportsPercistence() const
Definition: dbusnotification.h:187
QtUtilities::DBusNotification::hints
const QVariantMap & hints() const
Definition: dbusnotification.h:370