summaryrefslogtreecommitdiffstats
path: root/plugins/geoservices
diff options
context:
space:
mode:
authorjounih <qt-info@nokia.com>2011-02-23 14:16:17 +0200
committerjounih <qt-info@nokia.com>2011-02-23 14:16:17 +0200
commita59d74d04e8f5b7ba5034f5065ac12f758671df1 (patch)
tree250efaf08c7132e7c9513d52c76f83e4d40a9acb /plugins/geoservices
parent38d7ac2d9829b8a1a60d9cd7006e893f73b28891 (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.pro5
-rwxr-xr-xplugins/geoservices/nokia/qgeomappingmanagerengine_nokia.cpp37
-rwxr-xr-xplugins/geoservices/nokia/qgeomapreply_nokia.cpp20
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);