Merge branch 'master' into network_handler
[situare] / src / engine / engine.cpp
index 02cec5f..64fa07f 100644 (file)
@@ -31,6 +31,7 @@
 #include "map/mapengine.h"
 #include "situareservice/situareservice.h"
 #include "ui/mainwindow.h"
+#include "network/networkaccessmanager.h"
 #include "mce.h"
 #include <cmath>
 
@@ -56,6 +57,8 @@ SituareEngine::SituareEngine(QMainWindow *parent)
     m_ui = new MainWindow;
     m_ui->updateItemVisibility();
 
+    m_networkAccessManager = NetworkAccessManager::instance();
+
     // build MapEngine
     m_mapEngine = new MapEngine(this);
     m_ui->setMapViewScene(m_mapEngine->scene());
@@ -256,6 +259,12 @@ void SituareEngine::error(const int context, const int error)
             m_ui->buildInformationBox(tr("Connection timed out"), true);
         }
         break;
+    case QNetworkReply::UnknownNetworkError:
+        if(context == ErrorContext::NETWORK) {
+            m_ui->toggleProgressIndicator(false);
+            m_ui->buildInformationBox(tr("No network connection"), true);
+        }
+        break;
     case SituareError::SESSION_EXPIRED:
         m_ui->buildInformationBox(tr("Session expired. Please login again"), true);
         m_facebookAuthenticator->clearAccountInformation(true); // keep username = true
@@ -364,11 +373,16 @@ void SituareEngine::loginActionPressed()
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    if(m_ui->loginState()) {
-        logout();
-        m_situareService->clearUserData();
-    } else {
-        m_facebookAuthenticator->start();
+    if (m_networkAccessManager->isConnected()) {
+        if(m_ui->loginState()) {
+            logout();
+            m_situareService->clearUserData();
+        } else {
+            m_facebookAuthenticator->start();
+        }
+    }
+    else {
+        error(ErrorContext::NETWORK, QNetworkReply::UnknownNetworkError);
     }
 }
 
@@ -412,31 +426,45 @@ void SituareEngine::refreshUserData()
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    m_ui->toggleProgressIndicator(true);
-
-    m_situareService->fetchLocations();
+    if (m_networkAccessManager->isConnected()) {
+        m_ui->toggleProgressIndicator(true);
+        m_situareService->fetchLocations();
+    }
+    else {
+        error(ErrorContext::NETWORK, QNetworkReply::UnknownNetworkError);
+    }
 }
 
 void SituareEngine::requestAddress()
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    if (m_gps->isRunning())
-        m_situareService->reverseGeo(m_gps->lastPosition());
-    else
-        m_situareService->reverseGeo(m_mapEngine->centerGeoCoordinate());
+    if (m_networkAccessManager->isConnected()) {
+        if (m_gps->isRunning())
+            m_situareService->reverseGeo(m_gps->lastPosition());
+        else
+            m_situareService->reverseGeo(m_mapEngine->centerGeoCoordinate());
+    }
+    else {
+        error(ErrorContext::NETWORK, QNetworkReply::UnknownNetworkError);
+    }
 }
 
 void SituareEngine::requestUpdateLocation(const QString &status, bool publish)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    m_ui->toggleProgressIndicator(true);
+    if (m_networkAccessManager->isConnected()) {
+        m_ui->toggleProgressIndicator(true);
 
-    if (m_gps->isRunning())
-        m_situareService->updateLocation(m_gps->lastPosition(), status, publish);
-    else
-        m_situareService->updateLocation(m_mapEngine->centerGeoCoordinate(), status, publish);
+        if (m_gps->isRunning())
+            m_situareService->updateLocation(m_gps->lastPosition(), status, publish);
+        else
+            m_situareService->updateLocation(m_mapEngine->centerGeoCoordinate(), status, publish);
+    }
+    else {
+        error(ErrorContext::NETWORK, QNetworkReply::UnknownNetworkError);
+    }
 }
 
 void SituareEngine::requestAutomaticUpdateIfMoved(QPointF position)
@@ -642,7 +670,10 @@ void SituareEngine::updateWasSuccessful()
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    m_situareService->fetchLocations();
+    if (m_networkAccessManager->isConnected())
+        m_situareService->fetchLocations();
+    else
+        error(ErrorContext::NETWORK, QNetworkReply::UnknownNetworkError);
 }
 
 void SituareEngine::userDataChanged(User *user, QList<User *> &friendsList)