File indexing completed on 2024-05-05 07:55:00
0001 /* 0002 SPDX-FileCopyrightText: 2016 Sandro Knauß <sknauss@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "daverror.h" 0008 #include <KLocalizedString> 0009 0010 #include <KIO/Global> 0011 #include <KIO/Job> 0012 0013 using namespace KDAV; 0014 0015 namespace KDAV 0016 { 0017 class ErrorPrivate : public QSharedData 0018 { 0019 public: 0020 ErrorNumber mErrorNumber = NO_ERR; 0021 int mResponseCode = 0; 0022 int mJobErrorCode = 0; 0023 QString mErrorText; 0024 }; 0025 } 0026 0027 Error::Error() 0028 : d(new ErrorPrivate) 0029 { 0030 } 0031 0032 Error::Error(ErrorNumber errNo, int responseCode, const QString &errorText, int jobErrorCode) 0033 : d(new ErrorPrivate) 0034 { 0035 d->mErrorNumber = errNo; 0036 d->mResponseCode = responseCode; 0037 d->mErrorText = errorText; 0038 d->mJobErrorCode = jobErrorCode; 0039 } 0040 0041 Error::Error(const Error &) = default; 0042 Error::Error(Error &&) = default; 0043 Error::~Error() = default; 0044 Error &Error::operator=(const Error &) = default; 0045 Error &Error::operator=(Error &&) = default; 0046 0047 ErrorNumber Error::errorNumber() const 0048 { 0049 return d->mErrorNumber; 0050 } 0051 0052 QString Error::internalErrorText() const 0053 { 0054 return d->mErrorText; 0055 } 0056 0057 int Error::jobErrorCode() const 0058 { 0059 return d->mJobErrorCode; 0060 } 0061 0062 int Error::responseCode() const 0063 { 0064 return d->mResponseCode; 0065 } 0066 0067 QString KDAV::Error::translatedJobError() const 0068 { 0069 QString err; 0070 if (d->mJobErrorCode > 0 && d->mJobErrorCode != KIO::ERR_WORKER_DEFINED) { 0071 err = KIO::buildErrorString(d->mJobErrorCode, d->mErrorText); 0072 } else { 0073 err = d->mErrorText; 0074 } 0075 return err; 0076 } 0077 0078 QString Error::errorText() const 0079 { 0080 QString result; 0081 0082 QString err = translatedJobError(); 0083 0084 switch (d->mErrorNumber) { 0085 case ERR_PROBLEM_WITH_REQUEST: 0086 // User-side error 0087 if (d->mResponseCode == 401) { 0088 err = i18n("Invalid username/password"); 0089 } else if (d->mResponseCode == 403) { 0090 err = i18n("Access forbidden"); 0091 } else if (d->mResponseCode == 404) { 0092 err = i18n("Resource not found"); 0093 } else { 0094 err = i18n("HTTP error"); 0095 } 0096 result = i18n("There was a problem with the request.\n%1 (%2).", err, d->mResponseCode); 0097 break; 0098 case ERR_NO_MULTIGET: 0099 result = i18n("Protocol for the collection does not support MULTIGET"); 0100 break; 0101 case ERR_SERVER_UNRECOVERABLE: 0102 result = i18n("The server encountered an error that prevented it from completing your request: %1 (%2)", err, d->mResponseCode); 0103 break; 0104 case ERR_COLLECTIONDELETE: 0105 result = i18n("There was a problem with the request. The collection has not been deleted from the server.\n%1 (%2).", err, d->mResponseCode); 0106 break; 0107 case ERR_COLLECTIONFETCH: 0108 result = i18n("Invalid responses from backend"); 0109 break; 0110 case ERR_COLLECTIONFETCH_XQUERY_SETFOCUS: 0111 result = i18n("Error setting focus for XQuery"); 0112 break; 0113 case ERR_COLLECTIONFETCH_XQUERY_INVALID: 0114 result = i18n("Invalid XQuery submitted by DAV implementation"); 0115 break; 0116 case ERR_COLLECTIONMODIFY: 0117 result = i18n( 0118 "There was a problem with the request. The collection has not been modified on the server.\n" 0119 "%1 (%2).", 0120 err, 0121 d->mResponseCode); 0122 break; 0123 case ERR_COLLECTIONMODIFY_NO_PROPERITES: 0124 result = i18n("No properties to change or remove"); 0125 break; 0126 case ERR_COLLECTIONMODIFY_RESPONSE: 0127 result = i18n("There was an error when modifying the properties"); 0128 if (!d->mErrorText.isEmpty()) { 0129 result.append(i18n("\nThe server returned more information:\n%1", d->mErrorText)); 0130 } 0131 break; 0132 case ERR_ITEMCREATE: 0133 result = i18n("There was a problem with the request. The item has not been created on the server.\n%1 (%2).", err, d->mResponseCode); 0134 break; 0135 case ERR_ITEMDELETE: 0136 result = i18n("There was a problem with the request. The item has not been deleted from the server.\n%1 (%2).", err, d->mResponseCode); 0137 break; 0138 case ERR_ITEMMODIFY: 0139 result = i18n("There was a problem with the request. The item was not modified on the server.\n%1 (%2).", err, d->mResponseCode); 0140 break; 0141 case ERR_ITEMLIST: { 0142 result = i18n("There was a problem with the request."); 0143 break; 0144 }; 0145 case ERR_ITEMLIST_NOMIMETYPE: 0146 result = i18n("There was a problem with the request. The requested MIME types are not supported."); 0147 break; 0148 case NO_ERR: 0149 break; 0150 } 0151 return result; 0152 }