Added QPixmap for User class and implemented first version of profile image fetching...
authorlampehe-local <henri.lampela@ixonos.com>
Tue, 27 Apr 2010 11:36:09 +0000 (14:36 +0300)
committerlampehe-local <henri.lampela@ixonos.com>
Tue, 27 Apr 2010 11:36:09 +0000 (14:36 +0300)
src/engine/engine.cpp
src/situareservice/imagefetcher.cpp
src/situareservice/imagefetcher.h
src/situareservice/situareservice.cpp
src/situareservice/situareservice.h
src/user/user.cpp
src/user/user.h

index dddbc58..b2e877c 100644 (file)
@@ -41,6 +41,8 @@ SituareEngine::SituareEngine(QMainWindow *parent)
     connect(m_situareService, SIGNAL(reverseGeoReady(QString)), m_ui, SIGNAL(reverseGeoReady(QString)));
     connect(m_ui, SIGNAL(statusUpdate(QString,bool)), this, SLOT(requestUpdateLocation(QString,bool)));
 
+    m_situareService->fetchLocations(); // request user locations
+
     start();
 }
 
@@ -55,7 +57,6 @@ void SituareEngine::start()
     m_facebookAuthenticator->start();
 }
 
-
 void SituareEngine::loginOk()
 
 {
index 825e9dc..25d26c2 100644 (file)
@@ -22,7 +22,7 @@
 #include <QDebug>
 #include <QNetworkRequest>
 #include <QNetworkReply>
-#include <QImage>
+#include <QPixmap>
 #include "imagefetcher.h"
 
 ImageFetcher::ImageFetcher(QNetworkAccessManager *manager, QObject *parent)
@@ -76,8 +76,7 @@ void ImageFetcher::downloadFinished(QNetworkReply *reply)
         if (!image.load(reply, 0))
             image = QImage();
 
-        //emit imageReceived(url, QPixmap::fromImage(image));
-        emit imageReceived(url, image);
+        emit imageReceived(url, QPixmap::fromImage(image));
     }
     else {
         emit error(reply->errorString());
index 1404a65..274d366 100644 (file)
@@ -85,10 +85,9 @@ signals:
     * is received from the server and loaded to pixmap.
     *
     * @param url URL to image
-    * @param image image QImage
+    * @param image image QPixmap
     */
-    //void imageReceived(const QUrl &url, const QPixmap &image);
-    void imageReceived(const QUrl &url, const QImage &image);
+    void imageReceived(const QUrl &url, const QPixmap &image);
 
     /**
     * @brief Signal which is emitted when there is error
index 1723292..aaa9d83 100644 (file)
@@ -22,6 +22,7 @@
 #include <QDebug>
 #include <QtGlobal>
 #include <QStringList>
+#include <QPixmap>
 #include "situareservice.h"
 #include "situarecommon.h"
 #include "../cookiehandler/cookiehandler.h"
@@ -38,8 +39,8 @@ SituareService::SituareService(QObject *parent, QNetworkAccessManager *manager)
 
     m_imageFetcher = new ImageFetcher(new QNetworkAccessManager(this), this);
     connect(this, SIGNAL(fetchImage(QUrl)), m_imageFetcher, SLOT(fetchImage(QUrl)));
-    connect(m_imageFetcher, SIGNAL(imageReceived(QUrl,QImage)), this,
-            SLOT(imageReceived(QUrl, QImage)));
+    connect(m_imageFetcher, SIGNAL(imageReceived(QUrl,QPixmap)), this,
+            SLOT(imageReceived(QUrl, QPixmap)));
 
     m_credentials = m_facebookAuthentication.loginCredentials();
 }
@@ -49,6 +50,7 @@ SituareService::~SituareService()
     qDebug() << __PRETTY_FUNCTION__;
 
     delete m_networkManager;
+    delete m_user;
 }
 
 void SituareService::fetchLocations()
@@ -234,6 +236,10 @@ void SituareService::parseUserData(const QByteArray &jsonReply)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
+    m_visited = 0;
+    m_nbrOfImages = 0;
+    m_friendsList.clear();
+
     QJson::Parser parser;
     bool ok;
 
@@ -244,7 +250,7 @@ void SituareService::parseUserData(const QByteArray &jsonReply)
         exit (1);
     }
 
-    QList<User *> friendsList;
+    //QList<User *> friendsList;
 
     QVariant userVariant = result.value("user");
     QMap<QString, QVariant> userMap = userVariant.toMap();
@@ -253,7 +259,7 @@ void SituareService::parseUserData(const QByteArray &jsonReply)
 
     QUrl imageUrl = userMap["profile_pic"].toUrl();
 
-    User user = User(userMap["address"].toString(), coordinates, userMap["name"].toString(),
+    m_user = new User(userMap["address"].toString(), coordinates, userMap["name"].toString(),
                   userMap["note"].toString(), imageUrl, userMap["timestamp"].toString(),
                   true, userMap["uid"].toString());
 
@@ -271,14 +277,46 @@ void SituareService::parseUserData(const QByteArray &jsonReply)
                             false, friendMap["uid"].toString(), distanceMap["units"].toString(),
                             distanceMap["value"].toDouble());
 
-      friendsList.append(user);
+      m_friendsList.append(user);
     }
-    emit userDataChanged(user, friendsList);
+    addProfileImages();
 }
 
-void SituareService::imageReceived(const QUrl &url, const QImage &image)
+void SituareService::imageReceived(const QUrl &url, const QPixmap &image)
 {
     qDebug() << __PRETTY_FUNCTION__;
     qDebug() << "Image URL: " << url << " size :" << image.size();
-    //ToDo: where now?
+
+    if(m_user->profileImageUrl() == url) {
+        m_user->setProfileImage(image);
+    }
+
+    for(int i=0;i<m_friendsList.count();i++) {
+        if(m_friendsList.at(i)->profileImageUrl() == url) {
+            m_friendsList.at(i)->setProfileImage(image);
+            m_nbrOfImages++; // indicates how many friend profile images has been downloaded
+        }
+    }
+
+    if(m_nbrOfImages == m_visited) {
+        qDebug() << "m_nbrOfImages: " << m_nbrOfImages << " m_visited: " << m_visited;
+        qDebug() << "emit userDataChanged";
+        emit userDataChanged(m_user, m_friendsList);
+    }
+}
+
+void SituareService::addProfileImages()
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    if(m_user->profileImageUrl() != QUrl("")) {
+        emit fetchImage(m_user->profileImageUrl());
+    }
+
+    for(int i=0;i<m_friendsList.count();i++) {
+        if(m_friendsList.at(i)->profileImageUrl() != QUrl("")) {
+            m_visited++; // indicates how many friends that have profile image
+            emit fetchImage(m_friendsList.at(i)->profileImageUrl());
+        }
+    }
 }
index afaa628..e775a54 100644 (file)
@@ -140,6 +140,13 @@ private:
     */
     void sendRequest(const QUrl &url, const QString &cookieType, const QString &cookie);
 
+    /**
+    * @brief Requests ImageFetcher if user/friend has a profile image
+    *        uses members: m_user and m_friendsList
+    *
+    */
+    void addProfileImages();
+
 private slots:
 
     /**
@@ -148,7 +155,7 @@ private slots:
     * @param url Image url
     * @param image Received image
     */
-    void imageReceived(const QUrl &url, const QImage &image);
+    void imageReceived(const QUrl &url, const QPixmap &image);
 
 /*******************************************************************************
  * SIGNALS
@@ -183,7 +190,7 @@ signals:
     * @param user instance of user
     * @param friendList list of friends
     */
-    void userDataChanged(User &user, QList<User *> &friendList);
+    void userDataChanged(User *user, QList<User *> &friendList);
 
 /*******************************************************************************
  * DATA MEMBERS
@@ -196,6 +203,11 @@ private:
     FacebookAuthentication m_facebookAuthentication; ///< Pointer to FacebookAuthentication
     QNetworkAccessManager *m_networkManager; ///< Pointer to QNetworkAccessManager
     ImageFetcher *m_imageFetcher;
+
+    User *m_user; ///< Pointer to User
+    QList<User *> m_friendsList; ///< List of friends(User)
+    int m_visited; ///< Indicates number of friends with profile images
+    int m_nbrOfImages; ///< Indicates number of friends whose profile images have been downloaded
 };
 
 #endif // SITUARESERVICE_H
index 6bb83f8..3a7b1b8 100644 (file)
@@ -58,6 +58,11 @@ void User::setNote(const QString &note)
     m_note = note;
 }
 
+void User::setProfileImage(const QPixmap &image)
+{
+    m_profileImage = image;
+}
+
 void User::setProfileImageUrl(const QUrl &imageUrl)
 {
     m_profileImageUrl = imageUrl;
@@ -94,6 +99,11 @@ QString User::note() const
     return m_note;
 }
 
+QPixmap User::profileImage() const
+{
+    return m_profileImage;
+}
+
 QUrl User::profileImageUrl() const
 {
     return m_profileImageUrl;
index 968003a..9992329 100644 (file)
@@ -22,6 +22,7 @@
 #ifndef USER_H
 #define USER_H
 
+#include <QPixmap>
 #include <QPointF>
 #include <QString>
 #include <QUrl>
@@ -78,6 +79,13 @@ public:
     void setNote(const QString &note);
 
     /**
+    * @brief Set profile image
+    *
+    * @param image Image
+    */
+    void setProfileImage(const QPixmap &image);
+
+    /**
     * @brief Set download address for profile image
     *
     * @param imageUrl image url
@@ -128,6 +136,13 @@ public:
     QString note() const;
 
     /**
+    * @brief Get profile image
+    *
+    * @return QPixmap image
+    */
+    QPixmap profileImage() const;
+
+    /**
     * @brief Get download address for profile image
     *
     * @return QString url
@@ -170,6 +185,8 @@ private:
     QString m_units; ///< placeholder for distance unit type
     QString m_userId; ///< placeholder for userId
     double m_value; ///< placeholder for distance value
+
+    QPixmap m_profileImage; ///< placehokder for image
 };