diff options
Diffstat (limited to 'saltoqd/notificationmonitor.cpp')
-rw-r--r-- | saltoqd/notificationmonitor.cpp | 71 |
1 files changed, 13 insertions, 58 deletions
diff --git a/saltoqd/notificationmonitor.cpp b/saltoqd/notificationmonitor.cpp index 2c6621d..5cff5f6 100644 --- a/saltoqd/notificationmonitor.cpp +++ b/saltoqd/notificationmonitor.cpp @@ -116,6 +116,10 @@ QVariantHash parse_notify_call(DBusMessage *msg) const char *s; dbus_message_iter_get_basic(&value, &s); r.insert("category", QString::fromUtf8(s)); + } else if (strcmp(key, "x-nemo-timestamp") == 0 && dbus_message_iter_get_arg_type(&value) == DBUS_TYPE_STRING) { + const char *s; + dbus_message_iter_get_basic(&value, &s); + r.insert("timestamp", QDateTime::fromString(QString::fromUtf8(s), Qt::ISODate)); } dbus_message_iter_next(&sub); @@ -201,7 +205,7 @@ void remove_match_rule(const char *rule) } -IncomingNotification::IncomingNotification(QObject *parent) : +MonitoredNotification::MonitoredNotification(QObject *parent) : QObject(parent) { } @@ -262,13 +266,16 @@ NotificationMonitor *NotificationMonitor::instance() void NotificationMonitor::processIncomingNotification(quint32 id, const QVariantHash &content) { qDebug() << "Incoming notification" << id << content; - IncomingNotification *n = _notifs.value(id, 0); + MonitoredNotification *n = _notifs.value(id, 0); if (n) { // TODO emit changed signals for individual fields } else { - n = new IncomingNotification(this); - n->_sender = content["app_name"].toString(); + n = new MonitoredNotification(this); + n->_id = id; + n->_sender = content["sender"].toString(); n->_summary = content["summary"].toString(); + n->_body = content["body"].toString(); + n->_timestamp = content["timestamp"].toDateTime(); emit notification(n); } @@ -277,62 +284,10 @@ void NotificationMonitor::processIncomingNotification(quint32 id, const QVariant void NotificationMonitor::processCloseNotification(quint32 id, quint32 reason) { qDebug() << "Close notification" << id << reason; - IncomingNotification *n = _notifs.value(id, 0); + MonitoredNotification *n = _notifs.value(id, 0); if (n) { _notifs.remove(id); + emit n->closed(reason); n->deleteLater(); } } - -#if 0 - -uint NotificationMonitor::Notify(const QString &app_name, uint replaces_id, const QString &app_icon, const QString &summary, const QString &body, const QStringList &actions, const QVariantHash &hints, int expire_timeout) -{ - QIcon icon; - - qDebug() << "Got notification" << app_name << app_icon << summary << body; - - // Avoid sending a reply for this method call, since we've received it - // because we're eavesdropping. - // The actual target of the method call will send the proper reply, not us. - Q_ASSERT(calledFromDBus()); - setDelayedReply(true); - - // If the notification mentions a specific icon, then use it. - // But otherwise let's prefer our builtin icons. - if (app_icon.startsWith("/")) { - icon = QIcon(app_icon); - } else if (app_icon.startsWith("file:")) { - QUrl url(app_icon); - icon = QIcon(url.toLocalFile()); - } else { - QString category = hints.value("category").toString(); - // Let's hardcode a few categories for now.. - if (!category.isEmpty()) { - qDebug() << "TODO: Category icons"; - } - } - - int count = hints.value("x-nemo-item-count").toInt(); - QDateTime dateTime = hints.value("x-nemo-timestamp").toDateTime(); - if (!dateTime.isValid()) { - dateTime = QDateTime::currentDateTime(); - } - - if (summary.isEmpty() && body.isEmpty()) { - // Avoid sending empty notifications to watch. - return 0; - } - - emit incomingNotification(app_name, icon, summary, count, body, dateTime); - - return 0; -} - -void NotificationMonitor::CloseNotification(uint id) -{ - qDebug() << "Close notification" << id; -} - -#endif - |