Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/owncloud/client.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaas Freitag <freitag@owncloud.com>2016-03-10 19:09:36 +0300
committerKlaas Freitag <freitag@owncloud.com>2016-03-11 12:48:34 +0300
commit2d1ab27cb52b318f30e9825091d94dc5444ff363 (patch)
treebe44a3040a13eddcee127ae41d9d85df893a7fc9 /src/gui/servernotificationhandler.cpp
parent903e79a7c4023c6f28377d5323b2401cea0cae92 (diff)
Notifications: Refactor - create a notification handler class
That cleans the ActivityWidget class
Diffstat (limited to 'src/gui/servernotificationhandler.cpp')
-rw-r--r--src/gui/servernotificationhandler.cpp103
1 files changed, 103 insertions, 0 deletions
diff --git a/src/gui/servernotificationhandler.cpp b/src/gui/servernotificationhandler.cpp
new file mode 100644
index 000000000..bfd06d7eb
--- /dev/null
+++ b/src/gui/servernotificationhandler.cpp
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) by Klaas Freitag <freitag@owncloud.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ */
+
+#include "servernotificationhandler.h"
+#include "accountstate.h"
+#include "capabilities.h"
+#include "json.h"
+#include "networkjobs.h"
+
+namespace OCC
+{
+
+ServerNotificationHandler::ServerNotificationHandler(QObject *parent)
+ : QObject(parent)
+{
+
+}
+
+void ServerNotificationHandler::slotFetchNotifications(AccountState *ptr)
+{
+ /* start the notification fetch job as well */
+ if( !ptr) {
+ return;
+ }
+
+ // check if the account has notifications enabled. If the capabilities are
+ // not yet valid, its assumed that notifications are available.
+ if( ptr->account() && ptr->account()->capabilities().isValid() ) {
+ if( ! ptr->account()->capabilities().notificationsAvailable() ) {
+ qDebug() << "Account" << ptr->account()->displayName() << "does not have notifications enabled.";
+ return;
+ }
+ }
+
+ // if the previous notification job has finished, start next.
+ _notificationJob = new JsonApiJob( ptr->account(), QLatin1String("ocs/v2.php/apps/notifications/api/v1/notifications"), this );
+ QObject::connect(_notificationJob.data(), SIGNAL(jsonReceived(QVariantMap, int)),
+ this, SLOT(slotNotificationsReceived(QVariantMap, int)));
+ _notificationJob->setProperty("AccountStatePtr", QVariant::fromValue<AccountState*>(ptr));
+
+ qDebug() << "Start fetching notifications for " << ptr->account()->displayName();
+ _notificationJob->start();
+}
+
+void ServerNotificationHandler::slotNotificationsReceived(const QVariantMap& json, int statusCode)
+{
+ if( statusCode != 200 ) {
+ qDebug() << "Failed for Notifications";
+ return;
+ }
+
+ auto notifies = json.value("ocs").toMap().value("data").toList();
+
+ AccountState* ai = qvariant_cast<AccountState*>(sender()->property("AccountStatePtr"));
+
+ // qDebug() << "Notifications for " << ai->account()->displayName() << notifies;
+
+ ActivityList list;
+
+ foreach( auto element, notifies ) {
+ Activity a;
+ auto json = element.toMap();
+ a._type = Activity::NotificationType;
+ a._accName = ai->account()->displayName();
+ a._id = json.value("notification_id").toLongLong();
+ a._subject = json.value("subject").toString();
+ a._message = json.value("message").toString();
+ QString s = json.value("link").toString();
+ if( !s.isEmpty() ) {
+ a._link = QUrl(s);
+ }
+ a._dateTime = json.value("datetime").toDateTime();
+ a._dateTime.setTimeSpec(Qt::UTC);
+
+ auto actions = json.value("actions").toList();
+ foreach( auto action, actions) {
+ auto actionJson = action.toMap();
+ ActivityLink al;
+ al._label = QUrl::fromPercentEncoding(actionJson.value("label").toByteArray());
+ al._link = actionJson.value("link").toString();
+ al._verb = actionJson.value("type").toString();
+ al._isPrimary = actionJson.value("primary").toBool();
+
+ a._links.append(al);
+ }
+ list.append(a);
+ }
+ emit newNotificationList( list );
+
+ deleteLater();
+}
+
+}