11#include <QtCore/QFile>
12#include <QtCore/QTimer>
13#include <QtNetwork/QNetworkAccessManager>
14#include <QtNetwork/QNetworkReply>
25 , _networkManager(networkManager)
28 QFile file(QStringLiteral(
":/res/BingNoTileBytes.dat"));
29 if (file.open(QFile::ReadOnly)) {
30 _bingNoTileImage = file.readAll();
32 qWarning() <<
"Error opening file" << file.fileName();
36 _timeoutTimer =
new QTimer(
this);
40 _tile.zoomLevel = zoomLevel;
62void Viewer3DTileReply::_prepareDownload()
65 _reply = _networkManager->get(request);
66 connect(_reply, &QNetworkReply::finished,
this, &Viewer3DTileReply::_onRequestFinished);
67 connect(_reply, &QNetworkReply::errorOccurred,
this, &Viewer3DTileReply::_onRequestError);
80 if (_isBingEmptyTile()) {
89void Viewer3DTileReply::_onCacheMiss()
92 _timeoutTimer->start(kTimeoutMs);
93 connect(_timeoutTimer, &QTimer::timeout,
this, &Viewer3DTileReply::_onTimeout);
96void Viewer3DTileReply::_onRequestFinished()
98 _tile.
data = _reply->readAll();
99 _timeoutTimer->stop();
101 disconnect(_timeoutTimer, &QTimer::timeout,
this, &Viewer3DTileReply::_onTimeout);
103 if (_isBingEmptyTile()) {
110 if (mapProvider && !_tile.
data.isEmpty()) {
111 const QString format = mapProvider->getImageFormat(_tile.
data);
118void Viewer3DTileReply::_onRequestError()
120 qCWarning(Viewer3DTileReplyLog) <<
"Request error for tile x:" << _tile.
x <<
"y:" << _tile.
y <<
"zoom:" << _tile.
zoomLevel;
121 _timeoutTimer->stop();
122 disconnect(_timeoutTimer, &QTimer::timeout,
this, &Viewer3DTileReply::_onTimeout);
127void Viewer3DTileReply::_onTimeout()
129 qCDebug(Viewer3DTileReplyLog) <<
"Timeout for tile x:" << _tile.
x <<
"y:" << _tile.
y <<
"retry:" << _timeoutCounter <<
"/" << kMaxRetries;
130 if (_timeoutCounter > kMaxRetries) {
132 disconnect(_timeoutTimer, &QTimer::timeout,
this, &Viewer3DTileReply::_onTimeout);
134 _timeoutTimer->stop();
135 }
else if (_tile.
data.isEmpty()) {
147void Viewer3DTileReply::_disconnectReply()
149 disconnect(_reply, &QNetworkReply::finished,
this, &Viewer3DTileReply::_onRequestFinished);
150 disconnect(_reply, &QNetworkReply::errorOccurred,
this, &Viewer3DTileReply::_onRequestError);
153bool Viewer3DTileReply::_isBingEmptyTile()
const
156 return mapProvider && mapProvider->isBingProvider() && !_tile.
data.isEmpty() && _tile.
data == _bingNoTileImage;
#define QGC_LOGGING_CATEGORY(name, categoryStr)
QGCMapEngine * getQGCMapEngine()
std::shared_ptr< const MapProvider > SharedMapProvider
static std::once_flag s_bingNoTileInitFlag
void tileFetched(QGCCacheTile *tile)
bool addTask(QGCMapTask *task)
void error(QGCMapTask::TaskType type, const QString &errorString)
static QGCFetchTileTask * createFetchTileTask(const QString &type, int x, int y, int z)
static void cacheTile(const QString &type, int x, int y, int z, const QByteArray &image, const QString &format, qulonglong set=UINT64_MAX)
static QNetworkRequest getNetworkRequest(int mapId, int x, int y, int zoom)
static std::shared_ptr< const MapProvider > getMapProviderFromQtMapId(int qtMapId)
void tileDone(TileInfo_t)
void tileEmpty(TileInfo_t)
void tileGiveUp(TileInfo_t)