summaryrefslogtreecommitdiffstats
path: root/plugins/geoservices
diff options
context:
space:
mode:
authorjuhvu <qt-info@nokia.com>2011-03-01 11:53:45 +1000
committerjuhvu <qt-info@nokia.com>2011-03-01 11:53:45 +1000
commitc7845c0067788466415e5818c5f2de6d15a93bf6 (patch)
tree7bed4530df0093347919aae6d1bd2fc2ec3eced9 /plugins/geoservices
parent1c1dfd1c4c1517c1a3a43f940d18198cb8b31b0f (diff)
parentfb36fcaa70b112211e95ee770467c45aacfadf93 (diff)
Merge branch 'maps-netchache'
Diffstat (limited to 'plugins/geoservices')
-rw-r--r--plugins/geoservices/nokia/nokia.pro1
-rwxr-xr-xplugins/geoservices/nokia/qgeomappingmanagerengine_nokia.cpp98
-rw-r--r--plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.h3
-rwxr-xr-xplugins/geoservices/nokia/qgeomapreply_nokia.cpp20
4 files changed, 85 insertions, 37 deletions
diff --git a/plugins/geoservices/nokia/nokia.pro b/plugins/geoservices/nokia/nokia.pro
index b1eb5c40af..7ad8f17b96 100644
--- a/plugins/geoservices/nokia/nokia.pro
+++ b/plugins/geoservices/nokia/nokia.pro
@@ -46,6 +46,7 @@ symbian {
pluginDep.sources = $${TARGET}.dll
pluginDep.path = $${QT_PLUGINS_BASE_DIR}/$${PLUGIN_TYPE}
DEPLOYMENT += pluginDep
+ LIBS += -lefsrv
}
RESOURCES += resource.qrc
diff --git a/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.cpp b/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.cpp
index d6505f1d1f..8c03e6c589 100755
--- a/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.cpp
+++ b/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.cpp
@@ -58,25 +58,48 @@
#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
-#endif
-#if defined(Q_OS_SYMBIAN) || defined(Q_OS_WINCE_WM) || defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6)
+#if defined(Q_OS_WINCE_WM) || defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6)
#undef DISK_CACHE_ENABLED
#else
#define DISK_CACHE_ENABLED 1
#endif
+#if defined(Q_OS_SYMBIAN)
+#include <f32file.h>
+QChar QGeoMappingManagerEngineNokia::findFirstInternalFlashDrive()
+{
+ QChar flashDrive;
+ RFs fsSession;
+ // if something leaves just return an empty QChar
+ TRAP_IGNORE(
+ User::LeaveIfError(fsSession.Connect());
+ CleanupClosePushL(fsSession);
+ TDriveList drivelist;
+ User::LeaveIfError(fsSession.DriveList(drivelist));
+ for (int i = 0; i < KMaxDrives; ++i) {
+ if (drivelist[i] != 0) {
+ TChar driveChar;
+ User::LeaveIfError(RFs::DriveToChar(i, driveChar));
+ TDriveInfo driveInfo;
+ if (fsSession.Drive(driveInfo, i) != KErrNone)
+ continue;
+ if ((driveInfo.iDriveAtt & KDriveAttInternal) && driveInfo.iType == EMediaHardDisk) {
+ flashDrive = QChar(driveChar);
+ break;
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy(&fsSession);
+ )
+ return flashDrive;
+}
+#endif //Q_OS_SYMBIAN
+
QGeoMappingManagerEngineNokia::QGeoMappingManagerEngineNokia(const QMap<QString, QVariant> &parameters, QGeoServiceProvider::Error *error, QString *errorString)
: QGeoTiledMappingManagerEngine(parameters),
m_cache(0),
@@ -108,7 +131,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(),
@@ -133,34 +156,42 @@ QGeoMappingManagerEngineNokia::QGeoMappingManagerEngineNokia(const QMap<QString,
else if (parameters.contains("token")) {
m_token = parameters.value("token").toString();
}
-
-
#ifdef DISK_CACHE_ENABLED
- m_cache = new QNetworkDiskCache(this);
-
- QDir dir = QDir::temp();
- dir.mkdir("maptiles");
- dir.cd("maptiles");
-
- m_cache->setCacheDirectory(dir.path());
+ QString cacheDir;
+ if (parameters.contains("mapping.cache.directory"))
+ cacheDir = parameters.value("mapping.cache.directory").toString();
- if (parameters.contains("mapping.cache.directory")) {
- QString cacheDir = parameters.value("mapping.cache.directory").toString();
- if (!cacheDir.isEmpty())
- m_cache->setCacheDirectory(cacheDir);
- }
-
- if (parameters.contains("mapping.cache.size")) {
- bool ok = false;
- qint64 cacheSize = parameters.value("mapping.cache.size").toString().toLongLong(&ok);
- if (ok)
- m_cache->setMaximumCacheSize(cacheSize);
+ if (cacheDir.isEmpty()) {
+#if defined(Q_OS_SYMBIAN)
+ QChar driveLetter(findFirstInternalFlashDrive());
+ if (!driveLetter.isNull()) {
+ cacheDir = driveLetter;
+ cacheDir += ":/data/nokia/maptiles";
+ }
+#else
+ cacheDir = QDir::temp().path()+"/maptiles";
+#endif
}
+ if (!cacheDir.isEmpty()) {
+ m_cache = new QNetworkDiskCache(this);
+ QDir dir;
+ dir.mkpath(cacheDir);
+ dir.setPath(cacheDir);
+
+ m_cache->setCacheDirectory(dir.path());
+
+ if (parameters.contains("mapping.cache.size")) {
+ bool ok = false;
+ qint64 cacheSize = parameters.value("mapping.cache.size").toString().toLongLong(&ok);
+ if (ok)
+ m_cache->setMaximumCacheSize(cacheSize);
+ }
- if (m_cache->maximumCacheSize() > DISK_CACHE_MAX_SIZE)
- m_cache->setMaximumCacheSize(DISK_CACHE_MAX_SIZE);
+ if (m_cache->maximumCacheSize() > DISK_CACHE_MAX_SIZE)
+ m_cache->setMaximumCacheSize(DISK_CACHE_MAX_SIZE);
- m_networkManager->setCache(m_cache);
+ m_networkManager->setCache(m_cache);
+ }
#endif
}
@@ -186,7 +217,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/qgeomappingmanagerengine_nokia.h b/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.h
index 823149139e..6854685cb3 100644
--- a/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.h
+++ b/plugins/geoservices/nokia/qgeomappingmanagerengine_nokia.h
@@ -78,6 +78,9 @@ private:
static QString sizeToStr(const QSize &size);
static QString mapTypeToStr(QGraphicsGeoMap::MapType type);
+#if defined(Q_OS_SYMBIAN)
+ QChar findFirstInternalFlashDrive();
+#endif //Q_OS_SYMBIAN
QNetworkAccessManager *m_networkManager;
QNetworkDiskCache *m_cache;
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);