diff --git a/src/gui/tray/activitydata.cpp b/src/gui/tray/activitydata.cpp index 1b8bfc34f2900..837daae66eccc 100644 --- a/src/gui/tray/activitydata.cpp +++ b/src/gui/tray/activitydata.cpp @@ -50,6 +50,22 @@ OCC::Activity Activity::fromActivityJson(const QJsonObject &json, const AccountP { const auto activityUser = json.value(QStringLiteral("user")).toString(); + const auto stringToUrl = [&] (const QString link) { + auto url = QUrl::fromUserInput(link); + //QUrl::fromUserInput + if (url.isValid()) { + if (url.host().isEmpty()) { + url.setScheme(account->url().scheme()); + url.setHost(account->url().host()); + } + if (url.port() == -1) { + url.setPort(account->url().port()); + } + } + + return url; + }; + Activity activity; activity._type = Activity::ActivityType; activity._objectType = json.value(QStringLiteral("object_type")).toString(); @@ -61,7 +77,7 @@ OCC::Activity Activity::fromActivityJson(const QJsonObject &json, const AccountP activity._subject = json.value(QStringLiteral("subject")).toString(); activity._message = json.value(QStringLiteral("message")).toString(); activity._file = json.value(QStringLiteral("object_name")).toString(); - activity._link = QUrl(json.value(QStringLiteral("link")).toString()); + activity._link = stringToUrl(json.value(QStringLiteral("link")).toString()); activity._dateTime = QDateTime::fromString(json.value(QStringLiteral("datetime")).toString(), Qt::ISODate); activity._icon = json.value(QStringLiteral("icon")).toString(); activity._isCurrentUserFileActivity = activity._objectType == QStringLiteral("files") && activityUser == account->davUser(); @@ -82,10 +98,15 @@ OCC::Activity Activity::fromActivityJson(const QJsonObject &json, const AccountP parameterJsonObject.value(QStringLiteral("id")).toString(), parameterJsonObject.value(QStringLiteral("name")).toString(), parameterJsonObject.contains(QStringLiteral("path")) ? parameterJsonObject.value(QStringLiteral("path")).toString() : QString(), - parameterJsonObject.contains(QStringLiteral("link")) ? QUrl(parameterJsonObject.value(QStringLiteral("link")).toString()) : QUrl(), + parameterJsonObject.contains(QStringLiteral("link")) ? stringToUrl(parameterJsonObject.value(QStringLiteral("link")).toString()) : QUrl(), }; + + if (activity._objectType == "calendar") { + activity._link = activity._subjectRichParameters[i.key()].link; + } } + auto displayString = activity._subjectRich; auto subjectRichParameterMatch = subjectRichParameterRe.globalMatch(displayString); diff --git a/src/gui/tray/notificationhandler.cpp b/src/gui/tray/notificationhandler.cpp index 9a9e1893b9e45..dfd0f6f35caa3 100644 --- a/src/gui/tray/notificationhandler.cpp +++ b/src/gui/tray/notificationhandler.cpp @@ -135,18 +135,6 @@ void ServerNotificationHandler::slotNotificationsReceived(const QJsonDocument &j a._status = 0; - QUrl link(json.value("link").toString()); - if (!link.isEmpty()) { - if (link.host().isEmpty()) { - link.setScheme(ai->account()->url().scheme()); - link.setHost(ai->account()->url().host()); - } - if (link.port() == -1) { - link.setPort(ai->account()->url().port()); - } - } - a._link = link; - // Add another action to dismiss notification on server // https://github.com/owncloud/notifications/blob/master/docs/ocs-endpoint-v1.md#deleting-a-notification-for-a-user constexpr auto deleteVerb = "DELETE";