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>
This commit is contained in:
Matthieu Gallien 2023-02-13 21:18:41 +01:00
parent bc9b7a05f4
commit 10f9ef5cd5
No known key found for this signature in database
GPG Key ID: 7D0F74F05C22F553
4 changed files with 14 additions and 12 deletions

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

View File

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

View 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

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