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)
{
if (QNetworkAccessManager::Accessible != qnam_->networkAccessible ()) {
// try and recover network access for QNAM
qnam_->setNetworkAccessible (QNetworkAccessManager::Accessible);
}
// try and find a localized manual
auto lang = QLocale::system ().name ();
// 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)
{
if (QNetworkAccessManager::Accessible != network_manager_->networkAccessible ()) {
// try and recover network access for QNAM
network_manager_->setNetworkAccessible (QNetworkAccessManager::Accessible);
}
QNetworkRequest request {url};
request.setRawHeader ("User-Agent", "WSJT Sample Downloader");
request.setOriginatingObject (this);

View File

@ -207,14 +207,18 @@ QString WSPRNet::urlEncodeSpot(QHash<QString,QString> const& query)
void WSPRNet::work()
{
if (!urlQueue.isEmpty()) {
QUrl url(urlQueue.dequeue());
QNetworkRequest request(url);
m_outstandingRequests << networkManager->get(request);
emit uploadStatus(QString {"Uploading Spot %1/%2"}.arg (m_urlQueueSize - urlQueue.size()).arg (m_urlQueueSize));
} else {
uploadTimer->stop();
if (!urlQueue.isEmpty()) {
if (QNetworkAccessManager::Accessible != networkManager->networkAccessible ()) {
// try and recover network access for QNAM
networkManager->setNetworkAccessible (QNetworkAccessManager::Accessible);
}
QUrl url(urlQueue.dequeue());
QNetworkRequest request(url);
m_outstandingRequests << networkManager->get(request);
emit uploadStatus(QString {"Uploading Spot %1/%2"}.arg (m_urlQueueSize - urlQueue.size()).arg (m_urlQueueSize));
} else {
uploadTimer->stop();
}
}
void WSPRNet::abortOutstandingRequests () {
@ -222,4 +226,5 @@ void WSPRNet::abortOutstandingRequests () {
for (auto& request : m_outstandingRequests) {
request->abort ();
}
m_urlQueueSize = 0;
}