From 0a6671e86e3474f96988b47974246f80084b310e Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Sat, 22 Feb 2014 21:03:59 +0100 Subject: [PATCH] Better error texts. --- src/core/feedsmodelfeed.cpp | 5 +++- src/core/feedsmodelstandardfeed.cpp | 16 ++++++++-- src/core/networkfactory.cpp | 45 ++++++++++++++++++++++++++++- src/core/networkfactory.h | 2 ++ src/gui/formstandardfeeddetails.cpp | 20 +++++++++---- src/gui/formupdate.ui | 8 ++--- 6 files changed, 81 insertions(+), 15 deletions(-) diff --git a/src/core/feedsmodelfeed.cpp b/src/core/feedsmodelfeed.cpp index da9f53fd4..d70246a07 100755 --- a/src/core/feedsmodelfeed.cpp +++ b/src/core/feedsmodelfeed.cpp @@ -9,7 +9,10 @@ FeedsModelFeed::FeedsModelFeed(FeedsModelRootItem *parent_item) - : FeedsModelRootItem(parent_item), m_totalCount(0), m_unreadCount(0) { + : FeedsModelRootItem(parent_item), + m_type(StandardRss0X), + m_totalCount(0), + m_unreadCount(0) { m_kind = FeedsModelRootItem::Feed; } diff --git a/src/core/feedsmodelstandardfeed.cpp b/src/core/feedsmodelstandardfeed.cpp index 8fc7a1f4c..4f62462ea 100755 --- a/src/core/feedsmodelstandardfeed.cpp +++ b/src/core/feedsmodelstandardfeed.cpp @@ -57,9 +57,10 @@ QPair FeedsModelStandardFe // Try to obtain icon. QIcon icon_data; - if (NetworkFactory::downloadIcon(url, - 5000, - icon_data) == QNetworkReply::NoError) { + if ((result.second = NetworkFactory::downloadIcon(url, + 5000, + icon_data)) == + QNetworkReply::NoError) { // Icon for feed was downloaded and is stored now in _icon_data. result.first = new FeedsModelStandardFeed(); result.first->setIcon(icon_data); @@ -90,6 +91,10 @@ QPair FeedsModelStandardFe } } + if (result.first == NULL) { + result.first = new FeedsModelStandardFeed(); + } + QTextCodec *custom_codec = QTextCodec::codecForName(xml_schema_encoding.toLocal8Bit()); if (custom_codec != NULL) { @@ -108,6 +113,11 @@ QPair FeedsModelStandardFe QDomDocument xml_document; if (!xml_document.setContent(xml_contents_encoded)) { + qDebug("XML of feed '%s' is not valid and cannot be loaded.", + qPrintable(url)); + + result.second = QNetworkReply::UnknownContentError; + // XML is invalid, exit. return result; } diff --git a/src/core/networkfactory.cpp b/src/core/networkfactory.cpp index c65dfc2f5..c23e3ce5f 100644 --- a/src/core/networkfactory.cpp +++ b/src/core/networkfactory.cpp @@ -11,6 +11,49 @@ NetworkFactory::NetworkFactory() { } +QString NetworkFactory::networkErrorText(QNetworkReply::NetworkError error_code) { + switch (error_code) { + case QNetworkReply::ProtocolFailure: + return QObject::tr("protocol error"); + + case QNetworkReply::HostNotFoundError: + return QObject::tr("host not found"); + + case QNetworkReply::RemoteHostClosedError: + case QNetworkReply::ConnectionRefusedError: + return QObject::tr("connection refused"); + + case QNetworkReply::TimeoutError: + case QNetworkReply::ProxyTimeoutError: + return QObject::tr("connection timed out"); + + case QNetworkReply::SslHandshakeFailedError: + return QObject::tr("SSL handshake failed"); + + case QNetworkReply::ProxyConnectionClosedError: + case QNetworkReply::ProxyConnectionRefusedError: + return QObject::tr("proxy server connection refused"); + + case QNetworkReply::TemporaryNetworkFailureError: + return QObject::tr("temporary failure"); + + case QNetworkReply::ProxyAuthenticationRequiredError: + return QObject::tr("proxy authentication required"); + + case QNetworkReply::ProxyNotFoundError: + return QObject::tr("proxy server not found"); + + case QNetworkReply::NoError: + return QObject::tr("success"); + + case QNetworkReply::UnknownContentError: + return QObject::tr("uknown content"); + + default: + return QObject::tr("unknown error"); + } +} + QNetworkReply::NetworkError NetworkFactory::downloadIcon(const QString &url, int timeout, QIcon &output) { @@ -115,7 +158,7 @@ QNetworkReply::NetworkError NetworkFactory::downloadFeedFile(const QString &url, qDebug("File '%s' fetched with status '%s' (code %d).", qPrintable(url), - qPrintable(reply->errorString()), + qPrintable(networkErrorText(reply_error)), reply_error); // Delete needed stuff and exit. diff --git a/src/core/networkfactory.h b/src/core/networkfactory.h index f2d371233..5d1d607b3 100644 --- a/src/core/networkfactory.h +++ b/src/core/networkfactory.h @@ -12,6 +12,8 @@ class NetworkFactory { explicit NetworkFactory(); public: + static QString networkErrorText(QNetworkReply::NetworkError error_code); + // Performs SYNCHRONOUS download if favicon for the site, // given URL belongs to. static QNetworkReply::NetworkError downloadIcon(const QString &url, diff --git a/src/gui/formstandardfeeddetails.cpp b/src/gui/formstandardfeeddetails.cpp index efb3bd1ce..5548cd28a 100644 --- a/src/gui/formstandardfeeddetails.cpp +++ b/src/gui/formstandardfeeddetails.cpp @@ -7,6 +7,7 @@ #include "core/feedsmodelcategory.h" #include "core/feedsmodelfeed.h" #include "core/feedsmodelstandardfeed.h" +#include "core/networkfactory.h" #include "gui/iconthemefactory.h" #include "gui/baselineedit.h" #include "gui/messagebox.h" @@ -248,7 +249,7 @@ void FormStandardFeedDetails::guessFeed() { m_ui->m_txtPassword->lineEdit()->text()); if (result.first != NULL) { - // Icon was perhaps guessed. + // Icon or whole feed was guessed. m_ui->m_btnIcon->setIcon(result.first->icon()); m_ui->m_txtTitle->lineEdit()->setText(result.first->title()); m_ui->m_txtDescription->lineEdit()->setText(result.first->description()); @@ -256,15 +257,22 @@ void FormStandardFeedDetails::guessFeed() { m_ui->m_cmbEncoding->setCurrentIndex(m_ui->m_cmbEncoding->findText(result.first->encoding(), Qt::MatchFixedString)); - m_ui->m_lblFetchMetadata->setStatus(WidgetWithStatus::Ok, - tr("Feed metada fetched."), - tr("Feed metadata fetched successfully.")); + if (result.second == QNetworkReply::NoError) { + m_ui->m_lblFetchMetadata->setStatus(WidgetWithStatus::Ok, + tr("All metadata fetched successfully."), + tr("Feed and icon metadata fetched.")); + } + else { + m_ui->m_lblFetchMetadata->setStatus(WidgetWithStatus::Warning, + tr("Result: %1.").arg(NetworkFactory::networkErrorText(result.second)), + tr("Feed or icon metatada not fetched.")); + } } else { // No feed guessed, even no icon available. m_ui->m_lblFetchMetadata->setStatus(WidgetWithStatus::Error, - tr("Error occurred."), - tr("Error occurred.")); + tr("Error: %1.").arg(NetworkFactory::networkErrorText(result.second)), + tr("No metadata fetched.")); } } diff --git a/src/gui/formupdate.ui b/src/gui/formupdate.ui index fcb82482f..eb1f9c6df 100755 --- a/src/gui/formupdate.ui +++ b/src/gui/formupdate.ui @@ -6,8 +6,8 @@ 0 0 - 405 - 259 + 432 + 322 @@ -65,8 +65,8 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p></body></html> +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><br /></p></body></html> Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse|Qt::TextBrowserInteraction|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse