From dd1fc613da7ffa9039495f6c3fe466feae074019 Mon Sep 17 00:00:00 2001 From: Javier Date: Wed, 1 Apr 2015 03:36:17 +0200 Subject: escape notification text --- saltoqd/cardmanager.cpp | 17 +++++++++++++---- saltoqd/cardmanager.h | 1 + saltoqd/notificationmonitor.cpp | 20 +++++++++++++++++++- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/saltoqd/cardmanager.cpp b/saltoqd/cardmanager.cpp index 7465cc4..ab3a0bc 100644 --- a/saltoqd/cardmanager.cpp +++ b/saltoqd/cardmanager.cpp @@ -274,28 +274,37 @@ void CardManager::uninstallDeck(CardDeck *deck) disconnect(deck, 0, this, 0); } +QString CardManager::escapeString(const QString &s) +{ + QString e(s); + e.replace('\\', "\\\\"); + e.replace('\n', "\\n"); + e.replace('"', "\\\""); + return e; +} + QString CardManager::generateCardDescription(const QString &verb, Card *card) const { QString desc = verb + " { "; desc += QString("id = \"%1\", ").arg(card->id()); desc += QString("version = 2, cardevents = \"true\", "); if (!card->header().isEmpty()) { - desc += QString("header = \"%1\", ").arg(card->header()); + desc += QString("header = \"%1\", ").arg(escapeString(card->header())); } if (!card->title().isEmpty()) { - desc += QString("title = \"%1\", ").arg(card->title()); + desc += QString("title = \"%1\", ").arg(escapeString(card->title())); } if (card->dateTime().isValid()) { desc += QString("time = \"%1\", ").arg(card->dateTime().toMSecsSinceEpoch()); } if (!card->info().isEmpty()) { - desc += QString("info = \"%1\", ").arg(card->info()); + desc += QString("info = \"%1\", ").arg(escapeString(card->info())); } if (!card->isVibrate()) { desc += QString("suppressvibe = \"true\", "); } if (!card->text().isEmpty()) { - desc += QString("detail = { \"%1\" }").arg(card->text()); + desc += QString("detail = { \"%1\" }").arg(escapeString(card->text())); } desc += QString("}\n"); return desc; diff --git a/saltoqd/cardmanager.h b/saltoqd/cardmanager.h index 5162a3b..e4ffc2a 100644 --- a/saltoqd/cardmanager.h +++ b/saltoqd/cardmanager.h @@ -132,6 +132,7 @@ public slots: void uninstallDeck(CardDeck *deck); private: + static QString escapeString(const QString &s); QString generateCardDescription(const QString &verb, Card * card) const; QByteArray packMessage(CardDeck *deck, const QString &msg) const; QPair unpackMessage(const QByteArray &data) const; diff --git a/saltoqd/notificationmonitor.cpp b/saltoqd/notificationmonitor.cpp index 900b742..107e165 100644 --- a/saltoqd/notificationmonitor.cpp +++ b/saltoqd/notificationmonitor.cpp @@ -268,7 +268,21 @@ void NotificationMonitor::processIncomingNotification(quint32 id, const QVariant qDebug() << "Incoming notification" << id << content; MonitoredNotification *n = _notifs.value(id, 0); if (n) { - // TODO emit changed signals for individual fields + QString s = content["summary"].toString(); + if (n->_summary != s) { + n->_summary = s; + emit n->summaryChanged(); + } + s = content["body"].toString(); + if (n->_body != s) { + n->_body = s; + emit n->bodyChanged(); + } + QDateTime dt = content["timestamp"].toDateTime(); + if (dt.isValid() && n->_timestamp != dt) { + n->_timestamp = dt; + emit n->timestampChanged(); + } } else { n = new MonitoredNotification(this); n->_id = id; @@ -277,6 +291,10 @@ void NotificationMonitor::processIncomingNotification(quint32 id, const QVariant n->_body = content["body"].toString(); n->_timestamp = content["timestamp"].toDateTime(); + if (!n->_timestamp.isValid()) { + n->_timestamp = QDateTime::currentDateTime(); + } + _notifs.insert(id, n); emit notification(n); -- cgit v1.2.3