diff --git a/src/QtLocationPlugin/QGCMapEngine.cpp b/src/QtLocationPlugin/QGCMapEngine.cpp index d093f3b2c167f4f1fdb96c3dae1cefa0862adbaa..40f7fff854587ba1eb3ed73d975b1ceaf1ec8586 100644 --- a/src/QtLocationPlugin/QGCMapEngine.cpp +++ b/src/QtLocationPlugin/QGCMapEngine.cpp @@ -45,6 +45,8 @@ Q_DECLARE_METATYPE(QList) static const char* kDbFileName = "qgcMapCache.db"; static QLocale kLocale; +#define CACHE_PATH_VERSION "100" + struct stQGeoTileCacheQGCMapTypes { const char* name; UrlFactory::MapType type; @@ -157,10 +159,18 @@ QGCMapEngine::~QGCMapEngine() void QGCMapEngine::init() { + //-- Delete old style cache (if present) #ifdef __mobile__ - QString cacheDir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + QLatin1String("/QGCMapCache55"); + QString oldCacheDir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + QLatin1String("/QGCMapCache55"); #else - QString cacheDir = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + QLatin1String("/QGCMapCache55"); + QString oldCacheDir = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + QLatin1String("/QGCMapCache55"); +#endif + _wipeDirectory(oldCacheDir); + //-- Figure out cache path +#ifdef __mobile__ + QString cacheDir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + QLatin1String("/QGCMapCache" CACHE_PATH_VERSION); +#else + QString cacheDir = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + QLatin1String("/QGCMapCache" CACHE_PATH_VERSION); #endif if(!QDir::root().mkpath(cacheDir)) { qWarning() << "Could not create mapping disk cache directory: " << cacheDir; @@ -182,6 +192,28 @@ QGCMapEngine::init() _worker.enqueueTask(task); } +//----------------------------------------------------------------------------- +bool +QGCMapEngine::_wipeDirectory(const QString& dirPath) +{ + bool result = true; + QDir dir(dirPath); + if (dir.exists(dirPath)) { + Q_FOREACH(QFileInfo info, dir.entryInfoList(QDir::NoDotAndDotDot | QDir::System | QDir::Hidden | QDir::AllDirs | QDir::Files, QDir::DirsFirst)) { + if (info.isDir()) { + result = _wipeDirectory(info.absoluteFilePath()); + } else { + result = QFile::remove(info.absoluteFilePath()); + } + if (!result) { + return result; + } + } + result = dir.rmdir(dirPath); + } + return result; +} + //----------------------------------------------------------------------------- void QGCMapEngine::addTask(QGCMapTask* task) diff --git a/src/QtLocationPlugin/QGCMapEngine.h b/src/QtLocationPlugin/QGCMapEngine.h index f9654c6c2cf8e0f90da454de6b432d990770d240..35ac30331d1a89c87e554efd1da355ba63288a24 100644 --- a/src/QtLocationPlugin/QGCMapEngine.h +++ b/src/QtLocationPlugin/QGCMapEngine.h @@ -119,6 +119,9 @@ private slots: signals: void updateTotals (quint32 totaltiles, quint64 totalsize, quint32 defaulttiles, quint64 defaultsize); +private: + bool _wipeDirectory(const QString& dirPath); + private: QGCCacheWorker _worker; QString _cachePath; diff --git a/src/QtLocationPlugin/QGeoTiledMappingManagerEngineQGC.cpp b/src/QtLocationPlugin/QGeoTiledMappingManagerEngineQGC.cpp index 2a75c711789fd6526495351c779990fd429ccd69..20dac6d3b46fed675a9e52af3066ce6c56fcf4ca 100644 --- a/src/QtLocationPlugin/QGeoTiledMappingManagerEngineQGC.cpp +++ b/src/QtLocationPlugin/QGeoTiledMappingManagerEngineQGC.cpp @@ -194,10 +194,12 @@ QGeoTiledMappingManagerEngineQGC::_setCache(const QVariantMap ¶meters) if (parameters.contains(QStringLiteral("mapping.cache.directory"))) cacheDir = parameters.value(QStringLiteral("mapping.cache.directory")).toString(); else { - cacheDir = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + QLatin1String("/QGCMapCache55"); - if(!QDir::root().mkpath(cacheDir)) { - qWarning() << "Could not create mapping disk cache directory: " << cacheDir; - cacheDir = QDir::homePath() + QLatin1String("/.qgcmapscache/"); + cacheDir = getQGCMapEngine()->getCachePath(); + if(!QFileInfo(cacheDir).exists()) { + if(!QDir::root().mkpath(cacheDir)) { + qWarning() << "Could not create mapping disk cache directory: " << cacheDir; + cacheDir = QDir::homePath() + QLatin1String("/.qgcmapscache/"); + } } } if(!QFileInfo(cacheDir).exists()) {