From 88ef2ee0194f8f28951f28c1cba698497506752a Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Fri, 21 Apr 2017 03:11:00 +0200 Subject: [PATCH] Ref T32, utility functions for URL/URL list * keep error messages of failed URLs * append query --- src/blackmisc/network/url.cpp | 15 +++++++-------- src/blackmisc/network/url.h | 3 +++ src/blackmisc/network/urllist.cpp | 12 ++++++++++-- src/blackmisc/network/urllist.h | 8 ++++++-- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/blackmisc/network/url.cpp b/src/blackmisc/network/url.cpp index 8c7ef871d..b87b0e444 100644 --- a/src/blackmisc/network/url.cpp +++ b/src/blackmisc/network/url.cpp @@ -96,17 +96,16 @@ namespace BlackMisc { const QString q(stripQueryString(queryToAppend)); if (q.isEmpty()) { return m_query; } - if (!hasQuery()) - { - this->setQuery(q); - } - else - { - m_query = m_query + "&" + q; - } + m_query += hasQuery() ? "&" + q : q; return m_query; } + QString CUrl::appendQuery(const QString &key, const QString &value) + { + if (key.isEmpty()) { return m_query; } + return this->appendQuery(key + "=" + value); + } + QString CUrl::getFullUrl(bool withQuery) const { if (m_host.isEmpty()) { return ""; } diff --git a/src/blackmisc/network/url.h b/src/blackmisc/network/url.h index 587d4d1f0..902578998 100644 --- a/src/blackmisc/network/url.h +++ b/src/blackmisc/network/url.h @@ -106,6 +106,9 @@ namespace BlackMisc //! Append query QString appendQuery(const QString &queryToAppend); + //! Append query + QString appendQuery(const QString &key, const QString &value); + //! Empty bool isEmpty() const; diff --git a/src/blackmisc/network/urllist.cpp b/src/blackmisc/network/urllist.cpp index 2578e6cda..430866050 100644 --- a/src/blackmisc/network/urllist.cpp +++ b/src/blackmisc/network/urllist.cpp @@ -147,8 +147,16 @@ namespace BlackMisc if (!failedUrl.isEmpty()) { this->addFailedUrl(failedUrl); } if (!hasMoreUrlsToTry()) { return CUrl(); } const CUrl url(this->obtainNextUrlWithout(random, this->m_failedUrls)); - if (CNetworkUtils::canConnect(url)) { return url; } - if (addFailedUrl(url)) { return obtainNextWorkingUrl(); } + QString msg; + if (CNetworkUtils::canConnect(url, msg)) { return url; } + if (addFailedUrl(url)) + { + if (!msg.isEmpty()) + { + this->m_errorMsgs.append(QString("URL: %1 error: ").arg(url.toQString(), msg)); + } + return obtainNextWorkingUrl(); + } return CUrl(); } diff --git a/src/blackmisc/network/urllist.h b/src/blackmisc/network/urllist.h index 112668cd3..1ee5b485f 100644 --- a/src/blackmisc/network/urllist.h +++ b/src/blackmisc/network/urllist.h @@ -102,13 +102,17 @@ namespace BlackMisc //! Next working URL, test if it can be connected CUrl obtainNextWorkingUrl( bool random = false, const CUrl &failedUrl = CUrl()); + //! Get the error messages + const QStringList &getErrorMessages() const { return m_errorMsgs; } + //! Reset failed URL, allows to set an optional new number of max.trials void reset(int maxTrials = -1); private: int m_currentIndexDistributedLoad = -1; //!< index for random access - int m_maxTrials = 2; //!< number of max trials - CUrlList m_failedUrls; + int m_maxTrials = 2; //!< number of max trials + CUrlList m_failedUrls; //!< failed tested URLs + QStringList m_errorMsgs; //!< error messages while testing; }; } //namespace