Moved creating the FacebookLoginBrowser to FacebookAuthentication.
[situare] / src / facebookservice / facebookauthentication.cpp
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";