Merge branch 'master' into login_browser
[situare] / src / situareservice / situareservice.cpp
index 624838c..87847c4 100644 (file)
    USA.
 */
 
-#include "parser.h"
+#include <qjson/parser.h>
 
-#include <QtAlgorithms>
 #include <QDebug>
 #include <QNetworkReply>
 #include <QPixmap>
 #include <QStringList>
+#include <QtAlgorithms>
 #include <QtGlobal>
 
 #include "error.h"
@@ -81,7 +81,7 @@ void SituareService::appendAccessToken(QString &requestUrl)
     qWarning() << __PRETTY_FUNCTION__;
 
 //    requestUrl.append("access_token=");
-    requestUrl.append(m_accessToken);
+    requestUrl.append(m_session);
 
 //    qWarning() << __PRETTY_FUNCTION__ << "request url with parameters and access token:" << requestUrl;
 }
@@ -90,10 +90,17 @@ void SituareService::buildRequest(const QString &script, const QHash<QString, QS
 {
     qWarning() << __PRETTY_FUNCTION__;
 
+    const QString PARAMETER_KEY_API = "api";
+    const QString PARAMETER_VALUE_API = "2.0";
+
     QString url = SITUARE_URL;
     url.append(script);
     url.append("?");
 
+    // append default api version parameter if not yet specified
+    if (!parameters.contains(PARAMETER_KEY_API))
+        url.append(PARAMETER_KEY_API + "=" + PARAMETER_VALUE_API + "&");
+
     // append parameters
     if (!parameters.isEmpty()) {
         QHash<QString, QString>::const_iterator i = parameters.constBegin();
@@ -108,7 +115,7 @@ void SituareService::buildRequest(const QString &script, const QHash<QString, QS
 
 //    qWarning() << __PRETTY_FUNCTION__ << "request url with parameters:" << url;
 
-    if (!m_accessToken.isEmpty()) {
+    if (!m_session.isEmpty()) {
         appendAccessToken(url);
         sendRequest(url);
     } else {
@@ -131,24 +138,21 @@ void SituareService::clearUserData()
     emit userDataChanged(m_user, m_friendsList);
 }
 
-void SituareService::credentialsReady(const FacebookCredentials &credentials)
+QString SituareService::degreesToString(double degrees)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    m_credentials = credentials;
+    // one scene pixel is about 5.4e-6 degrees, the integer part is max three digits and one
+    // additional digit is added for maximum precision
+    const int PRECISION = 10;
+
+    return QString::number(degrees, 'f', PRECISION);
 }
 
 void SituareService::fetchLocations()
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-//    QString cookie = formCookie(API_KEY, m_credentials.expires(), m_credentials.userID(),
-//                                m_credentials.sessionKey(), m_credentials.sessionSecret(),
-//                                m_credentials.sig(), EN_LOCALE);
-
-//    QUrl url = formUrl(SITUARE_URL, GET_LOCATIONS);
-//    sendRequest(url, COOKIE, cookie);
-
     QHash<QString, QString> parameters;
     parameters.insert("extra_user_data", NORMAL_SIZE_PROFILE_IMAGE);
 
@@ -304,6 +308,8 @@ void SituareService::parseUserData(const QByteArray &jsonReply)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
+    qWarning() << __PRETTY_FUNCTION__ << "Server reply:" << jsonReply;
+
     m_defaultImage = false;
 
     QJson::Parser parser;
@@ -508,15 +514,12 @@ void SituareService::reverseGeo(const GeoCoordinate &coordinates)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    QString cookie = formCookie(API_KEY, m_credentials.expires(),m_credentials.userID(),
-                                m_credentials.sessionKey(), m_credentials.sessionSecret(),
-                                m_credentials.sig(), EN_LOCALE);
-
-    QString urlParameters = formUrlParameters(coordinates);
-    urlParameters.append(JSON_FORMAT);
-    QUrl url = formUrl(SITUARE_URL, REVERSE_GEO, urlParameters);
+    QHash<QString, QString> parameters;
+    parameters.insert("lat", degreesToString(coordinates.latitude()));
+    parameters.insert("lon", degreesToString(coordinates.longitude()));
+    parameters.insert("format", "json");
 
-    sendRequest(url, COOKIE, cookie);
+    buildRequest(REVERSE_GEO, parameters);
 }
 
 void SituareService::sendRequest(const QUrl &url, const QString &cookieType, const QString &cookie)
@@ -536,7 +539,7 @@ void SituareService::sendRequest(const QUrl &url, const QString &cookieType, con
 
 void SituareService::sendRequest(const QString &requestUrl)
 {
-    qWarning() << __PRETTY_FUNCTION__ << requestUrl;
+    qWarning() << __PRETTY_FUNCTION__ << "requestUrl" << requestUrl;
 
     // make and send the request
     QNetworkRequest request;
@@ -546,11 +549,11 @@ void SituareService::sendRequest(const QString &requestUrl)
     m_currentRequests.append(reply);
 }
 
-void SituareService::updateAccessToken(const QString &accessToken)
+void SituareService::updateSession(const QString &session)
 {
     qWarning() << __PRETTY_FUNCTION__;
 
-    m_accessToken = accessToken;
+    m_session = session;
 
     foreach (QString request, m_requestsWaitingAccessToken) {
         appendAccessToken(request);
@@ -565,12 +568,11 @@ void SituareService::updateLocation(const GeoCoordinate &coordinates, const QStr
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    QString urlParameters = formUrlParameters(coordinates, status, publish);
-    QUrl url = formUrl(SITUARE_URL, UPDATE_LOCATION, urlParameters);
-
-    QString cookie = formCookie(API_KEY, m_credentials.expires(), m_credentials.userID(),
-                                m_credentials.sessionKey(), m_credentials.sessionSecret(),
-                                m_credentials.sig(), EN_LOCALE);
+    QHash<QString, QString> parameters;
+    parameters.insert("lat", degreesToString(coordinates.latitude()));
+    parameters.insert("lon", degreesToString(coordinates.longitude()));
+    parameters.insert("publish", publish ? "true" : "false");
+    parameters.insert("data", status); ///< @todo if !empty ???
 
-    sendRequest(url, COOKIE, cookie);
+    buildRequest(UPDATE_LOCATION, parameters);
 }