diff options
author | Alex Wilson <alex.wilson@nokia.com> | 2012-04-23 16:19:49 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-04-24 04:01:50 +0200 |
commit | 33ce4c290c12c038b8afec6a62a132bad80770a9 (patch) | |
tree | 68b15a01cb93378be83fc42e63788ddde0d91700 /src/location/maps/qgeotiledmappingmanagerengine.cpp | |
parent | 8655cb5f9738ac03052e83140b6184df40318d73 (diff) | |
download | qtlocation-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.cpp | 21 |
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); } |