diff options
Diffstat (limited to 'src/plugins/geoservices/nokia/qgeotiledmappingmanagerengine_nokia.cpp')
-rw-r--r-- | src/plugins/geoservices/nokia/qgeotiledmappingmanagerengine_nokia.cpp | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/plugins/geoservices/nokia/qgeotiledmappingmanagerengine_nokia.cpp b/src/plugins/geoservices/nokia/qgeotiledmappingmanagerengine_nokia.cpp index 0968b0b3..8c3cbe3b 100644 --- a/src/plugins/geoservices/nokia/qgeotiledmappingmanagerengine_nokia.cpp +++ b/src/plugins/geoservices/nokia/qgeotiledmappingmanagerengine_nokia.cpp @@ -138,7 +138,9 @@ QGeoTiledMappingManagerEngineNokia::QGeoTiledMappingManagerEngineNokia( } populateMapSchemes(); + loadMapVersion(); QMetaObject::invokeMethod(fetcher, "fetchCopyrightsData", Qt::QueuedConnection); + QMetaObject::invokeMethod(fetcher, "fetchVersionData", Qt::QueuedConnection); } QGeoTiledMappingManagerEngineNokia::~QGeoTiledMappingManagerEngineNokia() @@ -181,6 +183,11 @@ QString QGeoTiledMappingManagerEngineNokia::getBaseScheme(int mapId) return fullScheme.section(QLatin1Char('.'), 0, 0); } +int QGeoTiledMappingManagerEngineNokia::mapVersion() +{ + return m_mapVersion.version(); +} + void QGeoTiledMappingManagerEngineNokia::loadCopyrightsDescriptorsFromJson(const QByteArray &jsonData) { QJsonDocument doc = QJsonDocument::fromJson(QByteArray(jsonData)); @@ -225,6 +232,75 @@ void QGeoTiledMappingManagerEngineNokia::loadCopyrightsDescriptorsFromJson(const } } +void QGeoTiledMappingManagerEngineNokia::parseNewVersionInfo(const QByteArray &versionData) +{ + const QString versionString = QString::fromUtf8(versionData); + + const QStringList versionLines = versionString.split(QLatin1Char('\n')); + QJsonObject newVersionData; + foreach (const QString &line, versionLines) { + const QStringList versionInfo = line.split(':'); + if (versionInfo.size() > 1) { + const QString versionKey = versionInfo[0].trimmed(); + const QString versionValue = versionInfo[1].trimmed(); + if (!versionKey.isEmpty() && !versionValue.isEmpty()) { + newVersionData[versionKey] = versionValue; + } + } + } + + updateVersion(newVersionData); +} + +void QGeoTiledMappingManagerEngineNokia::updateVersion(const QJsonObject &newVersionData) { + + if (m_mapVersion.isNewVersion(newVersionData)) { + + m_mapVersion.setVersionData(newVersionData); + m_mapVersion.setVersion(m_mapVersion.version() + 1); + + saveMapVersion(); + + emit mapVersionChanged(); + } +} + +void QGeoTiledMappingManagerEngineNokia::saveMapVersion() +{ + QDir saveDir(tileCache()->directory()); + QFile saveFile(saveDir.filePath(QLatin1String("nokia_version"))); + + if (!saveFile.open(QIODevice::WriteOnly)) { + qWarning("Failed to write nokia map version."); + return; + } + + saveFile.write(m_mapVersion.toJson()); + saveFile.close(); +} + +void QGeoTiledMappingManagerEngineNokia::loadMapVersion() +{ + + QDir saveDir(tileCache()->directory()); + QFile loadFile(saveDir.filePath(QLatin1String("nokia_version"))); + + if (!loadFile.open(QIODevice::ReadOnly)) { + qWarning("Failed to read nokia map version."); + return; + } + + QByteArray saveData = loadFile.readAll(); + loadFile.close(); + + QJsonDocument doc(QJsonDocument::fromJson(saveData)); + + QJsonObject object = doc.object(); + + m_mapVersion.setVersion(object[QLatin1String("version")].toInt()); + m_mapVersion.setVersionData(object[QLatin1String("data")].toObject()); +} + QString QGeoTiledMappingManagerEngineNokia::evaluateCopyrightsText(const QGeoMapType mapType, const qreal zoomLevel, const QSet<QGeoTileSpec> &tiles) |