to store subjectRichParameters use a QVariantMap that is qml friendly
authorMatthieu Gallien <matthieu.gallien@nextcloud.com>
Mon, 13 Feb 2023 20:18:41 +0000 (21:18 +0100)
committerMatthieu Gallien <matthieu.gallien@nextcloud.com>
Wed, 17 May 2023 16:16:08 +0000 (18:16 +0200)
will make it much easier to access fom qml in order to use the data
inside to improve activity list items

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
src/gui/tray/activitydata.cpp
src/gui/tray/activitydata.h
src/gui/tray/notificationhandler.cpp
test/testactivitydata.cpp

index 268874c84598508ff1c7182f83834a2cd9eaaf7a..bc2bdda585feea46dcc33fcb11a980a3e6ad20e3 100644 (file)
@@ -109,13 +109,13 @@ OCC::Activity Activity::fromActivityJson(const QJsonObject &json, const AccountP
             const auto parameterJsonObject = i.value().toObject();
 
             const auto richParamLink = stringToUrl(account->url(), parameterJsonObject.value(QStringLiteral("link")).toString());
-            activity._subjectRichParameters[i.key()] = Activity::RichSubjectParameter  {
+            activity._subjectRichParameters[i.key()] = QVariant::fromValue(Activity::RichSubjectParameter{
                 parameterJsonObject.value(QStringLiteral("type")).toString(),
                 parameterJsonObject.value(QStringLiteral("id")).toString(),
                 parameterJsonObject.value(QStringLiteral("name")).toString(),
                 parameterJsonObject.contains(QStringLiteral("path")) ? parameterJsonObject.value(QStringLiteral("path")).toString() : QString(),
                 richParamLink,
-            };
+            });
 
             if (activity._objectType == QStringLiteral("calendar") && activity._link.isEmpty()) {
                 activity._link = richParamLink;
@@ -131,7 +131,7 @@ OCC::Activity Activity::fromActivityJson(const QJsonObject &json, const AccountP
             word.remove(subjectRichParameterBracesRe);
 
             Q_ASSERT(activity._subjectRichParameters.contains(word));
-            displayString = displayString.replace(match.captured(1), activity._subjectRichParameters[word].name);
+            displayString = displayString.replace(match.captured(1), activity._subjectRichParameters[word].value<Activity::RichSubjectParameter>().name);
         }
 
         activity._subjectDisplay = displayString;
index 36671e4739679f62b4ec3cd440722cb824e16faa..67dfe6f4460f6a27039457f9e6ef7f7fdfe5af1e 100644 (file)
 #ifndef ACTIVITYDATA_H
 #define ACTIVITYDATA_H
 
-#include <QtCore>
-#include <QIcon>
-#include <QJsonObject>
-
 #include "syncfileitem.h"
 #include "folder.h"
 #include "account.h"
 
+#include <QtCore>
+#include <QIcon>
+#include <QJsonObject>
+#include <QVariantMap>
+
 namespace OCC {
 /**
  * @brief The ActivityLink class describes actions of an activity
@@ -131,7 +132,7 @@ public:
     QString _objectName;
     QString _subject;
     QString _subjectRich;
-    QHash<QString, RichSubjectParameter> _subjectRichParameters;
+    QVariantMap _subjectRichParameters;
     QString _subjectDisplay;
     QString _message;
     QString _folder;
@@ -180,6 +181,7 @@ using ActivityList = QList<Activity>;
 Q_DECLARE_METATYPE(OCC::Activity)
 Q_DECLARE_METATYPE(OCC::ActivityList)
 Q_DECLARE_METATYPE(OCC::Activity::Type)
+Q_DECLARE_METATYPE(OCC::Activity::RichSubjectParameter)
 Q_DECLARE_METATYPE(OCC::ActivityLink)
 Q_DECLARE_METATYPE(OCC::PreviewData)
 
index eb3e00da57f4f49ad1c891bc928d1e10ec891eef..e41baa47091955fd2d68cde28aadb52a8b79e365 100644 (file)
@@ -94,13 +94,13 @@ void ServerNotificationHandler::slotNotificationsReceived(const QJsonDocument &j
             const auto richParamsKeys = richParams.keys();
             for(const auto &key : richParamsKeys) {
                 const auto parameterJsonObject = richParams.value(key).toObject();
-                a._subjectRichParameters.insert(key, Activity::RichSubjectParameter{
+                a._subjectRichParameters.insert(key, QVariant::fromValue(Activity::RichSubjectParameter{
                                                     parameterJsonObject.value(QStringLiteral("type")).toString(),
                                                     parameterJsonObject.value(QStringLiteral("id")).toString(),
                                                     parameterJsonObject.value(QStringLiteral("name")).toString(),
                                                     QString(),
                                                     QUrl()
-                                                });
+                                                     }));
             }
         }
 
@@ -135,7 +135,7 @@ void ServerNotificationHandler::slotNotificationsReceived(const QJsonDocument &j
                     al._primary = false;
                 }
 
-                a._talkNotificationData.userAvatar = ai->account()->url().toString() + QStringLiteral("/index.php/avatar/") + a._subjectRichParameters["user"].id + QStringLiteral("/128");
+                a._talkNotificationData.userAvatar = ai->account()->url().toString() + QStringLiteral("/index.php/avatar/") + a._subjectRichParameters["user"].value<Activity::RichSubjectParameter>().id + QStringLiteral("/128");
             }
 
             // We want to serve incoming call dialogs to the user for calls that
index e62b71a434f2461a3df4aadf36b59ac55ba1f2e5..91d85aa164e56630087423b1c418860fbfbfa747 100644 (file)
@@ -321,7 +321,7 @@ private slots:
             QCOMPARE(activity._link, eventLink);
             QCOMPARE(activity._subjectDisplay, QStringLiteral("%1 updated event %2 in calendar %3").arg(account->displayName(),
                                                                                                         eventName,
-                                                                                                        richParams[calendarC].name));
+                                                                                                        richParams[calendarC].value<OCC::Activity::RichSubjectParameter>().name));
             QCOMPARE(activity._icon, iconExpected);
         }
     }