diff --git a/src/calendar/eventfetchjob.cpp b/src/calendar/eventfetchjob.cpp --- a/src/calendar/eventfetchjob.cpp +++ b/src/calendar/eventfetchjob.cpp @@ -166,6 +166,22 @@ ObjectsList EventFetchJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray& rawData) { +#if (QT_VERSION < QT_VERSION_CHECK(5, 15, 0)) + if (reply->error() == QNetworkReply::ContentGoneError +#else + if (reply->networkError() == QNetworkReply::ContentGoneError +#endif + || reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() == Gone) { + // Full sync required by server, redo request with no updatedMin + d->updatedTimestamp = 0; + start(); + // Errors are not cleared on success + // Do it here or else the job will fail + setError(KGAPI2::NoError); + setErrorString(QString()); + return ObjectsList(); + } + FeedData feedData; feedData.requestUrl = reply->url(); ObjectsList items; diff --git a/src/core/job.cpp b/src/core/job.cpp --- a/src/core/job.cpp +++ b/src/core/job.cpp @@ -244,7 +244,12 @@ const QString msg = parseErrorMessage(rawData); q->setError(KGAPI2::Gone); q->setErrorString(tr("Requested resource does not exist anymore.\n\nGoogle replied '%1'").arg(msg)); - q->emitFinished(); + // don't emit finished() here, 410 means full sync at least for calendar api, let subclass decide. + q->handleReply(reply, rawData); + + if (requestQueue.isEmpty()) { + q->emitFinished(); + } return; }