From 5c688c5b3200e6d201183497895c23e35963e244 Mon Sep 17 00:00:00 2001 From: fnkhz Date: Thu, 13 Jan 2022 10:23:05 +0200 Subject: [PATCH] Fix invalid notification title in Imgur failed uploads --- src/backend/uploader/imgur/ImgurUploader.cpp | 28 +++++++++++++++++-- src/backend/uploader/imgur/ImgurUploader.h | 4 ++- src/backend/uploader/imgur/ImgurWrapper.cpp | 26 ++++++++--------- src/backend/uploader/imgur/ImgurWrapper.h | 8 +++--- .../uploader/ImgurUploaderSettings.cpp | 3 +- .../uploader/ImgurUploaderSettings.h | 2 +- 6 files changed, 49 insertions(+), 22 deletions(-) diff --git a/src/backend/uploader/imgur/ImgurUploader.cpp b/src/backend/uploader/imgur/ImgurUploader.cpp index 45d9ee7d..2a9b967b 100644 --- a/src/backend/uploader/imgur/ImgurUploader.cpp +++ b/src/backend/uploader/imgur/ImgurUploader.cpp @@ -74,10 +74,34 @@ QString ImgurUploader::formatResponseUrl(const ImgurResponse &response) const return response.link(); } -void ImgurUploader::imgurError(const QString &message) +void ImgurUploader::imgurError(QNetworkReply::NetworkError networkError, const QString &message) { qCritical("MainWindow: Imgur uploader returned error: '%s'", qPrintable(message)); - emit finished(UploadResult(UploadStatus::NoError, type(), message)); + emit finished(UploadResult(mapErrorTypeToStatus(networkError), type(), message)); +} + +UploadStatus ImgurUploader::mapErrorTypeToStatus(QNetworkReply::NetworkError errorType) +{ + switch (errorType) { + case QNetworkReply::NetworkError::NoError: + return UploadStatus::NoError; + case QNetworkReply::NetworkError::TimeoutError: + return UploadStatus::TimedOut; + case QNetworkReply::NetworkError::ConnectionRefusedError: + case QNetworkReply::NetworkError::RemoteHostClosedError: + case QNetworkReply::NetworkError::HostNotFoundError: + case QNetworkReply::NetworkError::TemporaryNetworkFailureError: + case QNetworkReply::NetworkError::ServiceUnavailableError: + return UploadStatus::ConnectionError; + case QNetworkReply::NetworkError::ContentOperationNotPermittedError: + case QNetworkReply::NetworkError::ContentAccessDenied: + case QNetworkReply::NetworkError::AuthenticationRequiredError: + return UploadStatus::PermissionError; + case QNetworkReply::ProtocolFailure: + return UploadStatus::WebError; + default: + return UploadStatus::UnknownError; + } } void ImgurUploader::imgurTokenUpdated(const QString &accessToken, const QString &refreshToken, const QString &username) diff --git a/src/backend/uploader/imgur/ImgurUploader.h b/src/backend/uploader/imgur/ImgurUploader.h index b3149391..ea5b9540 100644 --- a/src/backend/uploader/imgur/ImgurUploader.h +++ b/src/backend/uploader/imgur/ImgurUploader.h @@ -46,9 +46,11 @@ Q_OBJECT ImgurResponseLogger *mImgurResponseLogger; QImage mImage; + static UploadStatus mapErrorTypeToStatus(QNetworkReply::NetworkError errorType); + private slots: void imgurUploadFinished(const ImgurResponse &response); - void imgurError(const QString &message); + void imgurError(QNetworkReply::NetworkError networkError, const QString &message); void imgurTokenUpdated(const QString &accessToken, const QString &refreshToken, const QString &username); void imgurTokenRefresh(); QString formatResponseUrl(const ImgurResponse &response) const; diff --git a/src/backend/uploader/imgur/ImgurWrapper.cpp b/src/backend/uploader/imgur/ImgurWrapper.cpp index c9ecc360..ac741223 100644 --- a/src/backend/uploader/imgur/ImgurWrapper.cpp +++ b/src/backend/uploader/imgur/ImgurWrapper.cpp @@ -157,9 +157,9 @@ void ImgurWrapper::handleDataResponse(const QDomElement& element) const emit tokenRefreshRequired(); } else { if (element.elementsByTagName(QLatin1String("error")).isEmpty()) { - emit error(QLatin1String("Server responded with ") + element.attribute(QLatin1String("status"))); + emit error(QNetworkReply::ProtocolFailure, QLatin1String("Server responded with ") + element.attribute(QLatin1String("status"))); } else { - emit error(QLatin1String("Server responded with ") + element.attribute(QLatin1String("status")) + ": " + + emit error(QNetworkReply::ProtocolFailure, QLatin1String("Server responded with ") + element.attribute(QLatin1String("status")) + ": " + element.elementsByTagName(QLatin1String("error")).at(0).toElement().text()); } } @@ -180,7 +180,7 @@ void ImgurWrapper::handleTokenResponse(const QDomElement& element) const element.elementsByTagName(QLatin1String("account_username")).at(0).toElement().text() ); } else { - emit error(QLatin1String("Expected token response was received, something went wrong.")); + emit error(QNetworkReply::ProtocolFailure, QLatin1String("Expected token response was received, something went wrong.")); } } @@ -203,7 +203,7 @@ void ImgurWrapper::handleReply(QNetworkReply* reply) // token. if (reply->error() != QNetworkReply::NoError && reply->error() != QNetworkReply::ContentOperationNotPermittedError) { - emit error(QLatin1String("Network Error(") + QString::number(reply->error()) + "): " + reply->errorString()); + emit error(reply->error(), QLatin1String("Network Error(") + QString::number(reply->error()) + "): " + reply->errorString()); reply->deleteLater(); return; } @@ -213,13 +213,14 @@ void ImgurWrapper::handleReply(QNetworkReply* reply) int errorLine; int errorColumn; - // Try to parse reply into xml reader - if (!doc.setContent(reply->readAll(), false, &errorMessage, &errorLine, &errorColumn)) { - emit error(QLatin1String("Parse error: ") + errorMessage + QLatin1String(", line:") + errorLine + - QLatin1String(", column:") + errorColumn); - reply->deleteLater(); - return; - } + // Try to parse reply into xml reader + if (!doc.setContent(reply->readAll(), false, &errorMessage, &errorLine, &errorColumn)) { + emit error(QNetworkReply::ProtocolFailure, + QLatin1String("Parse error: ") + errorMessage + QLatin1String(", line:") + errorLine + + QLatin1String(", column:") + errorColumn); + reply->deleteLater(); + return; + } // See if we have an upload reply, token response or error auto rootElement = doc.documentElement(); @@ -229,9 +230,8 @@ void ImgurWrapper::handleReply(QNetworkReply* reply) } else if (rootElement.tagName() == QLatin1String("response")) { handleTokenResponse(rootElement); } - else { - emit error(QLatin1String("Received unexpected reply from imgur server.")); + emit error(QNetworkReply::ProtocolFailure, QLatin1String("Received unexpected reply from imgur server.")); } reply->deleteLater(); diff --git a/src/backend/uploader/imgur/ImgurWrapper.h b/src/backend/uploader/imgur/ImgurWrapper.h index 99bc0de0..fbe39dce 100644 --- a/src/backend/uploader/imgur/ImgurWrapper.h +++ b/src/backend/uploader/imgur/ImgurWrapper.h @@ -42,10 +42,10 @@ class ImgurWrapper : public QObject QUrl pinRequestUrl(const QString &clientId) const; signals: - void uploadFinished(const ImgurResponse &response) const; - void error(const QString &message) const; - void tokenUpdated(const QString &accessToken, const QString &refreshToken, const QString &username) const; - void tokenRefreshRequired() const; + void uploadFinished(const ImgurResponse &response) const; + void error(QNetworkReply::NetworkError networkError, const QString &message) const; + void tokenUpdated(const QString &accessToken, const QString &refreshToken, const QString &username) const; + void tokenRefreshRequired() const; private: QNetworkAccessManager *mAccessManager; diff --git a/src/gui/settingsDialog/uploader/ImgurUploaderSettings.cpp b/src/gui/settingsDialog/uploader/ImgurUploaderSettings.cpp index 041572dd..1a5deb2c 100644 --- a/src/gui/settingsDialog/uploader/ImgurUploaderSettings.cpp +++ b/src/gui/settingsDialog/uploader/ImgurUploaderSettings.cpp @@ -225,8 +225,9 @@ void ImgurUploaderSettings::imgurTokenUpdated(const QString& accessToken, const * Something went wrong while requesting a new token, we write the message to * shell. */ -void ImgurUploaderSettings::imgurTokenError(const QString& message) +void ImgurUploaderSettings::imgurTokenError(QNetworkReply::NetworkError networkError, const QString& message) { + Q_UNUSED(networkError); qCritical("SettingsDialog returned error: '%s'", qPrintable(message)); qInfo("%s", qPrintable(tr("Imgur.com token update error."))); } diff --git a/src/gui/settingsDialog/uploader/ImgurUploaderSettings.h b/src/gui/settingsDialog/uploader/ImgurUploaderSettings.h index 5941a3a4..8d43e2ac 100644 --- a/src/gui/settingsDialog/uploader/ImgurUploaderSettings.h +++ b/src/gui/settingsDialog/uploader/ImgurUploaderSettings.h @@ -75,7 +75,7 @@ private slots: void clearImgurToken(); void imgurClientEntered(const QString &text); void imgurTokenUpdated(const QString &accessToken, const QString &refreshToken, const QString &username); - void imgurTokenError(const QString &message); + void imgurTokenError(QNetworkReply::NetworkError networkError, const QString &message); void showImgurHistoryDialog(); void usernameChanged(); };