Changed Notification class to Message.
[situare] / src / situareservice / situareservice.h
index 1b40c14..92f5a90 100644 (file)
@@ -3,6 +3,7 @@
    Copyright (C) 2010  Ixonos Plc. Authors:
 
       Henri Lampela - henri.lampela@ixonos.com
+      Jussi Laitinen - jussi.laitinen@ixonos.com
 
    Situare is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License
 #include "../facebookservice/facebookcredentials.h"
 #include "../user/user.h"
 #include "imagefetcher.h"
+#include "message.h"
 
+class Database;
 class NetworkAccessManager;
 class QNetworkReply;
 class QNetworkRequest;
-class QPointF;
+class GeoCoordinate;
 class QUrl;
 
 /**
@@ -47,11 +50,17 @@ class SituareService : public QObject
 public:
 
     /**
+    * Unit test class
+    */
+    friend class TestSituareService;
+
+    /**
     * @brief Default constructor
     *
     * @param parent instance of parent
     */
-    SituareService(QObject *parent = 0);
+    SituareService(NetworkAccessManager *networkManager, ImageFetcher *imageFetcher,
+                   QObject *parent = 0);
 
     /**
     * @brief Destructor
@@ -62,6 +71,15 @@ public:
 /*******************************************************************************
  * MEMBER FUNCTIONS AND SLOTS
  ******************************************************************************/
+    /**
+    * @brief Retrieves people with similart interest (same tags).
+    *
+    * People is searched from area defined by south-west and north-east bounds.
+    * @param southWest south-west coordinates of bounds
+    * @param northEast north-east coordinates of bounds
+    */
+    void fetchPeopleWithSimilarInterest(const GeoCoordinate &southWestCoordinates,
+                                        const GeoCoordinate &northEastCoordinates);
 
     /**
     * @brief Retrieves location user and friends information from Situare server
@@ -74,18 +92,31 @@ public:
     *
     * @param coordinates coordinates to be translated
     */
-    void reverseGeo(const QPointF &coordinates);
+    void reverseGeo(const GeoCoordinate &coordinates);
 
     /**
     * @brief Updates location to the Situare server
     *
     * @param coordinates current cordinates
     * @param status message
-    * @param publish publish location on Facebook wall (true/false)
+    * @param publish publish location on Facebook wall
     */
-    void updateLocation(const QPointF &coordinates, const QString &status, const bool &publish);
+    void updateLocation(const GeoCoordinate &coordinates, const QString &status, const bool &publish);
+
+    /**
+    * @brief Updates tags to the Situare server
+    *
+    * CURRENTLY TAGS ARE UPDATED TO THE LOCAL DATABASE, NOT SITUARE SERVER
+    * @param userId user ID
+    * @param tags list of user's tags
+    */
+    void updateTags(const QString &userId, const QStringList &tags);
 
 public slots:
+    /**
+    * @brief Retrieves messages sent to user.
+    */
+    void fetchMessages();
 
     /**
     * @brief Public slot, to clear user data
@@ -107,14 +138,22 @@ public slots:
     */
     void requestFinished(QNetworkReply *reply);
 
-private:
+    /**
+    * @brief Sends a message to a person.
+    *
+    * @param receiverId Facebook user ID
+    * @param message message text
+    */
+    void sendMessage(const QString &receiverId, const QString &message);
 
+private:
     /**
     * @brief Requests ImageFetcher if user/friend has a profile image
     *        uses members: m_user and m_friendsList
     *
+    * @param imageUrlList list of image urls
     */
-    void addProfileImages();
+    void addProfileImages(const QHash<QString, QUrl> &imageUrlList);
 
     /**
     * @brief Forms a http cookie
@@ -148,11 +187,35 @@ private:
     *
     * @param coordinates current coordinates
     * @param status optional status message
-    * @param publish optional publish location on Facebook wall (true/false)
+    * @param publish optional publish location on Facebook wall
     * @return QString
     */
-    QString formUrlParameters(const QPointF &coordinates, QString status = QString(),
-                              QString publish = QString());
+    QString formUrlParameters(const GeoCoordinate &coordinates, QString status = QString(),
+                              bool publish = false);
+
+    /**
+    * @brief Temporary method to get tags.
+    *
+    * Tags are fetch from local database instead of Situare server.
+    * @param userId
+    * @return QStringList list of tags
+    */
+    QStringList getTags(const QString &userId);
+
+    /**
+    * @brief Parses interesting people data from JSON string
+    *
+    * @param jsonReply JSON string
+    */
+    void parseInterestingPeopleData(const QByteArray &jsonReply);
+
+    /**
+    * @brief Parses messages data from JSON string
+    *
+    * @param jsonReply JSON string
+    */
+    void parseMessagesData(const QByteArray &jsonReply);
+
 
     /**
     * @brief Parses user and friend data from JSON string
@@ -171,34 +234,62 @@ private:
     void sendRequest(const QUrl &url, const QString &cookieType, const QString &cookie);
 
 private slots:
-
     /**
     * @brief Slot for received images
     *
-    * @param url Image url
-    * @param image Received image
+    * @param id image ID
+    * @param image image pixmap
     */
-    void imageReceived(const QUrl &url, const QPixmap &image);
+    void imageReceived(const QString &id, const QPixmap &image);
 
 /*******************************************************************************
  * SIGNALS
  ******************************************************************************/
-
 signals:
-
     /**
     * @brief Signals error
     *
+    * @param context error context
     * @param error error code
     */
-    void error(const int error);
+    void error(const int context, const int error);
 
     /**
     * @brief Signal for image fetching
     *
+    * @param id Image id
     * @param url Image url
     */
-    void fetchImage(const QUrl &url);
+    void fetchImage(const QString &id, const QUrl &url);
+
+    /**
+    * @brief Signals when user's/friend's image is downloaded
+    *
+    * @param user Instance of user/friend
+    */
+    void imageReady(User *user);
+
+    /**
+    * @brief Signals when image is downloaded
+    *
+    * @param id image ID
+    * @param image image pixmap
+    */
+    void imageReady(const QString &id, const QPixmap &image);
+
+    /**
+    * @brief Signal when fetchPeopleWithSimilarInterest request is finished
+    *
+    * @param interestingPeople list of interesting people
+    */
+    void interestingPeopleReceived(QList<User> &interestingPeople);
+
+    /**
+    * @brief Signal when fetchMessages request is finished
+    *
+    * @param messages list of messages sent to user
+    */
+    void messagesReceived(QList<Message> &messages);
 
     /**
     * @brief Signals when address data is retrieved
@@ -224,25 +315,17 @@ signals:
 /*******************************************************************************
  * DATA MEMBERS
  ******************************************************************************/
-
 private:
-
-    int m_nbrOfImages;      ///< Indicates number of friends whose images has been downloaded
-    int m_visited;          ///< Indicates number of friends with images
-
     bool m_defaultImage;    ///< Indicates if some of the friends/user doesn't have a image
 
     QList<QNetworkReply *> m_currentRequests;   ///< List of current http requests
     QList<User *> m_friendsList;                ///< List of friends(User)
 
+    Database *m_database;                       ///< Instance of the database
     NetworkAccessManager *m_networkManager;    ///< Pointer to QNetworkAccessManager
-
     FacebookCredentials m_credentials;          ///< handle for FacebookCredentials
     ImageFetcher *m_imageFetcher;               ///< Instance of the image fetcher
     User *m_user;                               ///< Pointer to User
-
-
-
 };
 
 #endif // SITUARESERVICE_H