Commit 0ffd8648 authored by Gus Grubba's avatar Gus Grubba

Handle network availability transitions.

parent 950ee021
...@@ -1039,6 +1039,7 @@ QGCCacheWorker::_testInternet() ...@@ -1039,6 +1039,7 @@ QGCCacheWorker::_testInternet()
QTcpSocket socket; QTcpSocket socket;
socket.connectToHost("8.8.8.8", 53); socket.connectToHost("8.8.8.8", 53);
if (socket.waitForConnected(2500)) { if (socket.waitForConnected(2500)) {
qCDebug(QGCTileCacheLog) << "Yes Internet Access";
emit internetStatus(true); emit internetStatus(true);
return; return;
} }
......
...@@ -62,7 +62,15 @@ QGeoTiledMapReplyQGC::QGeoTiledMapReplyQGC(QNetworkAccessManager *networkManager ...@@ -62,7 +62,15 @@ QGeoTiledMapReplyQGC::QGeoTiledMapReplyQGC(QNetworkAccessManager *networkManager
, _networkManager(networkManager) , _networkManager(networkManager)
{ {
if(_request.url().isEmpty()) { if(_request.url().isEmpty()) {
_returnBadTile(); if(!_badMapBox.size()) {
QFile b(":/res/notile.png");
if(b.open(QFile::ReadOnly))
_badMapBox = b.readAll();
}
setMapImageData(_badMapBox);
setMapImageFormat("png");
setFinished(true);
setCached(false);
} else { } else {
QGCFetchTileTask* task = getQGCMapEngine()->createFetchTileTask((UrlFactory::MapType)spec.mapId(), spec.x(), spec.y(), spec.zoom()); QGCFetchTileTask* task = getQGCMapEngine()->createFetchTileTask((UrlFactory::MapType)spec.mapId(), spec.x(), spec.y(), spec.zoom());
connect(task, &QGCFetchTileTask::tileFetched, this, &QGeoTiledMapReplyQGC::cacheReply); connect(task, &QGCFetchTileTask::tileFetched, this, &QGeoTiledMapReplyQGC::cacheReply);
...@@ -89,21 +97,6 @@ QGeoTiledMapReplyQGC::_clearReply() ...@@ -89,21 +97,6 @@ QGeoTiledMapReplyQGC::_clearReply()
} }
} }
//-----------------------------------------------------------------------------
void
QGeoTiledMapReplyQGC::_returnBadTile()
{
if(!_badMapBox.size()) {
QFile b(":/res/notile.png");
if(b.open(QFile::ReadOnly))
_badMapBox = b.readAll();
}
setMapImageData(_badMapBox);
setMapImageFormat("png");
setFinished(true);
setCached(false);
}
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void void
QGeoTiledMapReplyQGC::abort() QGeoTiledMapReplyQGC::abort()
...@@ -145,8 +138,9 @@ QGeoTiledMapReplyQGC::networkReplyError(QNetworkReply::NetworkError error) ...@@ -145,8 +138,9 @@ QGeoTiledMapReplyQGC::networkReplyError(QNetworkReply::NetworkError error)
} }
if (error != QNetworkReply::OperationCanceledError) { if (error != QNetworkReply::OperationCanceledError) {
qWarning() << "Fetch tile error:" << _reply->errorString(); qWarning() << "Fetch tile error:" << _reply->errorString();
setError(QGeoTiledMapReply::CommunicationError, _reply->errorString());
} }
_returnBadTile(); setFinished(true);
_clearReply(); _clearReply();
} }
...@@ -154,8 +148,9 @@ QGeoTiledMapReplyQGC::networkReplyError(QNetworkReply::NetworkError error) ...@@ -154,8 +148,9 @@ QGeoTiledMapReplyQGC::networkReplyError(QNetworkReply::NetworkError error)
void void
QGeoTiledMapReplyQGC::cacheError(QGCMapTask::TaskType type, QString /*errorString*/) QGeoTiledMapReplyQGC::cacheError(QGCMapTask::TaskType type, QString /*errorString*/)
{ {
if(_networkManager->networkAccessible() < QNetworkAccessManager::Accessible || !getQGCMapEngine()->isInternetActive()) { if(!getQGCMapEngine()->isInternetActive()) {
_returnBadTile(); setError(QGeoTiledMapReply::CommunicationError, "Network not available");
setFinished(true);
} else { } else {
if(type != QGCMapTask::taskFetchTile) { if(type != QGCMapTask::taskFetchTile) {
qWarning() << "QGeoTiledMapReplyQGC::cacheError() for wrong task"; qWarning() << "QGeoTiledMapReplyQGC::cacheError() for wrong task";
......
...@@ -70,7 +70,6 @@ private slots: ...@@ -70,7 +70,6 @@ private slots:
private: private:
void _clearReply (); void _clearReply ();
void _returnBadTile ();
private: private:
QNetworkReply* _reply; QNetworkReply* _reply;
......
...@@ -82,7 +82,5 @@ QGeoTileFetcherQGC::getTileImage(const QGeoTileSpec &spec) ...@@ -82,7 +82,5 @@ QGeoTileFetcherQGC::getTileImage(const QGeoTileSpec &spec)
void void
QGeoTileFetcherQGC::timeout() QGeoTileFetcherQGC::timeout()
{ {
if(!getQGCMapEngine()->isInternetActive()) { getQGCMapEngine()->testInternet();
getQGCMapEngine()->testInternet();
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment