diff --git a/src/gui/tray/notificationhandler.cpp b/src/gui/tray/notificationhandler.cpp index 74db3cd33f141..b2a9fc78b9b24 100644 --- a/src/gui/tray/notificationhandler.cpp +++ b/src/gui/tray/notificationhandler.cpp @@ -78,6 +78,17 @@ void ServerNotificationHandler::slotNotificationsReceived(const QJsonDocument &j return; } + // In theory the server should five us a 304 Not Modified if there are no new notifications. + // But in practice, the server doesn't always do that. So we need to compare the ETag headers. + const auto postFetchEtagHeader = _accountState->notificationsEtagResponseHeader(); + if (!_preFetchEtagHeader.isEmpty() || _preFetchEtagHeader == postFetchEtagHeader) { + qCInfo(lcServerNotification) << "Notifications ETag header is the same as before, no new notifications."; + deleteLater(); + emit jobFinished(); + return; + } + _preFetchEtagHeader = postFetchEtagHeader; + auto notifies = json.object().value("ocs").toObject().value("data").toArray(); auto *ai = qvariant_cast(sender()->property(propertyAccountStateC)); diff --git a/src/gui/tray/notificationhandler.h b/src/gui/tray/notificationhandler.h index 8c3a079506610..e8c536372fd45 100644 --- a/src/gui/tray/notificationhandler.h +++ b/src/gui/tray/notificationhandler.h @@ -30,6 +30,7 @@ private slots: private: QPointer _notificationJob; AccountState *_accountState; + QString _preFetchEtagHeader; }; }