summaryrefslogtreecommitdiff
path: root/src/location/maps/qgeotiledmappingmanagerengine.cpp
diff options
context:
space:
mode:
authorAlex Wilson <alex.wilson@nokia.com>2012-04-23 16:19:49 +1000
committerQt by Nokia <qt-info@nokia.com>2012-04-24 04:01:50 +0200
commit33ce4c290c12c038b8afec6a62a132bad80770a9 (patch)
tree68b15a01cb93378be83fc42e63788ddde0d91700 /src/location/maps/qgeotiledmappingmanagerengine.cpp
parent8655cb5f9738ac03052e83140b6184df40318d73 (diff)
downloadqtlocation-33ce4c290c12c038b8afec6a62a132bad80770a9.tar.gz
Retry failed tile loads 5 times (with exp backoff) before giving up
This allows us to fetch tiles over unreliable network links a bit better -- burst errors of only a few seconds will no longer drop tiles. Change-Id: I00c33424b58e032b1fb74c89052ea7f5cbd97d30 Reviewed-by: Thomas Lowe <thomas.lowe@nokia.com> Reviewed-by: Ian Chen <ian.1.chen@nokia.com> Reviewed-by: Alex Wilson <alex.wilson@nokia.com>
Diffstat (limited to 'src/location/maps/qgeotiledmappingmanagerengine.cpp')
-rw-r--r--src/location/maps/qgeotiledmappingmanagerengine.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/location/maps/qgeotiledmappingmanagerengine.cpp b/src/location/maps/qgeotiledmappingmanagerengine.cpp
index 4d05951e..1f44d640 100644
--- a/src/location/maps/qgeotiledmappingmanagerengine.cpp
+++ b/src/location/maps/qgeotiledmappingmanagerengine.cpp
@@ -264,6 +264,27 @@ void QGeoTiledMappingManagerEngine::engineTileFinished(const QGeoTileSpec &spec,
void QGeoTiledMappingManagerEngine::engineTileError(const QGeoTileSpec &spec, const QString &errorString)
{
+ Q_D(QGeoTiledMappingManagerEngine);
+
+ QSet<QGeoTiledMapData*> maps = d->tileHash_.value(spec);
+ typedef QSet<QGeoTiledMapData*>::const_iterator map_iter;
+ map_iter map = maps.constBegin();
+ map_iter mapEnd = maps.constEnd();
+ for (; map != mapEnd; ++map) {
+ QSet<QGeoTileSpec> tileSet = d->mapHash_.value(*map);
+
+ tileSet.remove(spec);
+ if (tileSet.isEmpty())
+ d->mapHash_.remove(*map);
+ else
+ d->mapHash_.insert(*map, tileSet);
+ }
+ d->tileHash_.remove(spec);
+
+ for (map = maps.constBegin(); map != mapEnd; ++map) {
+ (*map)->tileError(spec, errorString);
+ }
+
emit tileError(spec, errorString);
}