Merge branch 'master' into error_procedur
[situare] / src / gps / gpspositionprivate.cpp
index 956d9e7..21421c7 100644 (file)
@@ -25,6 +25,7 @@
 #include <QDebug>
 #include <QTimer>
 
+#include "common.h"
 #include "gpscommon.h"
 #include "gpsposition.h"
 #include "gpspositionprivate.h"
@@ -32,6 +33,7 @@
 GPSPositionPrivate::GPSPositionPrivate(QObject *parent)
     : QObject(parent),
       m_gpsSource(0),
+      m_initialized(false),
       m_running(false),
       m_updateInterval(DEFAULT_UPDATE_INTERVAL)
 {
@@ -40,6 +42,13 @@ GPSPositionPrivate::GPSPositionPrivate(QObject *parent)
     m_parent = static_cast<GPSPosition*>(parent);
 }
 
+bool GPSPositionPrivate::isInitialized()
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    return m_initialized;
+}
+
 void GPSPositionPrivate::setMode(GPSPosition::Mode mode, const QString &filePath)
 {
     qDebug() << __PRETTY_FUNCTION__;
@@ -50,10 +59,11 @@ void GPSPositionPrivate::setMode(GPSPosition::Mode mode, const QString &filePath
     }
 
     if (mode == GPSPosition::Default) {
-        m_gpsSource = new QGeoPositionInfoSource(this);
+        m_gpsSource = QGeoPositionInfoSource::createDefaultSource(this);
 
         if (!m_gpsSource) {
-            emit m_parent->error(tr("Unable to use GPS"));
+            m_initialized = false;
+            emit m_parent->error(SituareError::GPS_INITIALIZATION_FAILED);
             return;
         }
     }
@@ -67,9 +77,10 @@ void GPSPositionPrivate::setMode(GPSPosition::Mode mode, const QString &filePath
     }
 
     if (m_gpsSource) {
-        connect(m_gpsSource, SIGNAL(positionUpdated(const GeoPositionInfo &)),
-                this, SLOT(positionUpdated(const GeoPositionInfo &)));
-        //connect(m_gpsSource, SIGNAL(updateTimeout()), this, SLOT(updateTimeout()));
+        m_initialized = true;
+        connect(m_gpsSource, SIGNAL(positionUpdated(const QGeoPositionInfo &)),
+                this, SLOT(positionUpdated(const QGeoPositionInfo &)));
+        connect(m_gpsSource, SIGNAL(updateTimeout()), this, SLOT(updateTimeout()));
 
         m_gpsSource->setUpdateInterval(m_updateInterval);
     }
@@ -79,7 +90,7 @@ void GPSPositionPrivate::start()
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    if (m_gpsSource && !isRunning()) {
+    if (m_initialized && !isRunning()) {
         m_gpsSource->startUpdates();
         m_running = true;
     }
@@ -89,7 +100,7 @@ void GPSPositionPrivate::stop()
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    if (m_gpsSource && isRunning()) {
+    if (m_initialized && isRunning()) {
         m_gpsSource->stopUpdates();
         m_running = false;
     }
@@ -104,31 +115,29 @@ bool GPSPositionPrivate::isRunning()
 
 QPointF GPSPositionPrivate::lastPosition()
 {
-    GeoPositionInfo positionInfo = m_gpsSource->lastKnownPosition();
-
-    return QPointF(positionInfo.coordinate().longitude(), positionInfo.coordinate().latitude());
+    QGeoCoordinate coordinate = m_gpsSource->lastKnownPosition().coordinate();
+    return QPointF(coordinate.longitude(), coordinate.latitude());
 }
 
 void GPSPositionPrivate::requestLastPosition()
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    GeoPositionInfo positionInfo = m_gpsSource->lastKnownPosition();
+    QGeoCoordinate coordinate = m_gpsSource->lastKnownPosition().coordinate();
 
-    if (positionInfo.isValid()) {
-        GeoCoordinate coordinate = positionInfo.coordinate();
+    if (coordinate.isValid()) {
         emit m_parent->position(QPointF(coordinate.longitude(), coordinate.latitude()),
                       accuracy(m_gpsSource->lastKnownPosition()));
     }
 }
 
-void GPSPositionPrivate::positionUpdated(const GeoPositionInfo &positionInfo)
+void GPSPositionPrivate::positionUpdated(const QGeoPositionInfo &positionInfo)
 {
     qDebug() << __PRETTY_FUNCTION__ << positionInfo;
 
     if (positionInfo.coordinate().isValid()) {
-        GeoCoordinate coordinate = positionInfo.coordinate();
-        emit m_parent->position(QPointF(coordinate.longitude(), coordinate.latitude()),
+        emit m_parent->position(QPointF(positionInfo.coordinate().longitude(),
+                              positionInfo.coordinate().latitude()),
                       accuracy(positionInfo));
     }
 }
@@ -150,15 +159,15 @@ void GPSPositionPrivate::setUpdateInterval(int interval)
     }
 }
 
-qreal GPSPositionPrivate::accuracy(const GeoPositionInfo &positionInfo)
+qreal GPSPositionPrivate::accuracy(const QGeoPositionInfo &positionInfo)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
     if (!positionInfo.timestamp().isValid())
         return GPS_ACCURACY_UNDEFINED;
 
-    if (positionInfo.hasAttribute(GeoPositionInfo::HorizontalAccuracy))
-        return positionInfo.attribute(GeoPositionInfo::HorizontalAccuracy);
+    if (positionInfo.hasAttribute(QGeoPositionInfo::HorizontalAccuracy))
+        return positionInfo.attribute(QGeoPositionInfo::HorizontalAccuracy);
     else
         return GPS_ACCURACY_UNDEFINED;
 }