Attempt to recover from network failures

QNetworkAccessManager which is  used for all network  traffic does not
automatically  recover  from  network  outages. This  patch  tries  to
reestablish network accessibility before any requests are attempted.

git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6471 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
Bill Somerville 2016-02-20 12:55:18 +00:00
parent ad50294454
commit 2994a924e5
3 changed files with 22 additions and 7 deletions

View File

@ -49,6 +49,11 @@ public:
void display (QUrl const& url, QString const& name_we) void display (QUrl const& url, QString const& name_we)
{ {
if (QNetworkAccessManager::Accessible != qnam_->networkAccessible ()) {
// try and recover network access for QNAM
qnam_->setNetworkAccessible (QNetworkAccessManager::Accessible);
}
// try and find a localized manual // try and find a localized manual
auto lang = QLocale::system ().name (); auto lang = QLocale::system ().name ();
// try for language and country first // try for language and country first

View File

@ -109,6 +109,11 @@ bool RemoteFile::sync (QUrl const& url, bool local, bool force)
void RemoteFile::download (QUrl const& url) void RemoteFile::download (QUrl const& url)
{ {
if (QNetworkAccessManager::Accessible != network_manager_->networkAccessible ()) {
// try and recover network access for QNAM
network_manager_->setNetworkAccessible (QNetworkAccessManager::Accessible);
}
QNetworkRequest request {url}; QNetworkRequest request {url};
request.setRawHeader ("User-Agent", "WSJT Sample Downloader"); request.setRawHeader ("User-Agent", "WSJT Sample Downloader");
request.setOriginatingObject (this); request.setOriginatingObject (this);

View File

@ -208,6 +208,10 @@ QString WSPRNet::urlEncodeSpot(QHash<QString,QString> const& query)
void WSPRNet::work() void WSPRNet::work()
{ {
if (!urlQueue.isEmpty()) { if (!urlQueue.isEmpty()) {
if (QNetworkAccessManager::Accessible != networkManager->networkAccessible ()) {
// try and recover network access for QNAM
networkManager->setNetworkAccessible (QNetworkAccessManager::Accessible);
}
QUrl url(urlQueue.dequeue()); QUrl url(urlQueue.dequeue());
QNetworkRequest request(url); QNetworkRequest request(url);
m_outstandingRequests << networkManager->get(request); m_outstandingRequests << networkManager->get(request);
@ -222,4 +226,5 @@ void WSPRNet::abortOutstandingRequests () {
for (auto& request : m_outstandingRequests) { for (auto& request : m_outstandingRequests) {
request->abort (); request->abort ();
} }
m_urlQueueSize = 0;
} }