File indexing completed on 2024-04-28 03:53:55

0001 /*
0002     SPDX-FileCopyrightText: 2014 Gregory Oestreicher <greg@kamago.net>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "davjobbase.h"
0008 #include "davjobbase_p.h"
0009 
0010 #include "daverror.h"
0011 
0012 using namespace KDAV;
0013 
0014 DavJobBase::DavJobBase(QObject *parent)
0015     : KJob(parent)
0016     , d_ptr(new DavJobBasePrivate())
0017 {
0018     d_ptr->q_ptr = this;
0019 }
0020 
0021 DavJobBase::DavJobBase(DavJobBasePrivate *dd, QObject *parent)
0022     : KJob(parent)
0023     , d_ptr(dd)
0024 {
0025     d_ptr->q_ptr = this;
0026 }
0027 
0028 DavJobBase::~DavJobBase() = default;
0029 
0030 int DavJobBase::latestResponseCode() const
0031 {
0032     return d_ptr->mLatestResponseCode;
0033 }
0034 
0035 bool DavJobBase::canRetryLater() const
0036 {
0037     bool ret = false;
0038 
0039     // Be explicit and readable by splitting the if/else if clauses
0040 
0041     if (latestResponseCode() == 0 && error()) {
0042         // Likely a timeout or a connection failure.
0043         ret = true;
0044     } else if (latestResponseCode() == 401) {
0045         // Authentication required
0046         ret = true;
0047     } else if (latestResponseCode() == 402) {
0048         // Payment required
0049         ret = true;
0050     } else if (latestResponseCode() == 407) {
0051         // Proxy authentication required
0052         ret = true;
0053     } else if (latestResponseCode() == 408) {
0054         // Request timeout
0055         ret = true;
0056     } else if (latestResponseCode() == 423) {
0057         // Locked
0058         ret = true;
0059     } else if (latestResponseCode() == 429) {
0060         // Too many requests
0061         ret = true;
0062     } else if (latestResponseCode() >= 501 && latestResponseCode() <= 504) {
0063         // Various server-side errors
0064         ret = true;
0065     } else if (latestResponseCode() == 507) {
0066         // Insufficient storage
0067         ret = true;
0068     } else if (latestResponseCode() == 511) {
0069         // Network authentication required
0070         ret = true;
0071     }
0072 
0073     return ret;
0074 }
0075 
0076 bool DavJobBase::hasConflict() const
0077 {
0078     return latestResponseCode() == 412;
0079 }
0080 
0081 void DavJobBasePrivate::setLatestResponseCode(int code)
0082 {
0083     mLatestResponseCode = code;
0084 }
0085 
0086 Error DavJobBase::davError() const
0087 {
0088     return Error(static_cast<KDAV::ErrorNumber>(error()), d_ptr->mLatestResponseCode, d_ptr->mInternalErrorText, d_ptr->mJobErrorCode);
0089 }
0090 
0091 void DavJobBasePrivate::setJobErrorText(const QString &errorText)
0092 {
0093     mInternalErrorText = errorText;
0094 }
0095 
0096 void DavJobBasePrivate::setJobError(int jobErrorCode)
0097 {
0098     mJobErrorCode = jobErrorCode;
0099 }
0100 
0101 void DavJobBasePrivate::setErrorTextFromDavError()
0102 {
0103     q_ptr->setErrorText(q_ptr->davError().errorText());
0104 }
0105 
0106 void DavJobBasePrivate::setDavError(const Error &error)
0107 {
0108     q_ptr->setError(error.errorNumber());
0109     setLatestResponseCode(error.responseCode());
0110     setJobErrorText(error.internalErrorText());
0111     setJobError(error.jobErrorCode());
0112 }
0113 
0114 void DavJobBasePrivate::setError(int errorCode)
0115 {
0116     q_ptr->setError(errorCode);
0117 }
0118 
0119 void DavJobBasePrivate::setErrorText(const QString &errorText)
0120 {
0121     q_ptr->setErrorText(errorText);
0122 }
0123 
0124 void DavJobBasePrivate::emitResult()
0125 {
0126     q_ptr->emitResult();
0127 }
0128 
0129 #include "moc_davjobbase.cpp"