Merge pull request #6970 from nextcloud/bugfix/prevent-renotification

Make sure we do not renotify notifications when we have received the same etag as during the last check
This commit is contained in:
Matthieu Gallien 2024-09-12 10:53:51 +02:00 committed by GitHub
commit 4cd63d89d3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 12 additions and 0 deletions

View file

@ -78,6 +78,17 @@ void ServerNotificationHandler::slotNotificationsReceived(const QJsonDocument &j
return; 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 notifies = json.object().value("ocs").toObject().value("data").toArray();
auto *ai = qvariant_cast<AccountState *>(sender()->property(propertyAccountStateC)); auto *ai = qvariant_cast<AccountState *>(sender()->property(propertyAccountStateC));

View file

@ -30,6 +30,7 @@ private slots:
private: private:
QPointer<JsonApiJob> _notificationJob; QPointer<JsonApiJob> _notificationJob;
AccountState *_accountState; AccountState *_accountState;
QString _preFetchEtagHeader;
}; };
} }