aboutsummaryrefslogtreecommitdiff
path: root/lib/jobs
diff options
context:
space:
mode:
authorKitsune Ral <Kitsune-Ral@users.sf.net>2019-06-26 07:51:08 +0900
committerKitsune Ral <Kitsune-Ral@users.sf.net>2019-06-26 07:51:08 +0900
commit5722ceaf4bd10c29f1091e3dc5a87f5650ea8c71 (patch)
treea8bfc0af3765cc0478fc2113c61a8360ac374602 /lib/jobs
parente7ade79e9e13a8dca31e7684c47f17ec28cc9c44 (diff)
downloadlibquotient-5722ceaf4bd10c29f1091e3dc5a87f5650ea8c71.tar.gz
libquotient-5722ceaf4bd10c29f1091e3dc5a87f5650ea8c71.zip
BaseJob::Status: fromHttpCode
Diffstat (limited to 'lib/jobs')
-rw-r--r--lib/jobs/basejob.cpp61
-rw-r--r--lib/jobs/basejob.h4
2 files changed, 31 insertions, 34 deletions
diff --git a/lib/jobs/basejob.cpp b/lib/jobs/basejob.cpp
index a0a3dc29..9c0b431c 100644
--- a/lib/jobs/basejob.cpp
+++ b/lib/jobs/basejob.cpp
@@ -348,6 +348,34 @@ bool checkContentType(const QByteArray& type, const QByteArrayList& patterns)
return false;
}
+BaseJob::Status BaseJob::Status::fromHttpCode(int httpCode, QString msg)
+{
+ // clang-format off
+ return { [httpCode]() -> StatusCode {
+ if (httpCode / 10 == 41) // 41x errors
+ return httpCode == 410 ? IncorrectRequestError : NotFoundError;
+ switch (httpCode) {
+ case 401: case 403: case 407:
+ return ContentAccessError;
+ case 404:
+ return NotFoundError;
+ case 400: case 405: case 406: case 426: case 428: case 505:
+ case 494: // Unofficial nginx "Request header too large"
+ case 497: // Unofficial nginx "HTTP request sent to HTTPS port"
+ return IncorrectRequestError;
+ case 429:
+ return TooManyRequestsError;
+ case 501: case 510:
+ return RequestNotImplementedError;
+ case 511:
+ return NetworkAuthRequiredError;
+ default:
+ return NetworkError;
+ }
+ }(), msg };
+ // clang-format on
+}
+
BaseJob::Status BaseJob::doCheckReply(QNetworkReply* reply) const
{
// QNetworkReply error codes seem to be flawed when it comes to HTTP;
@@ -381,38 +409,7 @@ BaseJob::Status BaseJob::doCheckReply(QNetworkReply* reply) const
qCWarning(d->logCat).noquote().nospace() << this << urlString;
qCWarning(d->logCat).noquote() << " " << httpCode << reason << replyState;
- return { [httpCode]() -> StatusCode {
- if (httpCode / 10 == 41)
- return httpCode == 410 ? IncorrectRequestError
- : NotFoundError;
- switch (httpCode) {
- case 401:
- case 403:
- case 407:
- return ContentAccessError;
- case 404:
- return NotFoundError;
- case 400:
- case 405:
- case 406:
- case 426:
- case 428:
- case 505:
- case 494: // Unofficial nginx "Request header too large"
- case 497: // Unofficial nginx "HTTP request sent to HTTPS port"
- return IncorrectRequestError;
- case 429:
- return TooManyRequestsError;
- case 501:
- case 510:
- return RequestNotImplementedError;
- case 511:
- return NetworkAuthRequiredError;
- default:
- return NetworkError;
- }
- }(),
- reply->errorString() };
+ return Status::fromHttpCode(httpCode, reply->errorString());
}
BaseJob::Status BaseJob::parseReply(QNetworkReply* reply)
diff --git a/lib/jobs/basejob.h b/lib/jobs/basejob.h
index 04d79c66..4d379f26 100644
--- a/lib/jobs/basejob.h
+++ b/lib/jobs/basejob.h
@@ -116,9 +116,8 @@ public:
* along the lines of StatusCode, with additional values
* starting at UserDefinedError
*/
- class Status
+ struct Status
{
- public:
Status(StatusCode c)
: code(c)
{}
@@ -126,6 +125,7 @@ public:
: code(c)
, message(std::move(m))
{}
+ static Status fromHttpCode(int httpCode, QString msg = {});
bool good() const { return code < ErrorLevel; }
friend QDebug operator<<(QDebug dbg, const Status& s)