this, &IconJob::finished);
QNetworkRequest request(url);
+ request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
_accessManager.get(request);
}
QDateTime _dateTime;
QString _accName;
QString _icon;
+ QString _iconData;
// Stores information about the error
int _status;
#include "accountstate.h"
#include "accountmanager.h"
#include "folderman.h"
+#include "iconjob.h"
#include "accessmanager.h"
#include "ActivityData.h"
list = FolderMan::instance()->findFileInLocalFolders(relPath, ast->account());
if (list.count() > 0) {
if (relPath.startsWith('/') || relPath.startsWith('\\')) {
- return relPath.remove(0,1);
+ return relPath.remove(0, 1);
} else {
return relPath;
}
return "qrc:///client/theme/black/state-sync.svg";
}
} else {
+ // We have an activity
+ if (!a._iconData.isEmpty()) {
+ QString svgData = "data:image/svg+xml;utf8," + a._iconData;
+ return svgData;
+ }
return "qrc:///client/theme/black/activity.svg";
}
}
a._type = Activity::ActivityType;
a._objectType = json.value("object_type").toString();
a._accName = ast->account()->displayName();
- a._id = json.value("id").toInt();
+ a._id = json.value("activity_id").toInt();
a._fileAction = json.value("type").toString();
a._subject = json.value("subject").toString();
a._message = json.value("message").toString();
a._link = QUrl(json.value("link").toString());
a._dateTime = QDateTime::fromString(json.value("datetime").toString(), Qt::ISODate);
a._icon = json.value("icon").toString();
+
+ if (!a._icon.isEmpty()) {
+ IconJob *iconJob = new IconJob(QUrl(a._icon));
+ iconJob->setProperty("activityId", a._id);
+ connect(iconJob, &IconJob::jobFinished, this, &ActivityListModel::slotIconDownloaded);
+ }
+
list.append(a);
}
combineActivityLists();
}
+void ActivityListModel::slotIconDownloaded(QByteArray iconData)
+{
+ for (size_t i = 0; i < _activityLists.count(); i++) {
+ if (_activityLists[i]._id == sender()->property("activityId").toLongLong()) {
+ _activityLists[i]._iconData = iconData;
+ }
+ }
+}
+
void ActivityListModel::addErrorToActivityList(Activity activity)
{
qCInfo(lcActivity) << "Error successfully added to the notification list: " << activity._subject;
private slots:
void slotActivitiesReceived(const QJsonDocument &json, int statusCode);
+ void slotIconDownloaded(QByteArray iconData);
signals:
void activityJobStatusCode(int statusCode);
const char propertyAccountStateC[] = "oc_account_state";
const int successStatusCode = 200;
const int notModifiedStatusCode = 304;
-QMap<int, QIcon> ServerNotificationHandler::iconCache;
+QMap<int, QByteArray> ServerNotificationHandler::iconCache;
ServerNotificationHandler::ServerNotificationHandler(AccountState *accountState, QObject *parent)
: QObject(parent)
void ServerNotificationHandler::slotIconDownloaded(QByteArray iconData)
{
- QPixmap pixmap;
- pixmap.loadFromData(iconData);
- iconCache.insert(sender()->property("activityId").toInt(), QIcon(pixmap));
+ iconCache.insert(sender()->property("activityId").toInt(),iconData);
}
void ServerNotificationHandler::slotNotificationsReceived(const QJsonDocument &json, int statusCode)
auto json = element.toObject();
a._type = Activity::NotificationType;
a._accName = ai->account()->displayName();
- a._id = json.value("notification_id").toInt();
+ a._id = json.value("activity_id").toInt();
//need to know, specially for remote_share
a._objectType = json.value("object_type").toString();
a._message = json.value("message").toString();
a._icon = json.value("icon").toString();
- if (!json.value("icon").toString().isEmpty()) {
- IconJob *iconJob = new IconJob(QUrl(json.value("icon").toString()));
+ if (!a._icon.isEmpty()) {
+ IconJob *iconJob = new IconJob(QUrl(a._icon));
iconJob->setProperty("activityId", a._id);
connect(iconJob, &IconJob::jobFinished, this, &ServerNotificationHandler::slotIconDownloaded);
}
Q_OBJECT
public:
explicit ServerNotificationHandler(AccountState *accountState, QObject *parent = nullptr);
- static QMap<int, QIcon> iconCache;
+ static QMap<int, QByteArray> iconCache;
signals:
void newNotificationList(ActivityList);