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"