diff --git a/src/blackmisc/network/networkutils.cpp b/src/blackmisc/network/networkutils.cpp index 055cee9cc..9ae87bec3 100644 --- a/src/blackmisc/network/networkutils.cpp +++ b/src/blackmisc/network/networkutils.cpp @@ -88,6 +88,7 @@ namespace BlackMisc bool CNetworkUtils::canConnect(const QString &hostAddress, int port, QString &message, int timeoutMs) { + if (timeoutMs < 0) { timeoutMs = getTimeoutMs(); } // external functions might call with -1 QTcpSocket socket; QSignalMapper mapper; QObject::connect(&socket, &QTcpSocket::connected, &mapper, QOverload<>::of(&QSignalMapper::map)); diff --git a/src/blackmisc/network/urllist.cpp b/src/blackmisc/network/urllist.cpp index 430866050..eefa6a4e9 100644 --- a/src/blackmisc/network/urllist.cpp +++ b/src/blackmisc/network/urllist.cpp @@ -142,20 +142,19 @@ namespace BlackMisc return (m_failedUrls.size() < this->size() && m_failedUrls.size() < m_maxTrials); } - CUrl CFailoverUrlList::obtainNextWorkingUrl(bool random, const CUrl &failedUrl) + CUrl CFailoverUrlList::obtainNextWorkingUrl(bool random, int connectTimeoutMs) { - if (!failedUrl.isEmpty()) { this->addFailedUrl(failedUrl); } if (!hasMoreUrlsToTry()) { return CUrl(); } const CUrl url(this->obtainNextUrlWithout(random, this->m_failedUrls)); QString msg; - if (CNetworkUtils::canConnect(url, msg)) { return url; } + if (CNetworkUtils::canConnect(url, msg, connectTimeoutMs)) { return url; } if (addFailedUrl(url)) { if (!msg.isEmpty()) { this->m_errorMsgs.append(QString("URL: %1 error: ").arg(url.toQString(), msg)); } - return obtainNextWorkingUrl(); + return obtainNextWorkingUrl(random, connectTimeoutMs); } return CUrl(); } diff --git a/src/blackmisc/network/urllist.h b/src/blackmisc/network/urllist.h index 1ee5b485f..1a7318558 100644 --- a/src/blackmisc/network/urllist.h +++ b/src/blackmisc/network/urllist.h @@ -100,7 +100,7 @@ namespace BlackMisc CUrl obtainNextUrlWithout(bool randomStart = false, const CUrlList &exclude = CUrlList()) const; //! Next working URL, test if it can be connected - CUrl obtainNextWorkingUrl( bool random = false, const CUrl &failedUrl = CUrl()); + CUrl obtainNextWorkingUrl(bool random = false, int connectTimeoutMs = -1); //! Get the error messages const QStringList &getErrorMessages() const { return m_errorMsgs; } diff --git a/src/swiftlauncher/swiftlauncher.cpp b/src/swiftlauncher/swiftlauncher.cpp index 65cb5e4f6..79a9d6860 100644 --- a/src/swiftlauncher/swiftlauncher.cpp +++ b/src/swiftlauncher/swiftlauncher.cpp @@ -183,10 +183,10 @@ void CSwiftLauncher::initStyleSheet() void CSwiftLauncher::loadLatestNews() { CFailoverUrlList newsUrls(sGui->getGlobalSetup().getSwiftLatestNewsUrls()); - const CUrl newsUrl(newsUrls.obtainNextWorkingUrl()); + const CUrl newsUrl(newsUrls.obtainNextWorkingUrl(true, 10 * 1000)); if (newsUrl.isEmpty()) { - CLogMessage(this).error("No working news URL in %1") << newsUrls.toQString(); + CLogMessage(this).warning("No working news URL in %1") << newsUrls.toQString(); return; } sGui->getFromNetwork(newsUrl, { this, &CSwiftLauncher::ps_displayLatestNews});