Open calendar notifications in the browser.
authorCamila <hello@camila.codes>
Wed, 29 Jun 2022 15:44:59 +0000 (17:44 +0200)
committerCamila (Rebase PR Action) <hello@camila.codes>
Fri, 27 Jan 2023 12:30:01 +0000 (12:30 +0000)
Signed-off-by: Camila <hello@camila.codes>
src/gui/tray/activitydata.cpp

index f7f943a5c99bfa0d07a5429b398c2ee85a167528..268874c84598508ff1c7182f83834a2cd9eaaf7a 100644 (file)
 #include "activitydata.h"
 #include "folderman.h"
 
+namespace {
+QUrl stringToUrl(const QUrl &accountUrl, const QString &link) {
+    auto url = QUrl::fromUserInput(link);
+
+    if (!url.isValid()) {
+        return {};
+    }
+
+    if (url.host().isEmpty()) {
+        url.setScheme(accountUrl.scheme());
+        url.setHost(accountUrl.host());
+    }
+
+    if (url.port() == -1) {
+        url.setPort(accountUrl.port());
+    }
+
+    return url;
+};
+}
 
 namespace OCC {
 
@@ -71,7 +91,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(account->url(), 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();
@@ -88,13 +108,18 @@ OCC::Activity Activity::fromActivityJson(const QJsonObject &json, const AccountP
         for (auto i = parameters.begin(); i != parameters.end(); ++i) {
             const auto parameterJsonObject = i.value().toObject();
 
+            const auto richParamLink = stringToUrl(account->url(), parameterJsonObject.value(QStringLiteral("link")).toString());
             activity._subjectRichParameters[i.key()] = 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(),
-                parameterJsonObject.contains(QStringLiteral("link")) ? QUrl(parameterJsonObject.value(QStringLiteral("link")).toString()) : QUrl(),
+                richParamLink,
             };
+
+            if (activity._objectType == QStringLiteral("calendar") && activity._link.isEmpty()) {
+                activity._link = richParamLink;
+            }
         }
 
         auto displayString = activity._subjectRich;