Moved creating the FacebookLoginBrowser to FacebookAuthentication.
authorSami Rämö <sami.ramo@ixonos.com>
Tue, 9 Nov 2010 09:32:05 +0000 (11:32 +0200)
committerSami Rämö <sami.ramo@ixonos.com>
Tue, 9 Nov 2010 09:32:05 +0000 (11:32 +0200)
MainWindow does now handle only the dialog.

src/engine/engine.cpp
src/engine/engine.h
src/facebookservice/facebookauthentication.cpp
src/facebookservice/facebookauthentication.h
src/ui/facebookloginbrowser.cpp
src/ui/mainwindow.cpp
src/ui/mainwindow.h

index 6edd87e..2e39d84 100644 (file)
@@ -83,7 +83,7 @@ SituareEngine::SituareEngine()
     m_situareService = new SituareService(this);
 
     // build FacebookAuthenticator
-    m_facebookAuthenticator = new FacebookAuthentication(this);
+    m_facebookAuthenticator = new FacebookAuthentication(m_ui, this);
 
     // build routing service
     m_routingService = new RoutingService(this); // create this when needed, not in constructor!
@@ -355,15 +355,6 @@ void SituareEngine::locationSearch(QString location)
         m_geocodingService->requestLocation(location);
 }
 
-void SituareEngine::loggedIn()
-{
-    qWarning() << __PRETTY_FUNCTION__;
-
-    m_ui->destroyFacebookLoginBrowser();
-
-    loginOk();
-}
-
 void SituareEngine::loginActionPressed()
 {
     qDebug() << __PRETTY_FUNCTION__;
@@ -595,14 +586,11 @@ void SituareEngine::signalsFromFacebookAuthenticator()
     connect(m_facebookAuthenticator, SIGNAL(error(int, int)),
             this, SLOT(error(int, int)));
 
-    connect(m_facebookAuthenticator, SIGNAL(buildLoginBrowser()),
-            m_ui, SLOT(buildFacebookLoginBrowser()));
-
     connect(m_facebookAuthenticator, SIGNAL(loggedIn(QString)),
             m_situareService, SLOT(updateSession(QString)));
 
     connect(m_facebookAuthenticator, SIGNAL(loggedIn(QString)),
-            this, SLOT(loggedIn()));
+            this, SLOT(loginOk()));
 }
 
 void SituareEngine::signalsFromGeocodingService()
@@ -640,9 +628,6 @@ void SituareEngine::signalsFromMainWindow()
     connect(m_ui, SIGNAL(loginActionPressed()),
             this, SLOT(loginActionPressed()));
 
-    connect(m_ui, SIGNAL(loginBrowserCreated(FacebookLoginBrowser*)),
-            m_facebookAuthenticator, SLOT(setBrowser(FacebookLoginBrowser*)));
-
     // signals from map view
     connect(m_ui, SIGNAL(mapViewScrolled(SceneCoordinate)),
             m_mapEngine, SLOT(setCenterPosition(SceneCoordinate)));
index 26f16c6..e76274c 100644 (file)
@@ -227,8 +227,6 @@ private slots:
     */
     void imageReady(User *user);
 
-    void loggedIn();
-
     /**
     * @brief Requests automatic update.
     *
index 2bd36e5..93e3e65 100644 (file)
 #include "network/networkcookiejar.h"
 #include "situareservice/situarecommon.h"
 #include "ui/facebookloginbrowser.h"
+#include "ui/mainwindow.h"
 
 #include "facebookauthentication.h"
 
 const QString FB_LOGIN_SUCCESS_URL = "http://www.facebook.com/connect/login_success.html";
 const QString FB_LOGIN_URL = "https://www.facebook.com/login.php";
 
-FacebookAuthentication::FacebookAuthentication(QObject *parent)
+FacebookAuthentication::FacebookAuthentication(MainWindow *mainWindow, QObject *parent)
     : QObject(parent),
-      m_browser(0)
+      m_browser(0),
+      m_mainWindow(mainWindow)
 {
     qDebug() << __PRETTY_FUNCTION__;
 }
@@ -56,8 +58,6 @@ void FacebookAuthentication::browserDestroyed()
 {
     qWarning() << __PRETTY_FUNCTION__;
 
-    ///< @todo (HIGH) Is newer called!
-
     m_browser = 0;
 }
 
@@ -90,7 +90,34 @@ void FacebookAuthentication::login()
 {
     qWarning() << __PRETTY_FUNCTION__;
 
-    emit buildLoginBrowser();
+    if (!m_browser)
+        m_browser = new FacebookLoginBrowser(m_mainWindow);
+
+    if (m_browser) {
+        connect(m_browser, SIGNAL(loadFinished(bool)),
+                this, SLOT(loadFinished(bool)));
+
+        connect(m_browser, SIGNAL(urlChanged(QUrl)),
+                this, SLOT(urlChanged(QUrl)));
+
+        connect(m_browser, SIGNAL(destroyed(QObject*)),
+                this, SLOT(browserDestroyed()));
+
+        connect(m_browser->page()->networkAccessManager(), SIGNAL(finished(QNetworkReply*)),
+                this, SLOT(networkReplyHandler(QNetworkReply*)));
+
+        QString url = FB_LOGIN_URL + "?";
+        url.append("api_key=" + API_KEY +"&");
+        url.append("display=touch&");
+        url.append("fbconnect=1&");
+        url.append("next=" + FB_LOGIN_SUCCESS_URL + "&");
+        url.append("return_session=1&");
+        url.append("session_version=3&");
+        url.append("v=1.0&");
+        url.append("req_perms=publish_stream");
+
+        m_browser->load(QUrl(url));
+    }
 }
 
 void FacebookAuthentication::networkReplyHandler(QNetworkReply *reply)
@@ -121,39 +148,6 @@ QString FacebookAuthentication::parseSession(const QUrl &url)
         return QString();
 }
 
-void FacebookAuthentication::setBrowser(FacebookLoginBrowser *browser)
-{
-    qWarning() << __PRETTY_FUNCTION__;
-
-    m_browser = browser;
-
-    if (m_browser) {
-        connect(m_browser, SIGNAL(loadFinished(bool)),
-                this, SLOT(loadFinished(bool)));
-
-        connect(m_browser, SIGNAL(urlChanged(QUrl)),
-                this, SLOT(urlChanged(QUrl)));
-
-        connect(m_browser, SIGNAL(destroyed(QObject*)),
-                this, SLOT(browserDestroyed()));
-
-        connect(m_browser->page()->networkAccessManager(), SIGNAL(finished(QNetworkReply*)),
-                this, SLOT(networkReplyHandler(QNetworkReply*)));
-
-        QString url = FB_LOGIN_URL + "?";
-        url.append("api_key=" + API_KEY +"&");
-        url.append("display=touch&");
-        url.append("fbconnect=1&");
-        url.append("next=" + FB_LOGIN_SUCCESS_URL + "&");
-        url.append("return_session=1&");
-        url.append("session_version=3&");
-        url.append("v=1.0&");
-        url.append("req_perms=publish_stream");
-
-        m_browser->load(QUrl(url));
-    }
-}
-
 void FacebookAuthentication::urlChanged(const QUrl &url)
 {
     qWarning() << __PRETTY_FUNCTION__ << url.toString();
@@ -171,13 +165,16 @@ void FacebookAuthentication::urlChanged(const QUrl &url)
     if (!url.toString().contains("session={")) {
         // url parameter doesn't contain session data, so login with cookies failed
         qWarning() << __PRETTY_FUNCTION__ << "working credentials required";
-        m_browser->show();
+        m_mainWindow->buildLoginDialog(m_browser);
     } else if (url.toString().startsWith(FB_LOGIN_SUCCESS_URL)) {
         // login succeeded
         const QString session = parseSession(url);
         qWarning() << __PRETTY_FUNCTION__ << "login finished, parsed session:" << session;
-        if (!session.isEmpty())
+        if (!session.isEmpty()) {
+            m_mainWindow->destroyLoginDialog();
+            m_browser->deleteLater();
             emit loggedIn(session);
+        }
     }
     else {
         qWarning() << __PRETTY_FUNCTION__ << "credentials accepted, getting the access_token";
index 5c13c87..5987fee 100644 (file)
 class QNetworkReply;
 
 class FacebookLoginBrowser;
+class MainWindow;
 
 /**
-* @brief FacebookAuthentication class takes care of parsing and handling of  credentials for
-*        Facebook. Other components of Situare application needs credentials to communicate with
-*        facebook.
+* @brief FacebookAuthentication class takes care of Facebook login process. It creates
+         FacebookLoginBrowser instance and tries to login with cookies using hidden browser.
+         If failed, then visible login browser dialog is invoked. Class also does parse the
+         accuired credentials.
 *
 * @author Ville Tiensuu
+* @author Sami Rämö - sami.ramo (at) ixonos.com
 */
 class FacebookAuthentication : public QObject
 {
@@ -47,9 +50,10 @@ public:
     *
     * -Checks if there is valid credentials stored on the file. If there is emits signal.
     *
+    * @param mainWindow MainWindow instance
     * @param parent instance of parent
     */
-    FacebookAuthentication(QObject *parent = 0);
+    FacebookAuthentication(MainWindow *mainWindow, QObject *parent = 0);
 
 /*******************************************************************************
  * MEMBER FUNCTIONS AND SLOTS
@@ -66,8 +70,6 @@ public slots:
     */
     void clearAccountInformation(bool keepUsername = false);
 
-    void setBrowser(FacebookLoginBrowser *browser);
-
 private:
     QString parseSession(const QUrl &url);
 
@@ -84,8 +86,6 @@ private slots:
  * SIGNALS
  ******************************************************************************/
 signals:
-    void buildLoginBrowser();
-
     /**
     * @brief Signals error
     *
@@ -101,6 +101,7 @@ signals:
  ******************************************************************************/
 private:
     FacebookLoginBrowser *m_browser;
+    MainWindow *m_mainWindow;
 };
 
 #endif // FACEBOOKAUTHENTICATION_H
index 917a55b..487da24 100644 (file)
@@ -30,8 +30,5 @@ FacebookLoginBrowser::FacebookLoginBrowser(QWidget *parent) :
 {
     qWarning() << __PRETTY_FUNCTION__;
 
-    setWindowFlags(Qt::Dialog);
-    setWindowTitle(tr("Login"));
-
     page()->networkAccessManager()->setCookieJar(new NetworkCookieJar());
 }
index 4ec70c4..7defcf4 100644 (file)
@@ -35,7 +35,6 @@
 #include "common.h"
 #include "error.h"
 #include "facebookloginbrowser.h"
-#include "facebookservice/facebookauthentication.h"
 #include "friendlistpanel.h"
 #include "fullscreenbutton.h"
 #include "indicatorbuttonpanel.h"
@@ -74,10 +73,10 @@ MainWindow::MainWindow(QWidget *parent)
       m_refresh(false),
       m_mapCenterHorizontalShifting(0),
       m_progressIndicatorCount(0),
+      m_loginDialog(0),
       m_crosshair(0),
       m_email(), ///< @todo WTF?!?!?!?
       m_password(),
-      m_facebookLoginBrowser(0),
       m_fullScreenButton(0),
       m_indicatorButtonPanel(0),
       m_mapScale(0)
@@ -164,16 +163,6 @@ void MainWindow::buildCrosshair()
             this, SLOT(mapCenterHorizontalShiftingChanged(int)));
 }
 
-void MainWindow::buildFacebookLoginBrowser()
-{
-    qWarning() << __PRETTY_FUNCTION__;
-
-    if (!m_facebookLoginBrowser)
-        m_facebookLoginBrowser = new FacebookLoginBrowser(this);
-
-    emit loginBrowserCreated(m_facebookLoginBrowser);
-}
-
 void MainWindow::buildFriendListPanel()
 {
     qDebug() << __PRETTY_FUNCTION__;
@@ -292,6 +281,25 @@ void MainWindow::buildLocationSearchPanel()
             this, SIGNAL(searchHistoryItemClicked(QString)));
 }
 
+void MainWindow::buildLoginDialog(FacebookLoginBrowser *browser)
+{
+    qWarning() << __PRETTY_FUNCTION__;
+
+    if (!m_loginDialog) {
+        m_loginDialog = new QDialog(this);
+        if (m_loginDialog) {
+            m_loginDialog->setWindowTitle(tr("Login"));
+            m_loginDialog->setLayout(new QVBoxLayout());
+            m_loginDialog->layout()->addWidget(browser);
+            m_loginDialog->layout()->setContentsMargins(QMargins()); // zero margins
+            connect(m_loginDialog, SIGNAL(rejected()), this, SLOT(destroyLoginDialog()));
+        }
+    }
+
+    if (m_loginDialog)
+        m_loginDialog->show();
+}
+
 void MainWindow::buildMap()
 {
     qDebug() << __PRETTY_FUNCTION__;
@@ -524,13 +532,15 @@ void MainWindow::createMenus()
     m_viewMenu->setObjectName(tr("Menu"));
 }
 
-void MainWindow::destroyFacebookLoginBrowser()
+void MainWindow::destroyLoginDialog()
 {
     qWarning() << __PRETTY_FUNCTION__;
 
-    m_facebookLoginBrowser->hide();
-    m_facebookLoginBrowser->deleteLater();
-    m_facebookLoginBrowser = 0;
+    if (m_loginDialog) {
+        m_loginDialog->hide();
+        m_loginDialog->deleteLater();
+        m_loginDialog = 0;
+    }
 }
 
 void MainWindow::dialogFinished(int status)
index 6225bab..14f11fa 100644 (file)
@@ -33,6 +33,7 @@
 
 #include "network/networkcookiejar.h"
 
+class QDialog;
 class QGraphicsScene;
 class QLabel;
 class QMessageBox;
@@ -40,7 +41,6 @@ class QNetworkReply;
 class QToolButton;
 class QWebView;
 
-class FacebookAuthentication;
 class FacebookLoginBrowser;
 class FriendListPanel;
 class FullScreenButton;
@@ -94,6 +94,8 @@ private:
  * MEMBER FUNCTIONS AND SLOTS
  ******************************************************************************/
 public:
+    void buildLoginDialog(FacebookLoginBrowser *browser);
+
     /**
      * @brief
      *
@@ -151,10 +153,6 @@ public:
     const QString username();
 
 public slots:
-    void buildFacebookLoginBrowser();
-
-    void destroyFacebookLoginBrowser();
-
     /**
      * @brief Builds information box with message.
      *
@@ -163,6 +161,8 @@ public slots:
      */
     void buildInformationBox(const QString &message, bool modal=false);
 
+    void destroyLoginDialog();
+
     /**
      * @brief Slot for failed login
      */
@@ -500,8 +500,6 @@ signals:
      */
     void loginActionPressed();
 
-    void loginBrowserCreated(FacebookLoginBrowser *);
-
     /**
      * @brief MapView has been resized
      *
@@ -651,6 +649,8 @@ private:
     QAction *m_loginAct;                    ///< Action to Login/Logout
     QAction *m_toSettingsAct;               ///< Action to trigger switch to settings dialog
 
+    QDialog *m_loginDialog;                 ///< Login dialog
+
     QLabel *m_crosshair;                    ///< Label for center point crosshair
     QLabel *m_osmLicense;                   ///< Label for Open Street Map license
 
@@ -665,7 +665,6 @@ private:
     QString m_email;                        ///< Placeholder for email
     QString m_password;                     ///< Placeholder for password
 
-    FacebookLoginBrowser *m_facebookLoginBrowser;
     FriendListPanel *m_friendsListPanel;    ///< Instance of friends list panel
     FullScreenButton *m_fullScreenButton;   ///< Instance of the fullscreen toggle button
     IndicatorButtonPanel *m_indicatorButtonPanel;   ///< Instance of direction indicator button