diff options
author | jounih <qt-info@nokia.com> | 2011-02-23 14:16:17 +0200 |
---|---|---|
committer | jounih <qt-info@nokia.com> | 2011-02-23 14:16:17 +0200 |
commit | a59d74d04e8f5b7ba5034f5065ac12f758671df1 (patch) | |
tree | 250efaf08c7132e7c9513d52c76f83e4d40a9acb /plugins/geoservices | |
parent | 38d7ac2d9829b8a1a60d9cd7006e893f73b28891 (diff) |
geoservices Nokia plugin: enable Symbian network disk cache
* Use QSystemStorageInfo to find internal flash drive to use for cache
* Caching not used if no internal flash drive is found
* Use the same cache size of 50MB as other platforms
* Set cached tile expiration date to +14 from current date
* Move isCached check from constuctor to networkFinished
Diffstat (limited to 'plugins/geoservices')
-rw-r--r-- | plugins/geoservices/nokia/nokia.pro | 5 | ||||
-rwxr-xr-x | plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.cpp | 37 | ||||
-rwxr-xr-x | plugins/geoservices/nokia/qgeomapreply_nokia.cpp | 20 |
3 files changed, 47 insertions, 15 deletions
diff --git a/plugins/geoservices/nokia/nokia.pro b/plugins/geoservices/nokia/nokia.pro index b1eb5c40af..1334677582 100644 --- a/plugins/geoservices/nokia/nokia.pro +++ b/plugins/geoservices/nokia/nokia.pro @@ -40,6 +40,11 @@ INCLUDEPATH += $$SOURCE_DIR/src/location \ $$SOURCE_DIR/src/location/maps/tiled symbian { + contains(mobility_modules,systeminfo) { + DEFINES += SYMBIAN_ENABLE_CACHE + MOBILITY += systeminfo + } + TARGET.EPOCALLOWDLLDATA = 1 TARGET.CAPABILITY = ALL -TCB TARGET.UID3 = 0x2002BFCA diff --git a/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.cpp b/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.cpp index d6505f1d1f..4c489ab594 100755 --- a/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.cpp +++ b/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.cpp @@ -58,20 +58,16 @@ #include <QSize> #include <QDir> #include <QUrl> -#include <QDateTime> - -#include <QDebug> #define LARGE_TILE_DIMENSION 256 -// TODO: Tweak the max size or create something better -#if defined(Q_OS_SYMBIAN) -#define DISK_CACHE_MAX_SIZE 10*1024*1024 //10MB -#else -#define DISK_CACHE_MAX_SIZE 50*1024*1024 //50MB +#if defined(Q_OS_SYMBIAN) && defined(SYMBIAN_ENABLE_CACHE) +#include <qsystemstorageinfo.h> #endif -#if defined(Q_OS_SYMBIAN) || defined(Q_OS_WINCE_WM) || defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) +#define DISK_CACHE_MAX_SIZE 50*1024*1024 //50MB + +#if defined(Q_OS_WINCE_WM) || defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) || (defined(Q_OS_SYMBIAN) && !defined(SYMBIAN_ENABLE_CACHE)) #undef DISK_CACHE_ENABLED #else #define DISK_CACHE_ENABLED 1 @@ -108,7 +104,7 @@ QGeoMappingManagerEngineNokia::QGeoMappingManagerEngineNokia(const QMap<QString, if (!proxy.isEmpty()) { QUrl proxyUrl(proxy); if (proxyUrl.isValid()) { - m_networkManager->setProxy(QNetworkProxy(QNetworkProxy::HttpProxy, + m_networkManager->setProxy(QNetworkProxy(QNetworkProxy::HttpProxy, proxyUrl.host(), proxyUrl.port(8080), proxyUrl.userName(), @@ -136,9 +132,26 @@ QGeoMappingManagerEngineNokia::QGeoMappingManagerEngineNokia(const QMap<QString, #ifdef DISK_CACHE_ENABLED - m_cache = new QNetworkDiskCache(this); +#if defined(Q_OS_SYMBIAN) && defined(SYMBIAN_ENABLE_CACHE) + QDir dir; + QSystemStorageInfo info; + QStringList drives = info.logicalDrives(); + for (int i=0;i<drives.count();++i) { + if (info.typeForDrive(drives.at(i))==QSystemStorageInfo::InternalFlashDrive){ + dir.setPath(drives.at(i)+":/"); + QString cachePath("data/nokia"); + dir.mkpath(cachePath); + dir.cd(cachePath); + break; + } + } +#else QDir dir = QDir::temp(); +#endif + if (!dir.path().isEmpty()) { + m_cache = new QNetworkDiskCache(this); + dir.mkdir("maptiles"); dir.cd("maptiles"); @@ -161,6 +174,7 @@ QGeoMappingManagerEngineNokia::QGeoMappingManagerEngineNokia(const QMap<QString, m_cache->setMaximumCacheSize(DISK_CACHE_MAX_SIZE); m_networkManager->setCache(m_cache); + } #endif } @@ -186,7 +200,6 @@ QGeoTiledMapReply* QGeoMappingManagerEngineNokia::getTileImage(const QGeoTiledMa #ifdef DISK_CACHE_ENABLED netRequest.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache); - m_cache->metaData(netRequest.url()).setLastModified(QDateTime::currentDateTime()); #endif QNetworkReply* netReply = m_networkManager->get(netRequest); diff --git a/plugins/geoservices/nokia/qgeomapreply_nokia.cpp b/plugins/geoservices/nokia/qgeomapreply_nokia.cpp index 551d370ed3..8c9014f476 100755 --- a/plugins/geoservices/nokia/qgeomapreply_nokia.cpp +++ b/plugins/geoservices/nokia/qgeomapreply_nokia.cpp @@ -47,15 +47,15 @@ ****************************************************************************/ #include "qgeomapreply_nokia.h" +#include <QNetworkAccessManager> +#include <QNetworkCacheMetaData> +#include <QDateTime> QGeoMapReplyNokia::QGeoMapReplyNokia(QNetworkReply *reply, const QGeoTiledMapRequest &request, QObject *parent) : QGeoTiledMapReply(request, parent), m_reply(reply) { m_reply->setParent(this); - QVariant fromCache = m_reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute); - setCached(fromCache.toBool()); - connect(m_reply, SIGNAL(finished()), this, @@ -102,6 +102,20 @@ void QGeoMapReplyNokia::networkFinished() if (m_reply->error() != QNetworkReply::NoError) return; + QVariant fromCache = m_reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute); + setCached(fromCache.toBool()); + + if (!isCached()) { + QAbstractNetworkCache *cache = m_reply->manager()->cache(); + if (cache) { + QNetworkCacheMetaData metaData = cache->metaData(m_reply->url()); + QDateTime exp = QDateTime::currentDateTime(); + exp = exp.addDays(14); + metaData.setExpirationDate(exp); + cache->updateMetaData(metaData); + } + } + setMapImageData(m_reply->readAll()); setMapImageFormat("PNG"); setFinished(true); |