From: Claudio Cambra Date: Tue, 6 Aug 2024 08:21:49 +0000 (+0800) Subject: Make sure we do not renotify notifications when we have received the same etag as... X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~6^2~21^2~1 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=410e80b4236905d1684563c1d0f11a77fdf7b0f5;p=nextcloud-desktop.git Make sure we do not renotify notifications when we have received the same etag as during the last check Do this regardless of what the server's response is Signed-off-by: Claudio Cambra --- diff --git a/src/gui/tray/notificationhandler.cpp b/src/gui/tray/notificationhandler.cpp index 74db3cd33..46e876b66 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 == 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 8c3a07950..e8c536372 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; }; }