diff options
author | juhvu <qt-info@nokia.com> | 2011-03-01 11:53:45 +1000 |
---|---|---|
committer | juhvu <qt-info@nokia.com> | 2011-03-01 11:53:45 +1000 |
commit | c7845c0067788466415e5818c5f2de6d15a93bf6 (patch) | |
tree | 7bed4530df0093347919aae6d1bd2fc2ec3eced9 /plugins/geoservices | |
parent | 1c1dfd1c4c1517c1a3a43f940d18198cb8b31b0f (diff) | |
parent | fb36fcaa70b112211e95ee770467c45aacfadf93 (diff) |
Merge branch 'maps-netchache'
Diffstat (limited to 'plugins/geoservices')
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> ¶meters, 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); |