Merge branch 'master' into cookies_refactored
authorlampehe-local <henri.lampela@ixonos.com>
Fri, 28 May 2010 05:20:20 +0000 (08:20 +0300)
committerlampehe-local <henri.lampela@ixonos.com>
Fri, 28 May 2010 05:20:20 +0000 (08:20 +0300)
Conflicts:
src/common.h
src/src.pro

1  2 
src/engine/engine.cpp
src/engine/engine.h
src/src.pro
src/ui/mainwindow.cpp
src/ui/mainwindow.h

diff --combined src/engine/engine.cpp
@@@ -4,7 -4,7 +4,7 @@@
  
          Kaj Wallin - kaj.wallin@ixonos.com
          Henri Lampela - henri.lampela@ixonos.com
-         Jussi Laitinen jussi.laitinen@ixonos.com
+         Jussi Laitinen - jussi.laitinen@ixonos.com
          Sami Rämö - sami.ramo@ixonos.com
  
      Situare is free software; you can redistribute it and/or
@@@ -34,6 -34,7 +34,7 @@@
  
  const QString SETTINGS_GPS_ENABLED = "GPS_ENABLED";
  const QString SETTINGS_AUTO_CENTERING_ENABLED = "AUTO_CENTERING_ENABLED";
+ const int DEFAULT_ZOOM_LEVEL_WHEN_GPS_IS_AVAILABLE = 12;
  
  SituareEngine::SituareEngine(QMainWindow *parent)
      : QObject(parent),
      connect(this, SIGNAL(friendsLocationsReady(QList<User*>&)),
              m_mapEngine, SIGNAL(friendsLocationsReady(QList<User*>&)));
  
+     initializeGpsAndAutocentering();
      // signals connected, now it's time to show the main window
      // but init the MapEngine before so starting location is set
      m_mapEngine->init();
      m_ui->show();
  
-     QSettings settings(DIRECTORY_NAME, FILE_NAME);
-     QVariant gpsEnabled = settings.value(SETTINGS_GPS_ENABLED);
-     QVariant autoCenteringEnabled = settings.value(SETTINGS_AUTO_CENTERING_ENABLED);
-     // set features on / off based on settings
-     changeAutoCenteringSetting(autoCenteringEnabled.toBool());
-     enableGPS(gpsEnabled.toBool());
-     // show messages at startup if features are enabled automatically
-     if (gpsEnabled.toBool())
-         m_ui->showMaemoInformationBox(tr("GPS enabled"));
-     if (gpsEnabled.toBool() && autoCenteringEnabled.toBool())
-         m_ui->showMaemoInformationBox(tr("Auto centering enabled"));
      m_facebookAuthenticator->start();
  }
  
@@@ -119,6 -108,7 +108,7 @@@ void SituareEngine::changeAutoCentering
      enableAutoCentering(enabled);
  }
  
  void SituareEngine::disableAutoCentering()
  {
      qDebug() << __PRETTY_FUNCTION__;
@@@ -166,16 -156,46 +156,47 @@@ void SituareEngine::error(const QStrin
  void SituareEngine::fetchUsernameFromSettings()
  {
      qDebug() << __PRETTY_FUNCTION__;
      m_ui->setUsername(m_facebookAuthenticator->loadUsername());
  }
  
+ void SituareEngine::initializeGpsAndAutocentering()
+ {
+     qDebug() << __PRETTY_FUNCTION__;
+     QSettings settings(DIRECTORY_NAME, FILE_NAME);
+     QVariant gpsEnabled = settings.value(SETTINGS_GPS_ENABLED);
+     QVariant autoCenteringEnabled = settings.value(SETTINGS_AUTO_CENTERING_ENABLED);     
+     if (gpsEnabled.toString().isEmpty()) { // First start. Situare.conf file does not exists
+         connect(m_gps, SIGNAL(position(QPointF,qreal)),
+                 this, SLOT(setFirstStartZoomLevel(QPointF,qreal)));
+         changeAutoCenteringSetting(true);
+         enableGPS(true);
+         m_ui->showMaemoInformationBox(tr("GPS enabled"));
+         m_ui->showMaemoInformationBox(tr("Auto centering enabled"));
+     } else { // Normal start
+         changeAutoCenteringSetting(autoCenteringEnabled.toBool());
+         enableGPS(gpsEnabled.toBool());
+         if (gpsEnabled.toBool())
+             m_ui->showMaemoInformationBox(tr("GPS enabled"));
+         if (gpsEnabled.toBool() && autoCenteringEnabled.toBool())
+             m_ui->showMaemoInformationBox(tr("Auto centering enabled"));        
+     } 
+ }
  void SituareEngine::invalidCredentials()
  {
      qDebug() << __PRETTY_FUNCTION__;
  
 -    m_facebookAuthenticator->clearAccountInformation(true); // keep username = true
 -    m_facebookAuthenticator->start();
 +    m_facebookAuthenticator->clearAccountInformation(/*true*/); // keep username = true
 +    //m_facebookAuthenticator->start();
 +    m_ui->loginUsingCookies();
  }
  
  void SituareEngine::loginActionPressed()
      }
  }
  
 -void SituareEngine::loginOk(bool freshLogin, const FacebookCredentials &credentials)
 +void SituareEngine::loginOk()
  {
      qDebug() << __PRETTY_FUNCTION__;
  
      m_loggedIn = true;
      m_ui->loggedIn(m_loggedIn);
  
 -    if(freshLogin) {
 +    if(!m_ui->username().isEmpty())
          m_facebookAuthenticator->saveUsername(m_ui->username());
 -    }
 +
      m_ui->show();
 -    m_situareService->credentialsReady(credentials);
      m_situareService->fetchLocations(); // request user locations
  }
  
@@@ -253,27 -274,35 +274,41 @@@ void SituareEngine::requestUpdateLocati
          m_situareService->updateLocation(m_mapEngine->centerGeoCoordinate(), status, publish);
  }
  
+ void SituareEngine::setFirstStartZoomLevel(QPointF latLonCoordinate, qreal accuracy)
+ {
+     qDebug() << __PRETTY_FUNCTION__;
+     Q_UNUSED(latLonCoordinate);
+     Q_UNUSED(accuracy);
+     if (m_autoCenteringEnabled) // autocentering is disabled when map is scrolled        
+         m_mapEngine->setZoomLevel(DEFAULT_ZOOM_LEVEL_WHEN_GPS_IS_AVAILABLE);
+     disconnect(m_gps, SIGNAL(position(QPointF,qreal)),
+                this, SLOT(setFirstStartZoomLevel(QPointF,qreal)));
+ }
  void SituareEngine::signalsFromFacebookAuthenticator()
  {
      qDebug() << __PRETTY_FUNCTION__;
  
 -    connect(m_facebookAuthenticator, SIGNAL(credentialsChanged(FacebookCredentials)),
 +    connect(m_facebookAuthenticator, SIGNAL(credentialsReady(FacebookCredentials)),
              m_situareService, SLOT(credentialsReady(FacebookCredentials)));
  
 -    connect(m_facebookAuthenticator, SIGNAL(credentialsReady(bool, FacebookCredentials)),
 -            this, SLOT(loginOk(bool, FacebookCredentials)));
 +    connect(m_facebookAuthenticator, SIGNAL(credentialsReady(FacebookCredentials)),
 +            this, SLOT(loginOk()));
  
      connect(m_facebookAuthenticator, SIGNAL(newLoginRequest(QUrl)),
              m_ui, SLOT(startLoginProcess(QUrl)));
  
      connect(m_facebookAuthenticator, SIGNAL(loginFailure()),
              m_ui, SLOT(loginFailed()));
 +
 +    connect(m_facebookAuthenticator, SIGNAL(saveCookiesRequest()),
 +            m_ui, SLOT(saveCookies()));
 +
 +    connect(m_facebookAuthenticator, SIGNAL(loginUsingCookies()),
 +            m_ui, SLOT(loginUsingCookies()));
  }
  
  void SituareEngine::signalsFromGPS()
@@@ -341,6 -370,9 +376,9 @@@ void SituareEngine::signalsFromMainWind
      connect(m_ui, SIGNAL(refreshUserData()),
              this, SLOT(refreshUserData()));
  
+     connect(m_ui, SIGNAL(findUser(QPointF)),
+             m_mapEngine, SLOT(setViewLocation(QPointF)));
      // signals from friend list tab
      connect(m_ui, SIGNAL(findFriend(QPointF)),
              m_mapEngine, SLOT(setViewLocation(QPointF)));
diff --combined src/engine/engine.h
@@@ -27,6 -27,7 +27,7 @@@
  #define ENGINE_H
  
  #include <QObject>
+ #include <QPointF>
  
  class QMainWindow;
  
@@@ -86,8 -87,10 +87,8 @@@ public slots
      /**
      * @brief Slot to intercept signal from successful login
      *
 -    * @param freshLogin Was login done via login dialog
 -    * @param credentials Facebook credentials
      */
 -    void loginOk(bool freshLogin, const FacebookCredentials &credentials);
 +    void loginOk();
  
      /**
      * @brief Slot to intercept signal when user has cancelled login process
  
  private:
      /**
+       * @brief Read settings and determine whether to use GPS and autocentering.
+       * When values does not found on the settings, GPS and autocentering are enabled as a default.
+       */
+     void initializeGpsAndAutocentering();
+     /**
        * @brief Connect signals coming from Facdebook authenticator
        */
      void signalsFromFacebookAuthenticator();
@@@ -194,6 -203,15 +201,15 @@@ private slots
      void enableGPS(bool enabled);
  
      /**
+      * @brief Sets zoom level to default when first GPS location is received if autocentering
+      * is enabled.
+      *
+      * @param latLonCoordinate own location
+      * @param accuracy accuracy of GPS location
+      */
+     void setFirstStartZoomLevel(QPointF latLonCoordinate, qreal accuracy);
+     
+     /**
      * @brief Slot for intercepting signal when credentials are invalid
      *
      */
@@@ -229,7 -247,6 +245,6 @@@ private
      MainWindow *m_ui;                                ///< Instance of the MainWindow UI
      MapEngine *m_mapEngine;                          ///< MapEngine
      SituareService *m_situareService;  ///< Instance of the situare server communication service
  };
  
  #endif // ENGINE_H
diff --combined src/src.pro
@@@ -3,8 -3,8 +3,8 @@@
  # -------------------------------------------------
  TARGET = ../situare
  TEMPLATE = app
- INCLUDEPATH += "/usr/include/qjson"
- LIBS += "-lqjson"
+ INCLUDEPATH += /usr/include/qjson
+ LIBS += -lqjson
  RESOURCES += ../images.qrc
  SOURCES += main.cpp \
      ui/mainwindow.cpp \
      ui/zoombuttonpanel.cpp \
      ui/userinfo.cpp \
      ui/sidepanel.cpp \
 +    networkcookiejar.cpp \
-     ui/zoombutton.cpp
++    ui/zoombutton.cpp \
+     ui/zoombutton.cpp \
+     network/networkaccessmanager.cpp \
+     network/networkhandler.cpp \
+     network/networkreply.cpp
  HEADERS += ui/mainwindow.h \
      map/mapengine.h \
      map/mapview.h \
      common.h \
      ui/userinfo.h \
      ui/sidepanel.h \
 +    networkcookiejar.h \
-     ui/zoombutton.h
+     ui/zoombutton.h \
+     network/networkaccessmanager.h \
+     network/networkhandler.h \
+     network/networkreply.h
  QT += network \
      webkit
- #DEFINES += QT_NO_DEBUG_OUTPUT
+ DEFINES += QT_NO_DEBUG_OUTPUT
  
  maemo5 | simulator {
-     SOURCES += gps/gpspositionprivate.cpp
-     HEADERS += gps/gpspositionprivate.h
-     QT += maemo5
-     CONFIG += mobility
+     INCLUDEPATH += /usr/include/glib-2.0 /usr/lib/glib-2.0/include
+     SOURCES += gps/gpspositionprivate.cpp \
+                network/networkhandlerprivate.cpp
+     HEADERS += gps/gpspositionprivate.h \
+                network/networkhandlerprivate.h
+     QT += maemo5 dbus
+     CONFIG += mobility icd2
      MOBILITY = location
      message([QJson])
      message(Make sure you have QJson development headers installed)
      message(Make sure you have QtMobility development headers installed)
      message(install headers with: apt-get install libqtm-dev)
  } else {
-     SOURCES += gps/gpspositionprivatestub.cpp
-     HEADERS += gps/gpspositionprivatestub.h
+     SOURCES += gps/gpspositionprivatestub.cpp \
+                network/networkhandlerprivatestub.cpp
+     HEADERS += gps/gpspositionprivatestub.h \
+                network/networkhandlerprivatestub.h
      message(QJson built in)
      message(Make sure you have QJson development headers installed)
      message(install headers with: sudo apt-get install libqjson-dev)
diff --combined src/ui/mainwindow.cpp
@@@ -49,7 -49,6 +49,7 @@@
  const int N900_APP_WIDTH = 800;
  const int N900_APP_HEIGHT = 449;
  
 +
  MainWindow::MainWindow(QWidget *parent)
      : QMainWindow(parent),
      m_drawOwnLocationCrosshair(false),
@@@ -57,8 -56,8 +57,8 @@@
      m_refresh(false),
      m_email(),    
      m_password(),
 -    m_loginUrl(),
 -    m_webView(0)
 +    m_webView(0),
 +    m_cookieJar(0)
  {
      qDebug() << __PRETTY_FUNCTION__;
  
@@@ -117,9 -116,6 +117,6 @@@ void MainWindow::buildFriendListPanel(
              this, SIGNAL(findFriend(QPointF)));
  
      connect(m_mapView, SIGNAL(viewResized(QSize)),
-             m_zoomButtonPanel, SLOT(screenResized(QSize)));
-     connect(m_mapView, SIGNAL(viewResized(QSize)),
              m_friendsListPanel, SLOT(screenResized(QSize)));
  
      connect(this, SIGNAL(locationItemClicked(QList<QString>)),
              m_friendsListPanelSidebar, SLOT(reDrawSidebar(int, int)));
  }
  
 +void MainWindow::buildLoginDialog()
 +{
 +    qDebug() << __PRETTY_FUNCTION__;
 +
 +    if(!m_loginDialog) {
 +        m_loginDialog = new LoginDialog(this);
 +
 +        connect(m_loginDialog, SIGNAL(loginDialogDone(QString,QString)),
 +                this, SLOT(loginDialogDone(QString,QString)));
 +    }
 +}
 +
  void MainWindow::buildManualLocationCrosshair()
  {
      qDebug() << __PRETTY_FUNCTION__;
@@@ -213,6 -197,9 +210,9 @@@ void MainWindow::buildUserInfoPanel(
      m_userPanelSidebar->stackUnder(m_friendsListPanel);
      m_userPanel->stackUnder(m_userPanelSidebar);
  
+     connect(m_userPanel, SIGNAL(findUser(QPointF)),
+             this, SIGNAL(findUser(QPointF)));
      connect(this, SIGNAL(userLocationReady(User*)),
              m_userPanel, SLOT(userDataReceived(User*)));
  
              m_userPanel, SLOT(screenResized(QSize)));
  }
  
 +void MainWindow::buildWebView()
 +{
 +    qDebug() << __PRETTY_FUNCTION__;
 +
 +    if(!m_webView) {
 +        m_webView = new QWebView;
 +
 +        connectWebViewSignals(true);
 +
 +        m_webView->hide();
 +    }
 +}
 +
  void MainWindow::buildZoomButtonPanel()
  {
      qDebug() << __PRETTY_FUNCTION__;
  
-     m_zoomButtonPanel = new ZoomButtonPanel(this, ZOOM_BUTTON_PANEL_POSITION_X,
-                                             ZOOM_BUTTON_PANEL_POSITION_Y);
+     m_zoomButtonPanel = new ZoomButtonPanel(this);
  
      connect(m_zoomButtonPanel->zoomInButton(), SIGNAL(clicked()),
              this, SIGNAL(zoomIn()));
      connect(this, SIGNAL(minZoomLevelReached()),
              m_zoomButtonPanel, SLOT(disableZoomOutButton()));
  
-     QSettings settings(DIRECTORY_NAME, FILE_NAME);
-     m_zoomButtonPanel->move(settings.value(ZOOMPANEL_POSITION,
-                                            QPoint(ZOOM_BUTTON_PANEL_POSITION_X,
-                                                   ZOOM_BUTTON_PANEL_POSITION_Y)).toPoint());
+     connect(m_mapView, SIGNAL(viewResized(QSize)),
+             m_zoomButtonPanel, SLOT(screenResized(QSize)));
  }
  
 +void MainWindow::clearCookieJar()
 +{
 +    qDebug() << __PRETTY_FUNCTION__;
 +
 +    buildWebView();
 +
 +    if(!m_cookieJar) {
 +        m_cookieJar = new NetworkCookieJar(new QNetworkCookieJar(this));
 +        qDebug() << "create cookie jar";
 +    }
 +    QList<QNetworkCookie> emptyList;
 +    emptyList.clear();
 +
 +    m_cookieJar->setAllCookies(emptyList);
 +    m_webView->page()->networkAccessManager()->setCookieJar(m_cookieJar);
 +}
 +
 +void MainWindow::connectWebViewSignals(bool connectSignals)
 +{
 +    qDebug() << __PRETTY_FUNCTION__;
 +
 +    if(connectSignals) {
 +        connect(m_webView, SIGNAL(urlChanged(const QUrl &)),
 +                this, SIGNAL(updateCredentials(QUrl)));
 +        connect(m_webView, SIGNAL(loadFinished(bool)),
 +                this, SLOT(loadDone(bool)));
 +    }
 +    else {
 +        disconnect(m_webView, SIGNAL(loadFinished(bool)),
 +                   this, SLOT(loadDone(bool)));
 +        disconnect(m_webView, SIGNAL(urlChanged(const QUrl &)),
 +                   this, SLOT(updateCredentials(const QUrl &)));
 +    }
 +}
 +
  void MainWindow::createMenus()
  {
      qDebug() << __PRETTY_FUNCTION__;
@@@ -423,32 -359,6 +420,32 @@@ void MainWindow::keyPressEvent(QKeyEven
      QWidget::keyPressEvent(event);
  }
  
 +void MainWindow::loadCookies()
 +{
 +    qDebug() << __PRETTY_FUNCTION__;
 +
 +    QSettings settings(DIRECTORY_NAME, FILE_NAME);
 +
 +    QString cookies = settings.value(COOKIES, EMPTY).toString();
 +    if(!cookies.isEmpty()) {
 +        QStringList list = cookies.split("|");
 +        QList<QNetworkCookie> cookieList;
 +
 +        for(int i=0;i<list.count();i++) {
 +            QNetworkCookie tmpCookie;
 +            QList<QNetworkCookie> parserList = tmpCookie.parseCookies(list.at(i).toAscii());
 +            cookieList.append(parserList.at(0));
 +        }
 +        if(!m_cookieJar) {
 +            m_cookieJar = new NetworkCookieJar(new QNetworkCookieJar(this));
 +            qDebug() << "create cookie jar";
 +        }
 +
 +        m_cookieJar->setAllCookies(cookieList);
 +        m_webView->page()->networkAccessManager()->setCookieJar(m_cookieJar);
 +    }
 +}
 +
  void MainWindow::loadDone(bool done)
  {
      qDebug() << __PRETTY_FUNCTION__;
@@@ -503,13 -413,6 +500,13 @@@ void MainWindow::loggedIn(bool logged
          m_loginAct->setText(tr("Logout"));
      }
      else {
 +        clearCookieJar();
 +        m_email.clear();
 +        m_password.clear();
 +
 +        if(m_loginDialog)
 +            m_loginDialog->clearTextFields();
 +
          m_loginAct->setText(tr("Login"));
      }
      showPanels(m_loggedIn);
@@@ -527,7 -430,8 +524,7 @@@ void MainWindow::loginFailed(
  {
      qDebug() << __PRETTY_FUNCTION__;
  
 -    m_email.clear();
 -    m_password.clear();
 +    emit fetchUsernameFromSettings();
  
      toggleProgressIndicator(false);
  
  
  #endif // Q_WS_MAEMO_5
  
 +    buildLoginDialog();
 +
      if(!m_email.isEmpty()) {
          m_loginDialog->setEmailField(m_email);
      }
          // if login dialog was canceled we need to stop processing webview
          // stop and disconnect m_webView;
          m_webView->stop();
 -        disconnect(m_webView, SIGNAL(loadFinished(bool)),
 -                   this, SLOT(loadDone(bool)));
 -        disconnect(m_webView, SIGNAL(urlChanged(const QUrl &)),
 -                   this, SLOT(updateCredentials(const QUrl &)));
 +        connectWebViewSignals(false);
  
          emit cancelLoginProcess();
      }
      else {
          // re-load login page for webview
          toggleProgressIndicator(true);
 -        m_webView->load(m_loginUrl);
 +
 +        // connect webview signals again since they might have been disconnected
 +        connectWebViewSignals(true);
 +
 +        QStringList urlParts;
 +        urlParts.append(FACEBOOK_LOGINBASE);
 +        urlParts.append(SITUARE_PUBLIC_FACEBOOKAPI_KEY);
 +        urlParts.append(INTERVAL1);
 +        urlParts.append(SITUARE_LOGIN_SUCCESS);
 +        urlParts.append(INTERVAL2);
 +        urlParts.append(SITUARE_LOGIN_FAILURE);
 +        urlParts.append(FACEBOOK_LOGIN_ENDING);
 +
 +        m_webView->load(QUrl(urlParts.join(EMPTY)));
      }
  }
  
 +void MainWindow::loginUsingCookies()
 +{
 +    qDebug() << __PRETTY_FUNCTION__;
 +
 +    buildWebView();
 +    loadCookies();
 +    
 +    QStringList urlParts;
 +    urlParts.append(FACEBOOK_LOGINBASE);
 +    urlParts.append(SITUARE_PUBLIC_FACEBOOKAPI_KEY);
 +    urlParts.append(INTERVAL1);
 +    urlParts.append(SITUARE_LOGIN_SUCCESS);
 +    urlParts.append(INTERVAL2);
 +    urlParts.append(SITUARE_LOGIN_FAILURE);
 +    urlParts.append(FACEBOOK_LOGIN_ENDING);
 +
 +    m_webView->load(QUrl(urlParts.join(EMPTY)));
 +
 +}
 +
  void MainWindow::openSettingsDialog()
  {
      qDebug() << __PRETTY_FUNCTION__;
      dialog->show();
  }
  
 +void MainWindow::saveCookies()
 +{
 +    qDebug() << __PRETTY_FUNCTION__;
 +
 +    if(!m_cookieJar)
 +        m_cookieJar = new NetworkCookieJar(new QNetworkCookieJar(this));
 +
 +    QList<QNetworkCookie> cookieList = m_cookieJar->allCookies();
 +    QStringList list;
 +
 +    for(int i=0;i<cookieList.count();i++) {
 +        QNetworkCookie cookie = cookieList.at(i);
 +        QByteArray byteArray = cookie.toRawForm(QNetworkCookie::Full);
 +        list.append(QString(byteArray));
 +    }
 +    QSettings settings(DIRECTORY_NAME, FILE_NAME);
 +
 +    settings.setValue(COOKIES, list.join("|"));
 +}
 +
  void MainWindow::setAutoCenteringButtonEnabled(bool enabled)
  {
      qDebug() << __PRETTY_FUNCTION__;
@@@ -708,15 -560,21 +705,15 @@@ void MainWindow::startLoginProcess(cons
  {
      qDebug() << __PRETTY_FUNCTION__;
  
 -    m_loginUrl = url;
 -    m_webView = new QWebView;
 -    m_loginDialog = new LoginDialog(this);
 -
 -    connect(m_webView, SIGNAL(urlChanged(const QUrl &)),
 -            this, SIGNAL(updateCredentials(QUrl)));
 -    connect(m_webView, SIGNAL(loadFinished(bool)),
 -            this, SLOT(loadDone(bool)));
 +    buildWebView();
 +    buildLoginDialog();
  
 -    connect(m_loginDialog, SIGNAL(loginDialogDone(QString,QString)),
 -            this, SLOT(loginDialogDone(QString,QString)));
 +    emit fetchUsernameFromSettings();
  
 -    m_webView->hide();
 +    if(!m_cookieJar)
 +        m_cookieJar = new NetworkCookieJar(new QNetworkCookieJar(this));
  
 -    emit fetchUsernameFromSettings();
 +    m_webView->page()->networkAccessManager()->setCookieJar(m_cookieJar);
  
      if(!m_email.isEmpty()) {
          m_loginDialog->setEmailField(m_email);
          // if login dialog was canceled we need to stop processing webview
          // stop and disconnect m_webView;
          m_webView->stop();
 -        disconnect(m_webView, SIGNAL(loadFinished(bool)),
 -                   this, SLOT(loadDone(bool)));
 -        disconnect(m_webView, SIGNAL(urlChanged(const QUrl &)),
 -                   this, SLOT(updateCredentials(const QUrl &)));
 +        connectWebViewSignals(false);
  
          emit cancelLoginProcess();
      }
      else {
 -        m_webView->load(m_loginUrl);
 +        // connect webview signals again since they might have been disconnected
 +        connectWebViewSignals(true);
 +
 +        m_webView->load(url);
          toggleProgressIndicator(true);
          m_refresh = true;
      }
diff --combined src/ui/mainwindow.h
@@@ -27,7 -27,6 +27,7 @@@
  #include <QtGui/QMainWindow>
  #include <QUrl>
  
 +#include "networkcookiejar.h"
  #include "panelsidebar.h"
  
  class QGraphicsScene;
@@@ -138,12 -137,6 +138,12 @@@ public slots
      void loginFailed();
  
      /**
 +    * @brief Slot to intercept signal when login with cookies is requested
 +    *
 +    */
 +    void loginUsingCookies();
 +
 +    /**
      * @brief Public slot, which open settings dialog
      */
      void openSettingsDialog();
@@@ -184,12 -177,6 +184,12 @@@ private
      void buildFriendListPanel();
  
      /**
 +    * @brief Build login dialog and connect slots
 +    *
 +    */
 +    void buildLoginDialog();
 +
 +    /**
        * @brief Build manual location setting cross hair and connect slots
        */
      void buildManualLocationCrosshair();
      void buildUserInfoPanel();
  
      /**
 +    * @brief Build webview and connect slots
 +    *
 +    */
 +    void buildWebView();
 +
 +    /**
        * @brief Build zoom button panel and connect slots
        */
      void buildZoomButtonPanel();
  
      /**
 +    * @brief Clears cookie jar
 +    *
 +    */
 +    void clearCookieJar();
 +
 +    /**
 +    * @brief connect/disconnect webview signals
 +    *
 +    * @param connectSignals true = connect, false = disconnect
 +    */
 +    void connectWebViewSignals(bool connectSignals);
 +
 +    /**
      * @brief Private method to create the Menu items
      */
      void createMenus();
@@@ -283,12 -251,6 +283,12 @@@ private slots
      void gpsTimeout();
  
      /**
 +    * @brief Slot to load cookies from settings
 +    *
 +    */
 +    void loadCookies();
 +
 +    /**
      * @brief Slot to intercept signal when webview has finished loading webpage
      *
      * @param done Status of the loading
      void loadDone(bool done);
  
      /**
 +    * @brief Slot to save cookies to settings
 +    *
 +    */
 +    void saveCookies();
 +
 +    /**
      * @brief Set correnct view port size to datamembers
      *
      * @param width Width of the viewport
@@@ -340,6 -296,13 +340,13 @@@ signals
      void fetchUsernameFromSettings();
  
      /**
+     * @brief Signal for finding user.
+     *
+     * @param coordinates user geo coordinates
+     */
+     void findUser(const QPointF &coordinates);
+     /**
      * @brief GPS setting changed
      *
      * @param enabled True if GPS is enabled, otherwise false
@@@ -483,12 -446,13 +490,12 @@@ private
      QString m_email;                        ///< Placeholder for email
      QString m_password;                     ///< Placeholder for password
  
 -    QUrl m_loginUrl;                        ///< Placeholder for login page url
 -
      QWebView *m_webView;                    ///< Shows facebook login page
  
      FriendListPanel *m_friendsListPanel;    ///< Instance of friends list panel
      LoginDialog *m_loginDialog;             ///< Login dialog
      MapView *m_mapView;                     ///< Instance of the map view
 +    NetworkCookieJar *m_cookieJar;          ///< Placeholder for QNetworkCookies
      PanelSideBar *m_userPanelSidebar;       ///< User panel side bar
      PanelSideBar *m_friendsListPanelSidebar;///< Friends panel side bar
      UserInfoPanel *m_userPanel;             ///< Instance of the user information panel