From cd3011c3ca4eb24627870326d676551edda1c030 Mon Sep 17 00:00:00 2001 From: Philipp Andreas Date: Thu, 10 Jul 2014 21:54:43 +0200 Subject: Never send notifications with empty parts. replace empty strings by one space (or the message does not get displayed) --- daemon/watchconnector.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/daemon/watchconnector.cpp b/daemon/watchconnector.cpp index dbcd831..ff64a02 100644 --- a/daemon/watchconnector.cpp +++ b/daemon/watchconnector.cpp @@ -249,10 +249,10 @@ QString WatchConnector::timeStamp() void WatchConnector::sendNotification(unsigned int lead, QString sender, QString data, QString subject) { QStringList tmp; - tmp.append(sender); - tmp.append(data); + tmp.append(sender.isEmpty() ? " " : sender); + tmp.append(data.isEmpty() ? " " : data); tmp.append(timeStamp()); - if (lead == 0) tmp.append(subject); + if (lead == 0) tmp.append(subject.isEmpty() ? " " : subject); QByteArray res = buildMessageData(lead, tmp); -- cgit v1.2.3 From a4084dcd38a78dfc9113168e378b5fa7f7e9f6ea Mon Sep 17 00:00:00 2001 From: Philipp Andreas Date: Thu, 10 Jul 2014 21:56:19 +0200 Subject: Adding support for default notifications. --- daemon/daemon.cpp | 3 +- daemon/daemon.pro | 6 +- daemon/manager.cpp | 31 ++++++++++- daemon/manager.h | 8 ++- daemon/notificationmanager.cpp | 124 +++++++++++++++++++++++++++++++++++++++++ daemon/notificationmanager.h | 41 ++++++++++++++ 6 files changed, 206 insertions(+), 7 deletions(-) create mode 100644 daemon/notificationmanager.cpp create mode 100644 daemon/notificationmanager.h diff --git a/daemon/daemon.cpp b/daemon/daemon.cpp index ab61171..66352fd 100644 --- a/daemon/daemon.cpp +++ b/daemon/daemon.cpp @@ -50,8 +50,9 @@ int main(int argc, char *argv[]) watch::WatchConnector watch; DBusConnector dbus; VoiceCallManager voice; + NotificationManager notifications; - Manager manager(&watch, &dbus, &voice); + Manager manager(&watch, &dbus, &voice, ¬ifications); signal(SIGINT, signalhandler); signal(SIGTERM, signalhandler); diff --git a/daemon/daemon.pro b/daemon/daemon.pro index deadea0..2c4894a 100644 --- a/daemon/daemon.pro +++ b/daemon/daemon.pro @@ -16,7 +16,8 @@ SOURCES += \ voicecallhandler.cpp \ watchconnector.cpp \ dbusconnector.cpp \ - dbusadaptor.cpp + dbusadaptor.cpp \ + notificationmanager.cpp HEADERS += \ manager.h \ @@ -24,7 +25,8 @@ HEADERS += \ voicecallhandler.h \ watchconnector.h \ dbusconnector.h \ - dbusadaptor.h + dbusadaptor.h \ + notificationmanager.h INSTALLS += target pebbled diff --git a/daemon/manager.cpp b/daemon/manager.cpp index f25e724..11444fe 100644 --- a/daemon/manager.cpp +++ b/daemon/manager.cpp @@ -5,8 +5,8 @@ #include #include -Manager::Manager(watch::WatchConnector *watch, DBusConnector *dbus, VoiceCallManager *voice) : - QObject(0), watch(watch), dbus(dbus), voice(voice), +Manager::Manager(watch::WatchConnector *watch, DBusConnector *dbus, VoiceCallManager *voice, NotificationManager *notifications) : + QObject(0), watch(watch), dbus(dbus), voice(voice), notifications(notifications), notification(MNotification::DeviceEvent) { // We don't need to handle presence changes, so report them separately and ignore them @@ -24,6 +24,10 @@ Manager::Manager(watch::WatchConnector *watch, DBusConnector *dbus, VoiceCallMan connect(voice, SIGNAL(activeVoiceCallChanged()), SLOT(onActiveVoiceCallChanged())); connect(voice, SIGNAL(error(const QString &)), SLOT(onVoiceError(const QString &))); + connect(notifications, SIGNAL(error(const QString &)), SLOT(onNotifyError(const QString &))); + connect(notifications, SIGNAL(emailNotify(const QString &,const QString &,const QString &)), SLOT(onEmailNotify(const QString &,const QString &,const QString &))); + connect(notifications, SIGNAL(smsNotify(const QString &,const QString &)), SLOT(onSmsNotify(const QString &,const QString &))); + // Watch instantiated hangup, follow the orders connect(watch, SIGNAL(hangup()), SLOT(hangupAll())); connect(watch, SIGNAL(connectedChanged()), SLOT(onConnectedChanged())); @@ -145,6 +149,29 @@ void Manager::onVoiceError(const QString &message) qWarning() << "Error: " << message; } + +void Manager::onNotifyError(const QString &message) +{ + qWarning() << "Error: " << message; +} + +void Manager::onSmsNotify(const QString &sender, const QString &data) +{ + qDebug() << "SMS:"; + qDebug() << sender; + qDebug() << data; + watch->sendSMSNotification(sender, data); +} + +void Manager::onEmailNotify(const QString &sender, const QString &data,const QString &subject) +{ + qDebug() << "Email:"; + qDebug() << sender; + qDebug() << data; + qDebug() << subject; + watch->sendEmailNotification(sender, data, subject); +} + void Manager::hangupAll() { foreach (VoiceCallHandler* handler, voice->voiceCalls()) { diff --git a/daemon/manager.h b/daemon/manager.h index 8d3c8de..9ad611e 100644 --- a/daemon/manager.h +++ b/daemon/manager.h @@ -4,6 +4,7 @@ #include "watchconnector.h" #include "dbusconnector.h" #include "voicecallmanager.h" +#include "notificationmanager.h" #include #include @@ -26,6 +27,7 @@ class Manager : public QObject watch::WatchConnector *watch; DBusConnector *dbus; VoiceCallManager *voice; + NotificationManager *notifications; MNotification notification; @@ -34,7 +36,7 @@ class Manager : public QObject GroupManager *conversations; public: - explicit Manager(watch::WatchConnector *watch, DBusConnector *dbus, VoiceCallManager *voice); + explicit Manager(watch::WatchConnector *watch, DBusConnector *dbus, VoiceCallManager *voice, NotificationManager *notifications); Q_INVOKABLE QString findPersonByNumber(QString number); Q_INVOKABLE void processUnreadMessages(GroupObject *group); @@ -52,7 +54,9 @@ protected slots: void onActiveVoiceCallStatusChanged(); void onConversationGroupAdded(GroupObject *group); void onUnreadMessagesChanged(); - + void onNotifyError(const QString &message); + void onSmsNotify(const QString &sender, const QString &data); + void onEmailNotify(const QString &sender, const QString &data,const QString &subject); }; class PebbledProxy : public QObject diff --git a/daemon/notificationmanager.cpp b/daemon/notificationmanager.cpp new file mode 100644 index 0000000..f6b745a --- /dev/null +++ b/daemon/notificationmanager.cpp @@ -0,0 +1,124 @@ +#include "notificationmanager.h" + +#include +#include +#include +#include +#include +#include + +class NotificationManagerPrivate +{ + Q_DECLARE_PUBLIC(NotificationManager) + +public: + NotificationManagerPrivate(NotificationManager *q) + : q_ptr(q), + interface(NULL), + connected(false) + { /*...*/ } + + NotificationManager *q_ptr; + + QDBusInterface *interface; + + bool connected; +}; + +NotificationManager::NotificationManager(QObject *parent) + : QObject(parent), d_ptr(new NotificationManagerPrivate(this)) +{ + Q_D(NotificationManager); + QDBusConnection::sessionBus().registerObject("/org/freedesktop/Notifications", this, QDBusConnection::ExportAllSlots); + + d->interface = new QDBusInterface("org.freedesktop.DBus", + "/org/freedesktop/DBus", + "org.freedesktop.DBus"); + + d->interface->call("AddMatch", "interface='org.freedesktop.Notifications',member='Notify',type='method_call',eavesdrop='true'"); + + this->initialize(); +} + +NotificationManager::~NotificationManager() +{ + Q_D(NotificationManager); + delete d; +} + + +void NotificationManager::initialize(bool notifyError) +{ + Q_D(NotificationManager); + bool success = false; + + if(d->interface->isValid()) + { + success = true; + } + + if(!(d->connected = success)) + { + QTimer::singleShot(2000, this, SLOT(initialize())); + if(notifyError) emit this->error("Failed to connect to Notifications D-Bus service."); + } +} + +QDBusInterface* NotificationManager::interface() const +{ + Q_D(const NotificationManager); + return d->interface; +} + +QString NotificationManager::detectCleanAppname(QString app_name) +{ + QString desktopFile = "/usr/share/applications/" + app_name + ".desktop"; + QFile testFile(desktopFile); + if (testFile.exists()) { + QSettings settings(desktopFile, QSettings::IniFormat); + settings.beginGroup("Desktop Entry"); + QString cleanName = settings.value("Name").toString(); + settings.endGroup(); + if (!cleanName.isEmpty()) { + return cleanName; + } + } + return app_name; +} + +void NotificationManager::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) { + + //Ignore notifcations from myself + if (app_name == "pebbled") { + return; + } + + qDebug() << "Got notification via dbus from" << detectCleanAppname(app_name); + + if (app_name == "messageserver5") { + emit this->emailNotify(hints.value("x-nemo-preview-summary", detectCleanAppname(app_name)).toString(), + "", + hints.value("x-nemo-preview-body", "").toString() + ); + } else if (app_name == "commhistoryd") { + if (summary == "" && body == "") { + emit this->smsNotify(hints.value("x-nemo-preview-summary", "default").toString(), + hints.value("x-nemo-preview-body", "default").toString() + ); + } + } else { + QString data = summary; + QString subject = body; + if (data.isEmpty()) { + data = hints.value("x-nemo-preview-summary", "").toString(); + } + if (subject.isEmpty()) { + subject = hints.value("x-nemo-preview-body", "").toString(); + } + if (subject.isEmpty() && !data.isEmpty()) { + subject = data; + data = ""; + } + emit this->emailNotify(detectCleanAppname(app_name), data, subject); + } +} diff --git a/daemon/notificationmanager.h b/daemon/notificationmanager.h new file mode 100644 index 0000000..dd3f8bb --- /dev/null +++ b/daemon/notificationmanager.h @@ -0,0 +1,41 @@ +#ifndef NOTIFICATIONMANAGER_H +#define NOTIFICATIONMANAGER_H + +#include + +#include +#include + +class NotificationManager : public QObject +{ + Q_OBJECT + Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Notifications") + + Q_PROPERTY(QDBusInterface* interface READ interface) +public: + explicit NotificationManager(QObject *parent = 0); + ~NotificationManager(); + + QDBusInterface* interface() const; + +Q_SIGNALS: + void error(const QString &message); + void smsNotify(const QString &sender, const QString &data); + void emailNotify(const QString &sender, const QString &data,const QString &subject); + +public Q_SLOTS: + void 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); + +protected Q_SLOTS: + void initialize(bool notifyError = false); + +private: + class NotificationManagerPrivate *d_ptr; + + QString detectCleanAppname(QString app_name); + + Q_DISABLE_COPY(NotificationManager) + Q_DECLARE_PRIVATE(NotificationManager) +}; + +#endif // NOTIFICATIONMANAGER_H -- cgit v1.2.3 From ca5dfb4d10067d98c10822a31d6081e093dfdf4b Mon Sep 17 00:00:00 2001 From: Philipp Andreas Date: Fri, 11 Jul 2014 20:44:38 +0200 Subject: Removed commhistory interface to get new messages --- daemon/manager.cpp | 39 --------------------------------------- daemon/manager.h | 6 ------ 2 files changed, 45 deletions(-) diff --git a/daemon/manager.cpp b/daemon/manager.cpp index 11444fe..f02dc0c 100644 --- a/daemon/manager.cpp +++ b/daemon/manager.cpp @@ -17,10 +17,6 @@ Manager::Manager(watch::WatchConnector *watch, DBusConnector *dbus, VoiceCallMan numberFilter.setDetailType(QContactDetail::TypePhoneNumber, QContactPhoneNumber::FieldNumber); numberFilter.setMatchFlags(QContactFilter::MatchPhoneNumber); - conversations = new GroupManager(this); - connect(conversations, SIGNAL(groupAdded(GroupObject*)), SLOT(onConversationGroupAdded(GroupObject*))); - conversations->getGroups(); - connect(voice, SIGNAL(activeVoiceCallChanged()), SLOT(onActiveVoiceCallChanged())); connect(voice, SIGNAL(error(const QString &)), SLOT(onVoiceError(const QString &))); @@ -178,38 +174,3 @@ void Manager::hangupAll() handler->hangup(); } } - -void Manager::onConversationGroupAdded(GroupObject *group) -{ - if (!group) { - qWarning() << "Got null conversation group"; - return; - } - - connect(group, SIGNAL(unreadMessagesChanged()), SLOT(onUnreadMessagesChanged())); - if (group->unreadMessages()) processUnreadMessages(group); -} - - -void Manager::onUnreadMessagesChanged() -{ - GroupObject *group = qobject_cast(sender()); - if (!group) { - qWarning() << "Got unreadMessagesChanged for null group"; - return; - } - processUnreadMessages(group); -} - -void Manager::processUnreadMessages(GroupObject *group) -{ - if (group->unreadMessages()) { - QString name = group->contactName(); - QString message = group->lastMessageText(); - qDebug() << "Msg:" << message; - qDebug() << "From:" << name; - watch->sendSMSNotification(name.isEmpty()?"Unknown":name, message); - } else { - qWarning() << "Got processUnreadMessages for group with no new messages"; - } -} diff --git a/daemon/manager.h b/daemon/manager.h index 9ad611e..4bf8f98 100644 --- a/daemon/manager.h +++ b/daemon/manager.h @@ -10,11 +10,9 @@ #include #include #include -#include #include using namespace QtContacts; -using namespace CommHistory; class Manager : public QObject { @@ -33,13 +31,11 @@ class Manager : public QObject QContactManager *contacts; QContactDetailFilter numberFilter; - GroupManager *conversations; public: explicit Manager(watch::WatchConnector *watch, DBusConnector *dbus, VoiceCallManager *voice, NotificationManager *notifications); Q_INVOKABLE QString findPersonByNumber(QString number); - Q_INVOKABLE void processUnreadMessages(GroupObject *group); signals: @@ -52,8 +48,6 @@ protected slots: void onActiveVoiceCallChanged(); void onVoiceError(const QString &message); void onActiveVoiceCallStatusChanged(); - void onConversationGroupAdded(GroupObject *group); - void onUnreadMessagesChanged(); void onNotifyError(const QString &message); void onSmsNotify(const QString &sender, const QString &data); void onEmailNotify(const QString &sender, const QString &data,const QString &subject); -- cgit v1.2.3 From 64aec8ec9808de66dfc185dfb82fc9d6cd1f004c Mon Sep 17 00:00:00 2001 From: Philipp Andreas Date: Fri, 11 Jul 2014 22:25:56 +0200 Subject: Sending the string as it is even if empty, but always \0 terminate all strings. Fixes empty string to get received. Also an empty subject does not occupy space on the pebble notification. --- daemon/watchconnector.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/daemon/watchconnector.cpp b/daemon/watchconnector.cpp index ff64a02..955ba13 100644 --- a/daemon/watchconnector.cpp +++ b/daemon/watchconnector.cpp @@ -214,8 +214,9 @@ void WatchConnector::buildData(QByteArray &res, QStringList data) for (QString d : data) { QByteArray tmp = d.left(0xF0).toUtf8(); - res.append(tmp.length() & 0xFF); + res.append((tmp.length() + 1) & 0xFF); res.append(tmp); + res.append('\0'); } } @@ -249,10 +250,10 @@ QString WatchConnector::timeStamp() void WatchConnector::sendNotification(unsigned int lead, QString sender, QString data, QString subject) { QStringList tmp; - tmp.append(sender.isEmpty() ? " " : sender); - tmp.append(data.isEmpty() ? " " : data); + tmp.append(sender); + tmp.append(data); tmp.append(timeStamp()); - if (lead == 0) tmp.append(subject.isEmpty() ? " " : subject); + if (lead == 0) tmp.append(subject); QByteArray res = buildMessageData(lead, tmp); -- cgit v1.2.3 From 8405d4e2318291b0337812e5476a9d1e44ec9152 Mon Sep 17 00:00:00 2001 From: Philipp Andreas Date: Fri, 11 Jul 2014 22:27:49 +0200 Subject: Prioritize data not the subject. If subject is empty it does not get displayed. Also the data value get shown in the notification overview screen, while the subject is not. --- daemon/notificationmanager.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/daemon/notificationmanager.cpp b/daemon/notificationmanager.cpp index f6b745a..8a2129e 100644 --- a/daemon/notificationmanager.cpp +++ b/daemon/notificationmanager.cpp @@ -97,8 +97,8 @@ void NotificationManager::Notify(const QString &app_name, uint replaces_id, cons if (app_name == "messageserver5") { emit this->emailNotify(hints.value("x-nemo-preview-summary", detectCleanAppname(app_name)).toString(), - "", - hints.value("x-nemo-preview-body", "").toString() + hints.value("x-nemo-preview-body", "").toString(), + "" ); } else if (app_name == "commhistoryd") { if (summary == "" && body == "") { @@ -115,9 +115,9 @@ void NotificationManager::Notify(const QString &app_name, uint replaces_id, cons if (subject.isEmpty()) { subject = hints.value("x-nemo-preview-body", "").toString(); } - if (subject.isEmpty() && !data.isEmpty()) { - subject = data; - data = ""; + if (data.isEmpty() && !subject.isEmpty()) { + data = subject; + subject = ""; } emit this->emailNotify(detectCleanAppname(app_name), data, subject); } -- cgit v1.2.3 From 959e251f2336e21d3615b1525a38773fe58ab2e7 Mon Sep 17 00:00:00 2001 From: Philipp Andreas Date: Fri, 11 Jul 2014 22:34:02 +0200 Subject: Fix for the \0 termination to trim the original string to max 239 bytes instead of 240. --- daemon/watchconnector.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daemon/watchconnector.cpp b/daemon/watchconnector.cpp index 955ba13..9d8676e 100644 --- a/daemon/watchconnector.cpp +++ b/daemon/watchconnector.cpp @@ -213,7 +213,7 @@ void WatchConnector::buildData(QByteArray &res, QStringList data) { for (QString d : data) { - QByteArray tmp = d.left(0xF0).toUtf8(); + QByteArray tmp = d.left(0xEF).toUtf8(); res.append((tmp.length() + 1) & 0xFF); res.append(tmp); res.append('\0'); -- cgit v1.2.3 From b8e1190847ff8cad9276bc1bc751aef454a713d4 Mon Sep 17 00:00:00 2001 From: Philipp Andreas Date: Sat, 12 Jul 2014 09:45:33 +0200 Subject: Using log4qt logging instead of qDebug() --- daemon/notificationmanager.cpp | 2 +- daemon/notificationmanager.h | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/daemon/notificationmanager.cpp b/daemon/notificationmanager.cpp index 8a2129e..8524083 100644 --- a/daemon/notificationmanager.cpp +++ b/daemon/notificationmanager.cpp @@ -93,7 +93,7 @@ void NotificationManager::Notify(const QString &app_name, uint replaces_id, cons return; } - qDebug() << "Got notification via dbus from" << detectCleanAppname(app_name); + logger()->debug() << Q_FUNC_INFO << "Got notification via dbus from" << detectCleanAppname(app_name); if (app_name == "messageserver5") { emit this->emailNotify(hints.value("x-nemo-preview-summary", detectCleanAppname(app_name)).toString(), diff --git a/daemon/notificationmanager.h b/daemon/notificationmanager.h index dd3f8bb..45ae090 100644 --- a/daemon/notificationmanager.h +++ b/daemon/notificationmanager.h @@ -2,6 +2,7 @@ #define NOTIFICATIONMANAGER_H #include +#include "Logger" #include #include @@ -9,6 +10,7 @@ class NotificationManager : public QObject { Q_OBJECT + LOG4QT_DECLARE_QCLASS_LOGGER Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Notifications") Q_PROPERTY(QDBusInterface* interface READ interface) -- cgit v1.2.3 From 851dfd95c158607a25c35ce25f97f80a3f57ad74 Mon Sep 17 00:00:00 2001 From: Philipp Andreas Date: Sat, 12 Jul 2014 10:01:23 +0200 Subject: Changed notifications prio and added a error logging --- daemon/notificationmanager.cpp | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/daemon/notificationmanager.cpp b/daemon/notificationmanager.cpp index 8524083..a0a99e0 100644 --- a/daemon/notificationmanager.cpp +++ b/daemon/notificationmanager.cpp @@ -97,7 +97,7 @@ void NotificationManager::Notify(const QString &app_name, uint replaces_id, cons if (app_name == "messageserver5") { emit this->emailNotify(hints.value("x-nemo-preview-summary", detectCleanAppname(app_name)).toString(), - hints.value("x-nemo-preview-body", "").toString(), + hints.value("x-nemo-preview-body", "default").toString(), "" ); } else if (app_name == "commhistoryd") { @@ -107,18 +107,29 @@ void NotificationManager::Notify(const QString &app_name, uint replaces_id, cons ); } } else { - QString data = summary; - QString subject = body; - if (data.isEmpty()) { - data = hints.value("x-nemo-preview-summary", "").toString(); - } + //Prioritize x-nemo-preview* over dbus direct summary and body + QString subject = hints.value("x-nemo-preview-summary", "").toString(); + QString data = hints.value("x-nemo-preview-body", "").toString(); + if (subject.isEmpty()) { - subject = hints.value("x-nemo-preview-body", "").toString(); + subject = summary; + } + if (data.isEmpty()) { + data = body; } + + //Prioritize data over subject if (data.isEmpty() && !subject.isEmpty()) { data = subject; subject = ""; } + + //Never send empty data and subject + if (data.isEmpty() && subject.isEmpty()) { + logger()->warn() << Q_FUNC_INFO << "Empty subject and data in dbus app " << app_name; + return; + } + emit this->emailNotify(detectCleanAppname(app_name), data, subject); } } -- cgit v1.2.3 From c911932934f0a7d8bf1c252be4a3e718859b3b09 Mon Sep 17 00:00:00 2001 From: Philipp Andreas Date: Sat, 12 Jul 2014 19:07:33 +0200 Subject: Adding basic Mitakuuluu support, started reading the notification category, a bit cleanup --- daemon/notificationmanager.cpp | 37 ++++++++++++++++++++++++++++++++----- daemon/notificationmanager.h | 5 ++++- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/daemon/notificationmanager.cpp b/daemon/notificationmanager.cpp index a0a99e0..917a245 100644 --- a/daemon/notificationmanager.cpp +++ b/daemon/notificationmanager.cpp @@ -70,9 +70,9 @@ QDBusInterface* NotificationManager::interface() const return d->interface; } -QString NotificationManager::detectCleanAppname(QString app_name) +QString NotificationManager::getCleanAppName(QString app_name) { - QString desktopFile = "/usr/share/applications/" + app_name + ".desktop"; + QString desktopFile = QString("/usr/share/applications/%1.desktop").arg(app_name); QFile testFile(desktopFile); if (testFile.exists()) { QSettings settings(desktopFile, QSettings::IniFormat); @@ -86,6 +86,24 @@ QString NotificationManager::detectCleanAppname(QString app_name) return app_name; } +QStringHash NotificationManager::getCategoryParams(QString category) +{ + if (!category.isEmpty()) { + QString categoryConfigFile = QString("/usr/share/lipstick/notificationcategories/%1.conf").arg(category); + QFile testFile(categoryConfigFile); + if (testFile.exists()) { + QStringHash categories; + QSettings settings(categoryConfigFile, QSettings::IniFormat); + const QStringList settingKeys = settings.allKeys(); + foreach (const QString &settingKey, settingKeys) { + categories[settingKey] = settings.value(settingKey).toString(); + } + return categories; + } + } + return QStringHash(); +} + void NotificationManager::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) { //Ignore notifcations from myself @@ -93,10 +111,10 @@ void NotificationManager::Notify(const QString &app_name, uint replaces_id, cons return; } - logger()->debug() << Q_FUNC_INFO << "Got notification via dbus from" << detectCleanAppname(app_name); + logger()->debug() << Q_FUNC_INFO << "Got notification via dbus from" << this->getCleanAppName(app_name); if (app_name == "messageserver5") { - emit this->emailNotify(hints.value("x-nemo-preview-summary", detectCleanAppname(app_name)).toString(), + emit this->emailNotify(hints.value("x-nemo-preview-summary", this->getCleanAppName(app_name)).toString(), hints.value("x-nemo-preview-body", "default").toString(), "" ); @@ -106,10 +124,19 @@ void NotificationManager::Notify(const QString &app_name, uint replaces_id, cons hints.value("x-nemo-preview-body", "default").toString() ); } + } else if (app_name == "harbour-mitakuuluu2-server") { + emit this->smsNotify(hints.value("x-nemo-preview-body", "default").toString(), + hints.value("x-nemo-preview-summary", "default").toString() + ); } else { //Prioritize x-nemo-preview* over dbus direct summary and body QString subject = hints.value("x-nemo-preview-summary", "").toString(); QString data = hints.value("x-nemo-preview-body", "").toString(); + QString category = hints.value("category", "").toString(); + QStringHash categoryParams = this->getCategoryParams(category); + int prio = categoryParams.value("x-nemo-priority", "0").toInt(); + + logger()->debug() << "MSG Prio:" << prio; if (subject.isEmpty()) { subject = summary; @@ -130,6 +157,6 @@ void NotificationManager::Notify(const QString &app_name, uint replaces_id, cons return; } - emit this->emailNotify(detectCleanAppname(app_name), data, subject); + emit this->emailNotify(this->getCleanAppName(app_name), data, subject); } } diff --git a/daemon/notificationmanager.h b/daemon/notificationmanager.h index 45ae090..d2640eb 100644 --- a/daemon/notificationmanager.h +++ b/daemon/notificationmanager.h @@ -7,6 +7,8 @@ #include #include +typedef QHash QStringHash; + class NotificationManager : public QObject { Q_OBJECT @@ -34,7 +36,8 @@ protected Q_SLOTS: private: class NotificationManagerPrivate *d_ptr; - QString detectCleanAppname(QString app_name); + QString getCleanAppName(QString app_name); + QStringHash getCategoryParams(QString category); Q_DISABLE_COPY(NotificationManager) Q_DECLARE_PRIVATE(NotificationManager) -- cgit v1.2.3