浏览代码

to store subjectRichParameters use a QVariantMap that is qml friendly

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>
Matthieu Gallien 3 年之前
父节点
当前提交
10f9ef5cd5
共有 4 个文件被更改,包括 14 次插入12 次删除
  1. 3 3
      src/gui/tray/activitydata.cpp
  2. 7 5
      src/gui/tray/activitydata.h
  3. 3 3
      src/gui/tray/notificationhandler.cpp
  4. 1 1
      test/testactivitydata.cpp

+ 3 - 3
src/gui/tray/activitydata.cpp

@@ -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;

+ 7 - 5
src/gui/tray/activitydata.h

@@ -15,14 +15,15 @@
 #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)
 

+ 3 - 3
src/gui/tray/notificationhandler.cpp

@@ -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

+ 1 - 1
test/testactivitydata.cpp

@@ -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);
         }
     }