2 Situare - A location system for Facebook
3 Copyright (C) 2010 Ixonos Plc. Authors:
5 Henri Lampela - henri.lampela@ixonos.com
7 Situare is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License
9 version 2 as published by the Free Software Foundation.
11 Situare is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with Situare; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
23 #ifndef SITUARESERVICE_H
24 #define SITUARESERVICE_H
27 #include "../facebookservice/facebookcredentials.h"
28 #include "../user/user.h"
29 #include "imagefetcher.h"
31 class NetworkAccessManager;
33 class QNetworkRequest;
38 * @brief SituareService class for communicating with Situare server
40 * @author Henri Lampela
41 * @class SituareService situareservice.h "situareservice/situareservice.h"
43 class SituareService : public QObject
50 * @brief Default constructor
52 * @param parent instance of parent
54 SituareService(QObject *parent = 0);
62 /*******************************************************************************
63 * MEMBER FUNCTIONS AND SLOTS
64 ******************************************************************************/
67 * @brief Retrieves location user and friends information from Situare server
70 void fetchLocations();
73 * @brief Translates coordinates to street address via Situare server
75 * @param coordinates coordinates to be translated
77 void reverseGeo(const GeoCoordinate &coordinates);
80 * @brief Updates location to the Situare server
82 * @param coordinates current cordinates
83 * @param status message
84 * @param publish publish location on Facebook wall
86 void updateLocation(const GeoCoordinate &coordinates, const QString &status, const bool &publish);
89 * @brief Updates tags to the Situare server
91 * CURRENTLY TAGS ARE UPDATED TO THE LOCAL DATABASE, NOT SITUARE SERVER
92 * @param tags list of user's tags
94 void updateTags(const QStringList &tags);
99 * @brief Public slot, to clear user data
102 void clearUserData();
105 * @brief Public slot, which indicates when facebook credentials are ready
107 * @param credentials New credentials
109 void credentialsReady(const FacebookCredentials &credentials);
112 * @brief Public slot, which indicates when http request has been completed
114 * @param reply storage for http reply
116 void requestFinished(QNetworkReply *reply);
121 * @brief Requests ImageFetcher if user/friend has a profile image
122 * uses members: m_user and m_friendsList
124 * @param imageUrlList list of image urls
126 void addProfileImages(const QList<QUrl> &imageUrlList);
129 * @brief Forms a http cookie
131 * @param apiKeyValue application key
132 * @param expiresValue session expire date&time from Facebook
133 * @param userValue user id from Facebook
134 * @param sessionKeyValue session key from Facebook
135 * @param sessionSecretValue session secret from Facebook
136 * @param signatureValue md5 generated signature
137 * @param localeValue used locale
138 * @return QString formed cookie
140 QString formCookie(const QString &apiKeyValue, QString expiresValue, QString userValue,
141 QString sessionKeyValue, QString sessionSecretValue,
142 const QString &signatureValue, const QString &localeValue);
145 * @brief Forms a http url
147 * @param baseUrl Server url
148 * @param phpScript Server script
149 * @param urlParameters optional parameters for url
150 * @return QUrl formed url
152 QUrl formUrl(const QString &baseUrl, const QString &phpScript,
153 QString urlParameters = QString());
156 * @brief Forms url parameters
158 * @param coordinates current coordinates
159 * @param status optional status message
160 * @param publish optional publish location on Facebook wall
163 QString formUrlParameters(const GeoCoordinate &coordinates, QString status = QString(),
164 bool publish = false);
167 * @brief Temporary method to get tags.
169 * Tags are fetch from local database instead of Situare server.
171 * @return QStringList list of tags
173 QStringList getTags(const QString &userId);
176 * @brief Parses user and friend data from JSON string
178 * @param jsonReply JSON string
180 void parseUserData(const QByteArray &jsonReply);
183 * @brief Sends http request
185 * @param url destination
186 * @param cookieType type of the cookie
187 * @param cookie http cookie
189 void sendRequest(const QUrl &url, const QString &cookieType, const QString &cookie);
194 * @brief Slot for received images
196 * @param url Image url
197 * @param image Received image
199 void imageReceived(const QUrl &url, const QPixmap &image);
201 /*******************************************************************************
203 ******************************************************************************/
208 * @brief Signals error
210 * @param context error context
211 * @param error error code
213 void error(const int context, const int error);
216 * @brief Signal for image fetching
218 * @param url Image url
220 void fetchImage(const QUrl &url);
223 * @brief Signals when user's/friend's image is downloaded
225 * @param user Instance of user/friend
227 void imageReady(User *user);
230 * @brief Signals when address data is retrieved
232 * @param address Street address
234 void reverseGeoReady(const QString &address);
237 * @brief Signals when updateLocation request finished successfully
240 void updateWasSuccessful();
243 * @brief Signals when user data is retrieved
245 * @param user instance of user
246 * @param friendList list of friends
248 void userDataChanged(User *user, QList<User *> &friendList);
250 /*******************************************************************************
252 ******************************************************************************/
256 bool m_defaultImage; ///< Indicates if some of the friends/user doesn't have a image
258 QList<QNetworkReply *> m_currentRequests; ///< List of current http requests
259 QList<User *> m_friendsList; ///< List of friends(User)
261 NetworkAccessManager *m_networkManager; ///< Pointer to QNetworkAccessManager
263 FacebookCredentials m_credentials; ///< handle for FacebookCredentials
264 ImageFetcher *m_imageFetcher; ///< Instance of the image fetcher
265 User *m_user; ///< Pointer to User
268 #endif // SITUARESERVICE_H