From 654b01af941ec620ca8a9b98be8542dda862d4a8 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy Date: Thu, 17 Oct 2013 14:19:34 +1000 Subject: Save and restore the last known position. Saves the last known location on destruction. Change-Id: Id3c45bed4e94c9e44656d96a8dffc576c7e26a48 Reviewed-by: Alex Blasche --- .../qgeopositioninfosource_geocluemaster.cpp | 28 +++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster.cpp b/src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster.cpp index 995ffa38..1a062431 100644 --- a/src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster.cpp +++ b/src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster.cpp @@ -43,7 +43,10 @@ #include "qgeopositioninfosource_geocluemaster_p.h" -#include +#include +#include +#include +#include #ifdef Q_LOCATION_GEOCLUE_DEBUG #include @@ -127,6 +130,16 @@ QGeoPositionInfoSourceGeoclueMaster::QGeoPositionInfoSourceGeoclueMaster(QObject m_lastPositionIsFresh(false), m_lastVelocityIsFresh(false), m_lastVelocity(0), m_lastPositionFromSatellite(false), m_methods(AllPositioningMethods), m_running(false) { +#ifndef QT_NO_DATASTREAM + // Load the last known location + QFile file(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + + QStringLiteral("/qtposition-geoclue")); + if (file.open(QIODevice::ReadOnly)) { + QDataStream out(&file); + out >> m_lastPosition; + } +#endif + m_requestTimer.setSingleShot(true); QObject::connect(&m_requestTimer, SIGNAL(timeout()), this, SLOT(requestUpdateTimeout())); QObject::connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(startUpdatesTimeout())); @@ -134,6 +147,19 @@ QGeoPositionInfoSourceGeoclueMaster::QGeoPositionInfoSourceGeoclueMaster(QObject QGeoPositionInfoSourceGeoclueMaster::~QGeoPositionInfoSourceGeoclueMaster() { +#ifndef QT_NO_DATASTREAM + if (m_lastPosition.isValid()) { + QSaveFile file(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + + QStringLiteral("/qtposition-geoclue")); + if (file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { + QDataStream out(&file); + // Only save position and timestamp. + out << QGeoPositionInfo(m_lastPosition.coordinate(), m_lastPosition.timestamp()); + file.commit(); + } + } +#endif + if (m_pos) g_object_unref (m_pos); if (m_vel) -- cgit v1.2.3