Description: This is the Situare client for Maemo
This application is done with Qt, requires Qt4.6.2 libraries
XB-Maemo-Icon-26:
- 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
- TkSuQmCC
+ iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAA3X
+ AAAN1wFCKJt4AAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNn
+ VFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8ig
+ iAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfA
+ CAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAH
+ vgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCd
+ mCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7
+ AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7
+ AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkX
+ KxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G
+ /yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUA
+ oOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7i
+ JIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5E
+ mozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcA
+ APK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCB
+ KrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv
+ 1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggX
+ mYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyG
+ vEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+
+ Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXA
+ CTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIx
+ h1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBoj
+ k8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU0
+ 5QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgX
+ aPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+Y
+ TKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV
+ 81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkG
+ WcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2q
+ qaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxr
+ qpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acK
+ pxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VH
+ DFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYP
+ jGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x
+ 1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l
+ 1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6T
+ vZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPj
+ thPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWd
+ m7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+B
+ Z7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nv
+ nl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5
+ QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeG
+ P45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8Yu
+ ZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxap
+ LhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgq
+ TXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqoh
+ TZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdl
+ V2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxx
+ edsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWF
+ fevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavE
+ uWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/
+ PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttV
+ AVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRS
+ j9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92
+ HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLT
+ k2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy
+ 2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L15
+ 8Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfV
+ P1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L9
+ 6fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bC
+ xh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz
+ 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
+ ====
--- /dev/null
+<RCC>
+ <qresource prefix="/">
+ <file>res/images/arrow_left.png</file>
+ <file>res/images/arrow_right.png</file>
+ <file>res/images/clock_small.png</file>
+ <file>res/images/compas_small.png</file>
+ <file>res/images/facebook_user_64.png</file>
+ <file>res/images/list_small.png</file>
+ <file>res/images/reload_icon.png</file>
+ <file>res/images/sendPosition_icon.png</file>
+ </qresource>
+</RCC>
// Situare PHP scripts
const QString UPDATE_LOCATION = "updateLocation.php";
const QString REVERSE_GEO = "reversegeo.php";
+const QString GET_LOCATIONS = "getLocations.php";
// Cookies
const QString COOKIE = "Cookie";
const QString EQUAL_MARK = "=";
const QString UNDERLINE_MARK = "_";
const QString BREAK_MARK = ";";
+const QString OPENING_BRACE_MARK = "{";
// Coordinates
const QString LATITUDE = "lat";
#include "situareservice.h"
#include "situarecommon.h"
#include "../cookiehandler/cookiehandler.h"
+#include "parser.h"
SituareService::SituareService(QObject *parent, QNetworkAccessManager *manager)
: QObject(parent), m_networkManager(manager)
delete m_networkManager;
}
-void SituareService::updateLocation(const QPointF &coordinates, const QString &status,
- const bool &publish)
+void SituareService::fetchLocations()
{
qDebug() << __PRETTY_FUNCTION__;
m_credentials.sessionKey(), m_credentials.sessionSecret(),
m_credentials.sig(), EN_LOCALE);
-
- QString publishValue;
- if(publish) {
- publishValue = PUBLISH_TRUE;
- }
- else {
- publishValue = PUBLISH_FALSE;
- }
- QString urlParameters = formUrlParameters(coordinates, status, publishValue);
- QUrl url = formUrl(SITUARE_URL, UPDATE_LOCATION, urlParameters);
+ QUrl url = formUrl(SITUARE_URL, GET_LOCATIONS);
sendRequest(url, COOKIE, cookie);
}
sendRequest(url, COOKIE, cookie);
}
+void SituareService::updateLocation(const QPointF &coordinates, const QString &status,
+ const bool &publish)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ CookieHandler cookieHandler;
+
+ QString cookie = cookieHandler.formCookie(API_KEY, m_credentials.expires(), m_credentials.userID(),
+ m_credentials.sessionKey(), m_credentials.sessionSecret(),
+ m_credentials.sig(), EN_LOCALE);
+
+
+ QString publishValue;
+ if(publish) {
+ publishValue = PUBLISH_TRUE;
+ }
+ else {
+ publishValue = PUBLISH_FALSE;
+ }
+ QString urlParameters = formUrlParameters(coordinates, status, publishValue);
+ QUrl url = formUrl(SITUARE_URL, UPDATE_LOCATION, urlParameters);
+
+ sendRequest(url, COOKIE, cookie);
+}
+
QUrl SituareService::formUrl(const QString &baseUrl, const QString &phpScript, QString urlParameters)
{
qDebug() << __PRETTY_FUNCTION__;
// ToDo: signal UI?
emit error(replyArray);
}
+ else if(replyArray.startsWith(OPENING_BRACE_MARK.toAscii())) {
+ qDebug() << "JSON string";
+ parseUserData(replyArray);
+ }
else {
// no error -> update was successful
// ToDo: signal UI?
qDebug() << __PRETTY_FUNCTION__;
m_credentials = m_facebookAuthentication.loginCredentials();
}
+
+void SituareService::parseUserData(const QByteArray &jsonReply)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ QJson::Parser parser;
+ bool ok;
+
+ QVariantMap result = parser.parse (jsonReply, &ok).toMap();
+ if (!ok) {
+
+ qFatal("An error occurred during parsing");
+ exit (1);
+ }
+
+ QList<User *> friendsList;
+
+ QVariant userVariant = result.value("user");
+ QMap<QString, QVariant> userMap = userVariant.toMap();
+
+ QPointF coordinates(userMap["longitude"].toReal(), userMap["latitude"].toReal());
+
+ QUrl imageUrl = userMap["profile_pic"].toUrl();
+
+ User user = User(userMap["address"].toString(), coordinates, userMap["name"].toString(),
+ userMap["note"].toString(), imageUrl, userMap["timestamp"].toString(),
+ true, userMap["uid"].toString());
+
+ foreach (QVariant friendsVariant, result["friends"].toList()) {
+ QMap<QString, QVariant> friendMap = friendsVariant.toMap();
+ QVariant distance = friendMap["distance"];
+ QMap<QString, QVariant> distanceMap = distance.toMap();
+
+ QPointF coordinates(friendMap["longitude"].toReal(), friendMap["latitude"].toReal());
+
+ QUrl imageUrl = friendMap["profile_pic"].toUrl();
+
+ User *user = new User(friendMap["address"].toString(), coordinates, friendMap["name"].toString(),
+ friendMap["note"].toString(), imageUrl, friendMap["timestamp"].toString(),
+ false, friendMap["uid"].toString(), distanceMap["units"].toString(),
+ distanceMap["value"].toDouble());
+
+ friendsList.append(user);
+ }
+ emit userDataChanged(user, friendsList);
+}
#define SITUARESERVICE_H
#include <QObject>
-#include <QPointF>
-#include <QNetworkAccessManager>
-#include <QNetworkRequest>
-#include <QNetworkReply>
-#include <QUrl>
#include "../facebookservice/facebookauthentication.h"
#include "../facebookservice/facebookcredentials.h"
+#include "../user/user.h"
+
+class QNetworkAccessManager;
+class QNetworkReply;
+class QNetworkRequest;
+class QPointF;
+class QUrl;
/**
* @brief SituareService class for communicating with Situare server
*/
~SituareService();
+ /*******************************************************************************
+ * MEMBER FUNCTIONS AND SLOTS
+ ******************************************************************************/
+
/**
- * @brief Updates location to the Situare server
+ * @brief Retrieves location user and friends information from Situare server
*
- * @param coordinates current cordinates
- * @param status message
- * @param publish publish location on Facebook wall (true/false)
*/
- void updateLocation(const QPointF &coordinates, const QString &status, const bool &publish);
+ void fetchLocations();
/**
* @brief Translates coordinates to street address via Situare server
*/
void reverseGeo(const QPointF &coordinates);
+ /**
+ * @brief Updates location to the Situare server
+ *
+ * @param coordinates current cordinates
+ * @param status message
+ * @param publish publish location on Facebook wall (true/false)
+ */
+ void updateLocation(const QPointF &coordinates, const QString &status, const bool &publish);
+
public slots:
/**
*/
void requestFinished(QNetworkReply *reply);
-
/**
* @brief Public slot, which indicates when facebook credentials are ready
*
QString formUrlParameters(const QPointF &coordinates, QString status = 0, QString publish = 0);
/**
+ * @brief Parses user and friend data from JSON string
+ *
+ * @param jsonReply JSON string
+ */
+ void parseUserData(const QByteArray &jsonReply);
+
+ /**
* @brief Sends http request
*
* @param url destination
*/
void sendRequest(const QUrl &url, const QString &cookieType, const QString &cookie);
+ /*******************************************************************************
+ * SIGNALS
+ ******************************************************************************/
+
signals:
/**
*/
void error(const QString &error);
+
+ /**
+ * @brief Signals when user data is retrieved
+ *
+ * @param user instance of user
+ * @param friendList list of friends
+ */
+ void userDataChanged(User &user, QList<User *> &friendList);
+
+ /*******************************************************************************
+ * DATA MEMBERS
+ ******************************************************************************/
+
private:
FacebookCredentials m_credentials; ///< handle for FacebookCredentials
# -------------------------------------------------
TARGET = ../situare
TEMPLATE = app
-RESOURCES += images.qrc
+INCLUDEPATH += "/usr/include/qjson"
+LIBS += "-lqjson"
+RESOURCES += ../images.qrc
SOURCES += main.cpp \
ui/mainwindow.cpp \
ui/mapviewscreen.cpp \
ui/friendlistview.cpp \
ui/friendlistitemdelegate.cpp \
ui/friendlistitem.cpp \
- ui/friendlistmodel.cpp
+ ui/friendlistmodel.cpp \
+ user/user.cpp
HEADERS += ui/mainwindow.h \
ui/mapviewscreen.h \
ui/listviewscreen.h \
ui/friendlistview.h \
ui/friendlistitemdelegate.h \
ui/friendlistitem.h \
- ui/friendlistmodel.h
+ ui/friendlistmodel.h \
+ user/user.h
+
QT += network \
webkit
message(OpenGL built in)
message(Make sure you have OpenGL development headers installed)
message(install headers with: sudo apt-get install libgl-dev libglu-dev)
+
+ message(QJson built in)
+ message(Make sure you have QJson development headers installed)
+ message(install headers with: sudo apt-get install libqjson-dev)
+}
+
+maemo5 {
+ message(QJson built in)
+ message(Make sure you have QJson development headers installed)
+ message(add: deb http://repository.maemo.org/extras-devel fremantle free non-free)
+ message(and deb-src http://repository.maemo.org/extras-devel fremantle free non-free)
+ message(to scratchbox's sources.list in /etc/apt)
+ message(run: apt-get update)
+ message(install headers with: apt-get install libqjson-dev)
}
# -----------------------------------------------------------------
desktop.path = $$DATADIR/applications/hildon
desktop.files += situare.desktop
INSTALLS += desktop
- icon26.path = $$DATADIR/icons/hicolor/26x26/apps
- icon26.files += situare.png
- INSTALLS += icon26
- icon40.path = $$DATADIR/icons/hicolor/40x40/apps
- icon40.files += situare_40x40.png
- INSTALLS += icon40
+ icon48.path = $$DATADIR/icons/hicolor/48x48/apps
+ icon48.files += ../res/icon/48x48/situare.png
+ INSTALLS += icon48
icon64.path = $$DATADIR/icons/hicolor/64x64/apps
- icon64.files += situare_64x64.png
+ icon64.files += ../res/icon/64x64/situare.png
INSTALLS += icon64
target.path = $$BINDIR
INSTALLS += target
QToolButton *updateFriendsButton = new QToolButton;
QToolButton *updateStatusMessageButton = new QToolButton;
- updateFriendsButton->setIcon(QIcon(QPixmap(":/resources/reload_icon.png")));
- updateStatusMessageButton->setIcon(QIcon(QPixmap(":/resources/sendPosition_icon.png")));
+ updateFriendsButton->setIcon(QIcon(QPixmap(":/res/images/reload_icon.png")));
+ updateStatusMessageButton->setIcon(QIcon(QPixmap(":/res/images/sendPosition_icon.png")));
- m_clockLabel->setPixmap(QPixmap(":/resources/clock_small.png"));
- m_envelopeLabel->setPixmap(QPixmap(":/resources/list_small.png"));
- m_compassLabel->setPixmap(QPixmap(":/resources/compas_small.png"));
+ m_clockLabel->setPixmap(QPixmap(":/res/images/clock_small.png"));
+ m_envelopeLabel->setPixmap(QPixmap(":/res/images/list_small.png"));
+ m_compassLabel->setPixmap(QPixmap(":/res/images/compas_small.png"));
m_layout->addWidget(m_userPicture,0,0,4,1);
m_layout->addWidget(m_userNameLabel,0,2,1,2);
m_layout->addWidget(m_clockLabel,1,1,1,1);
//DEBUG
- m_arrowbutton = new Pixmap(QPixmap(":/resources/arrow_right.png"));
+ m_arrowbutton = new Pixmap(QPixmap(":/res/images/arrow_right.png"));
m_personalInfo = new InfoTab;
- m_personalInfo->setAvatar(QPixmap(":/resources/facebook_user_64.png"));
+ m_personalInfo->setAvatar(QPixmap(":/res/images/facebook_user_64.png"));
m_personalInfo->setUserName("Fred Facebook");
m_personalInfo->setMessageText("Hello Maemo Situare !");
m_personalInfo->setTime("1 hour ago");
--- /dev/null
+/*
+ Situare - A location system for Facebook
+ Copyright (C) 2010 Ixonos Plc. Authors:
+
+ Henri Lampela - henri.lampela@ixonos.com
+
+ Situare is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Situare is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Situare; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA.
+*/
+
+#include "user.h"
+
+User::User(QString address, QPointF coordinates, QString name, QString note, QUrl imageUrl,
+ QString timestamp, bool type, QString userId, QString units, double value)
+ : m_address(address)
+ , m_coordinates(coordinates)
+ , m_name(name)
+ , m_note(note)
+ , m_profileImageUrl(imageUrl)
+ , m_timestamp(timestamp)
+ , m_type(type)
+ , m_units(units)
+ , m_userId(userId)
+ , m_value(value)
+{
+
+}
+
+void User::setAddress(const QString &address)
+{
+ m_address = address;
+}
+
+void User::setCoordinates(const QPointF &coordinates)
+{
+ m_coordinates = coordinates;
+}
+
+void User::setDistance(const double &value, const QString &units)
+{
+ m_value = value;
+ m_units = units;
+}
+
+void User::setNote(const QString ¬e)
+{
+ m_note = note;
+}
+
+void User::setProfileImageUrl(const QUrl &imageUrl)
+{
+ m_profileImageUrl = imageUrl;
+}
+
+void User::setTimestamp(const QString ×tamp)
+{
+ m_timestamp = timestamp;
+}
+
+QString User::address() const
+{
+ return m_address;
+}
+
+QPointF User::coordinates() const
+{
+ return m_coordinates;
+}
+
+void User::distance(double &value, QString &units) const
+{
+ value = m_value;
+ units = m_units;
+}
+
+QString User::name() const
+{
+ return m_name;
+}
+
+QString User::note() const
+{
+ return m_note;
+}
+
+QUrl User::profileImageUrl() const
+{
+ return m_profileImageUrl;
+}
+
+QString User::timestamp() const
+{
+ return m_timestamp;
+}
+
+bool User::type() const
+{
+ return m_type;
+}
+
+QString User::userId() const
+{
+ return m_userId;
+}
--- /dev/null
+/*
+ Situare - A location system for Facebook
+ Copyright (C) 2010 Ixonos Plc. Authors:
+
+ Henri Lampela - henri.lampela@ixonos.com
+
+ Situare is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Situare is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Situare; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA.
+*/
+
+#ifndef USER_H
+#define USER_H
+
+#include <QPointF>
+#include <QString>
+#include <QUrl>
+
+/**
+* @brief Class to store user information (applies to friends also)
+*
+* @author Henri Lampela
+* @class User user.h "user/user.h"
+*/
+class User
+{
+public:
+
+ /**
+ * @brief Default constructor, initializes member data
+ *
+ */
+ User(const QString address, const QPointF coordinates, const QString name, const QString note,
+ const QUrl imageUrl, const QString timestamp, const bool type, const QString userId,
+ const QString units = 0, const double value = 0);
+
+ /*******************************************************************************
+ * MEMBER FUNCTIONS AND SLOTS
+ ******************************************************************************/
+
+ /**
+ * @brief Set address
+ *
+ * @param address street address
+ */
+ void setAddress(const QString &address);
+
+ /**
+ * @brief Set coordinates ( x = lon, y = lat )
+ *
+ * @param coordinates coordinates
+ */
+ void setCoordinates(const QPointF &coordinates);
+
+ /**
+ * @brief Set distance
+ *
+ * @param value distance
+ * @param units unit type
+ */
+ void setDistance(const double &value, const QString &units);
+
+ /**
+ * @brief Set note
+ *
+ * @param note note/status message
+ */
+ void setNote(const QString ¬e);
+
+ /**
+ * @brief Set download address for profile image
+ *
+ * @param imageUrl image url
+ */
+ void setProfileImageUrl(const QUrl &imageUrl);
+
+ /**
+ * @brief Set timestamp for last status update, timestamp is in literal mode
+ *
+ * @param timestamp timestamp
+ */
+ void setTimestamp(const QString ×tamp);
+
+ /**
+ * @brief Get address
+ *
+ * @return QString address
+ */
+ QString address() const;
+
+ /**
+ * @brief Get coordinates
+ *
+ * @return QPointF coordinates
+ */
+ QPointF coordinates() const;
+
+ /**
+ * @brief Get distance and units
+ *
+ * @param value distance
+ * @param units unit type
+ */
+ void distance(double &value, QString &units) const;
+
+ /**
+ * @brief Get name
+ *
+ * @return QString profile name
+ */
+ QString name() const;
+
+ /**
+ * @brief Get note/status message
+ *
+ * @return QString note
+ */
+ QString note() const;
+
+ /**
+ * @brief Get download address for profile image
+ *
+ * @return QString url
+ */
+ QUrl profileImageUrl() const;
+
+ /**
+ * @brief Get timestamp of last status update
+ *
+ * @return QString timestamp
+ */
+ QString timestamp() const;
+
+ /**
+ * @brief Get user type
+ *
+ * @return bool user type (true = user, false = friend)
+ */
+ bool type() const;
+
+ /**
+ * @brief Get userId
+ *
+ * @return QString userId
+ */
+ QString userId() const;
+
+ /*******************************************************************************
+ * DATA MEMBERS
+ ******************************************************************************/
+
+private:
+ QString m_address; ///< placeholder for address information
+ QPointF m_coordinates; ///< placeholder for coordinates
+ QString m_name; ///< placeholder for name
+ QString m_note; ///< placeholder for note
+ QUrl m_profileImageUrl; ///< placeholder for image url
+ QString m_timestamp; ///< placeholer for timestamp
+ bool m_type; ///< placeholder for user type
+ QString m_units; ///< placeholder for distance unit type
+ QString m_userId; ///< placeholder for userId
+ double m_value; ///< placeholder for distance value
+};
+
+
+#endif // USER_H
--- /dev/null
+/*
+ Situare - A location system for Facebook
+ 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
+ version 2 as published by the Free Software Foundation.
+
+ Situare is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Situare; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA.
+*/
+
+#include <QDebug>
+#include <QBuffer>
+#include "networkaccessmanagermock.h"
+
+NetworkAccessManagerMock::NetworkAccessManagerMock(QNetworkAccessManager *manager, QObject *parent)
+ : QNetworkAccessManager(parent)
+ , mode(0)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+}
+
+NetworkReplyMock *NetworkAccessManagerMock::createRequest(Operation op, const QNetworkRequest &request,
+ QIODevice *outgoingData)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ reply = new NetworkReplyMock(this);
+ this->request = request;
+
+ switch (this->mode) {
+
+ case NetworkAccessManagerMock::CORRECT:
+ QTimer::singleShot(0, this, SLOT(generateCorrectReply()));
+ break;
+ case NetworkAccessManagerMock::INCORRECT:
+ QTimer::singleShot(0, this, SLOT(generateError()));
+ break;
+ case NetworkAccessManagerMock::DELAYED_CORRECT:
+ QTimer::singleShot(0, this, SLOT(generateDelayedCorrectReply()));
+ break;
+ default:
+ QTimer::singleShot(0, this, SLOT(generateCorrectReply()));
+ break;
+ }
+ return reply;
+}
+
+NetworkAccessManagerMock::~NetworkAccessManagerMock()
+{
+ delete reply;
+}
+
+NetworkReplyMock *NetworkAccessManagerMock::get(const QNetworkRequest &request)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+ this->request = request;
+
+ return reply;
+}
+
+void NetworkAccessManagerMock::setMode(int mode)
+{
+ this->mode = mode;
+}
+
+void NetworkAccessManagerMock::generateError()
+{
+ qDebug() << __PRETTY_FUNCTION__;
+ reply->setUrl(request.url());
+ reply->setError(QNetworkReply::HostNotFoundError, "Host not found");
+ emit QNetworkAccessManager::finished(reply);
+}
+
+void NetworkAccessManagerMock::generateCorrectReply()
+{
+ qDebug() << __PRETTY_FUNCTION__;
+ reply->setUrl(request.url());
+ reply->setError(QNetworkReply::NoError, "No error");
+// QImage image;
+// if (!image.load(":testTile.png", 0)) {
+// qDebug() << "could not load image";
+// image = QImage();
+// }
+// else
+// qDebug() << "image loaded";
+//
+// QByteArray array;
+// QBuffer buffer(&array);
+// buffer.open(QBuffer::WriteOnly);
+// if (image.save(&buffer, "PNG"))
+// qDebug() << "image saved";
+// buffer.close();
+// reply->setData(array);
+ emit QNetworkAccessManager::finished(reply);
+}
+
+void NetworkAccessManagerMock::generateDelayedCorrectReply()
+{
+ qDebug() << __PRETTY_FUNCTION__;
+ QTimer::singleShot(4000, this, SLOT(generateCorrectReply()));
+}
--- /dev/null
+/*
+ Situare - A location system for Facebook
+ 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
+ version 2 as published by the Free Software Foundation.
+
+ Situare is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Situare; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA.
+*/
+
+#ifndef NETWORKACCESSMANAGERMOCK_H
+#define NETWORKACCESSMANAGERMOCK_H
+
+#include <QNetworkAccessManager>
+#include <QNetworkRequest>
+#include <QTimer>
+#include "networkreplymock.h"
+
+
+class NetworkAccessManagerMock : public QNetworkAccessManager
+{
+ Q_OBJECT
+public:
+ NetworkAccessManagerMock(QNetworkAccessManager *manager = 0, QObject *parent = 0);
+
+ ~NetworkAccessManagerMock();
+
+ NetworkReplyMock *get(const QNetworkRequest &request);
+
+ void setMode(int mode);
+
+
+ enum {CORRECT, INCORRECT, DELAYED_CORRECT};
+
+protected:
+ NetworkReplyMock *createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData);
+
+signals:
+ void finished(NetworkReplyMock *reply);
+
+ private slots:
+ void generateError();
+ void generateCorrectReply();
+ void generateDelayedCorrectReply();
+
+private:
+ NetworkReplyMock *reply;
+ QNetworkRequest request;
+ int mode;
+};
+
+#endif // NETWORKACCESSMANAGERMOCK_H
--- /dev/null
+/*
+ Situare - A location system for Facebook
+ 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
+ version 2 as published by the Free Software Foundation.
+
+ Situare is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Situare; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA.
+*/
+
+#include <QNetworkRequest>
+#include <QDebug>
+#include "networkreplymock.h"
+
+NetworkReplyMock::NetworkReplyMock(QObject *parent)
+ : QNetworkReply(parent)
+ , m_offset(0)
+{
+}
+
+void NetworkReplyMock::setError(NetworkError errorCode, const QString &errorString)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+ QNetworkReply::setError(errorCode, errorString);
+}
+
+
+qint64 NetworkReplyMock::readData(char *data, qint64 maxLen)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+ if (m_offset < m_content.size()) {
+ qint64 number = qMin(maxLen, m_content.size() - m_offset);
+ memcpy(data, m_content.constData() + m_offset, number);
+ m_offset += number;
+ return number;
+ }
+ else {
+ return -1;
+ }
+}
+
+QByteArray NetworkReplyMock::readAll()
+{
+ return m_content;
+}
+
+qint64 NetworkReplyMock::bytesAvailable() const
+{
+ qDebug() << __PRETTY_FUNCTION__;
+ return m_content.size() - m_offset;
+}
+
+void NetworkReplyMock::setUrl(const QUrl &url)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+ QNetworkReply::setUrl(url);
+}
+
+void NetworkReplyMock::abort()
+{
+ qDebug() << __PRETTY_FUNCTION__;
+}
+
+void NetworkReplyMock::test()
+{
+ qDebug() << __PRETTY_FUNCTION__;
+}
+
+void NetworkReplyMock::setData(const QByteArray &content)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+// setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/png"));
+// setHeader(QNetworkRequest::ContentLengthHeader, QVariant(this->m_content.size()));
+ m_content.append(content);
+ qDebug() << "Content size: " << m_content.size();
+}
--- /dev/null
+/*
+ Situare - A location system for Facebook
+ 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
+ version 2 as published by the Free Software Foundation.
+
+ Situare is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Situare; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA.
+*/
+
+#ifndef NETWORKREPLYMOCK_H
+#define NETWORKREPLYMOCK_H
+
+#include <QNetworkReply>
+#include <QUrl>
+
+
+class NetworkReplyMock : public QNetworkReply
+{
+ Q_OBJECT
+public:
+ NetworkReplyMock(QObject *parent = 0);
+ void abort();
+ qint64 bytesAvailable() const;
+
+ bool isSequential() const
+ {
+ return true;
+ }
+ void setError(NetworkError errorCode, const QString &errorString);
+ void setData(const QByteArray &content);
+ void setUrl(const QUrl &url);
+ void test();
+ QByteArray readAll();
+
+protected:
+ qint64 readData(char *data, qint64 maxlen);
+
+private:
+ QByteArray m_content;
+ qint64 m_offset;
+};
+
+#endif // NETWORKREPLYMOCK_H
--- /dev/null
+ /*
+ Situare - A location system for Facebook
+ Copyright (C) 2010 Ixonos Plc. Authors:
+
+ Henri Lampela - henri.lampela@ixonos.com
+
+ Situare is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Situare is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Situare; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA.
+ */
+
+#include <QtTest/QtTest>
+#include <QtCore>
+//#include <QNetworkAccessManager>
+
+
+#include "../../../src/situareservice/situareservice.h"
+#include "../../../src/situareservice/situarecommon.h"
+#include "../networkaccessmanagermock.h"
+#include "../networkreplymock.h"
+
+class QNetworkAccessManager;
+
+
+class testFetchLocations : public QObject
+{
+ Q_OBJECT
+public:
+ ~testFetchLocations();
+private:
+ SituareService *situare;
+ NetworkAccessManagerMock *managerMock;
+ QList<QNetworkReply *> currentRequests;
+
+private slots:
+
+ //void testIncorrectUrl();
+ //void testCorrectUrl();
+ void testFetchLocationsCase();
+};
+
+testFetchLocations::~testFetchLocations()
+{
+ delete situare;
+ delete managerMock;
+}
+
+
+//void testFetchLocations::testIncorrectUrl()
+//{
+// QNetworkAccessManager *manager = new QNetworkAccessManager();
+// managerMock = new NetworkAccessManagerMock(manager, this);
+// situare = new SituareService(this, manager);
+//
+// managerMock->setMode(NetworkAccessManagerMock::INCORRECT);
+//
+// QSignalSpy receivedErrorSpy(situare, SIGNAL(error(QString)));
+//
+// QVERIFY(receivedErrorSpy.isValid());
+//
+// // incorrect url
+//
+// situare->sendRequest(QUrl("http://client.situare.nett"), COOKIE, QString(""));
+// QTest::qWait(1000);
+// QCOMPARE(receivedErrorSpy.count(), 1);
+//
+// delete manager;
+//}
+
+//void testFetchLocations::testCorrectUrl()
+//{
+// QNetworkAccessManager *manager = new QNetworkAccessManager();
+// managerMock = new NetworkAccessManagerMock(manager, this);
+// situare = new SituareService(this, manager);
+//
+// managerMock->setMode(NetworkAccessManagerMock::CORRECT);
+//
+// QSignalSpy receivedErrorSpy(situare, SIGNAL(error(QString)));
+//
+// QVERIFY(receivedErrorSpy.isValid());
+//
+// QUrl url = QUrl("http://client.situare.net");
+//
+// situare->sendRequest(url, COOKIE, QString(""));
+// QTest::qWait(1000);
+//
+// QCOMPARE(receivedErrorSpy.count(), 0);
+//
+// delete manager;
+//}
+
+void testFetchLocations::testFetchLocationsCase()
+{
+ QNetworkAccessManager *manager = new QNetworkAccessManager();
+ managerMock = new NetworkAccessManagerMock(manager, this);
+ situare = new SituareService(this, manager);
+
+ managerMock->setMode(NetworkAccessManagerMock::CORRECT);
+
+ QSignalSpy receivedErrorSpy(situare, SIGNAL(error(QString)));
+
+ situare->fetchLocations();
+ QTest::qWait(1000);
+
+ QCOMPARE(receivedErrorSpy.count(), 0);
+
+ delete manager;
+}
+
+
+QTEST_MAIN(testFetchLocations)
+#include "testfetchlocations.moc"
--- /dev/null
+######################################################################
+# Automatically generated by qmake (2.01a) Wed Apr 21 10:16:04 2010
+######################################################################
+
+CONFIG += qtestlib
+TEMPLATE = app
+TARGET =
+DEPENDPATH += .
+INCLUDEPATH += .
+
+# Input
+HEADERS += ../../../src/situareservice/situareservice.h \
+ ../../../src/facebookservice/facebookauthentication.h \
+ ../../../src/facebookservice/facebookcredentials.h \
+ ../../../src/situareservice/situarecommon.h \
+ ../../../src/cookiehandler/cookiehandler.h \
+ ../networkaccessmanagermock.h \
+ ../networkreplymock.h
+SOURCES += testfetchlocations.cpp \
+ ../../../src/situareservice/situareservice.cpp \
+ ../../../src/facebookservice/facebookauthentication.cpp \
+ ../../../src/facebookservice/facebookcredentials.cpp \
+ ../../../src/cookiehandler/cookiehandler.cpp \
+ ../networkaccessmanagermock.cpp \
+ ../networkreplymock.cpp
+QT += core \
+ network \
+ webkit
+++ /dev/null
-/*
- Situare - A location system for Facebook
- 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
- version 2 as published by the Free Software Foundation.
-
- Situare is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Situare; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA.
-*/
-
-#include <QDebug>
-#include <QBuffer>
-#include "networkaccessmanagermock.h"
-
-NetworkAccessManagerMock::NetworkAccessManagerMock(QNetworkAccessManager *manager, QObject *parent)
- : QNetworkAccessManager(parent)
- , mode(0)
-{
- qDebug() << __PRETTY_FUNCTION__;
-}
-
-NetworkReplyMock *NetworkAccessManagerMock::createRequest(Operation op, const QNetworkRequest &request,
- QIODevice *outgoingData)
-{
- qDebug() << __PRETTY_FUNCTION__;
-
- reply = new NetworkReplyMock(this);
- this->request = request;
-
- switch (this->mode) {
-
- case NetworkAccessManagerMock::CORRECT:
- QTimer::singleShot(0, this, SLOT(generateCorrectReply()));
- break;
- case NetworkAccessManagerMock::INCORRECT:
- QTimer::singleShot(0, this, SLOT(generateError()));
- break;
- case NetworkAccessManagerMock::DELAYED_CORRECT:
- QTimer::singleShot(0, this, SLOT(generateDelayedCorrectReply()));
- break;
- default:
- QTimer::singleShot(0, this, SLOT(generateCorrectReply()));
- break;
- }
- return reply;
-}
-
-NetworkAccessManagerMock::~NetworkAccessManagerMock()
-{
- delete reply;
-}
-
-NetworkReplyMock *NetworkAccessManagerMock::get(const QNetworkRequest &request)
-{
- qDebug() << __PRETTY_FUNCTION__;
- this->request = request;
-
- return reply;
-}
-
-void NetworkAccessManagerMock::setMode(int mode)
-{
- this->mode = mode;
-}
-
-void NetworkAccessManagerMock::generateError()
-{
- qDebug() << __PRETTY_FUNCTION__;
- reply->setUrl(request.url());
- reply->setError(QNetworkReply::HostNotFoundError, "Host not found");
- emit QNetworkAccessManager::finished(reply);
-}
-
-void NetworkAccessManagerMock::generateCorrectReply()
-{
- qDebug() << __PRETTY_FUNCTION__;
- reply->setUrl(request.url());
- reply->setError(QNetworkReply::NoError, "No error");
-// QImage image;
-// if (!image.load(":testTile.png", 0)) {
-// qDebug() << "could not load image";
-// image = QImage();
-// }
-// else
-// qDebug() << "image loaded";
-//
-// QByteArray array;
-// QBuffer buffer(&array);
-// buffer.open(QBuffer::WriteOnly);
-// if (image.save(&buffer, "PNG"))
-// qDebug() << "image saved";
-// buffer.close();
-// reply->setData(array);
- emit QNetworkAccessManager::finished(reply);
-}
-
-void NetworkAccessManagerMock::generateDelayedCorrectReply()
-{
- qDebug() << __PRETTY_FUNCTION__;
- QTimer::singleShot(4000, this, SLOT(generateCorrectReply()));
-}
+++ /dev/null
-/*
- Situare - A location system for Facebook
- 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
- version 2 as published by the Free Software Foundation.
-
- Situare is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Situare; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA.
-*/
-
-#ifndef NETWORKACCESSMANAGERMOCK_H
-#define NETWORKACCESSMANAGERMOCK_H
-
-#include <QNetworkAccessManager>
-#include <QNetworkRequest>
-#include <QTimer>
-#include "networkreplymock.h"
-
-
-class NetworkAccessManagerMock : public QNetworkAccessManager
-{
- Q_OBJECT
-public:
- NetworkAccessManagerMock(QNetworkAccessManager *manager = 0, QObject *parent = 0);
-
- ~NetworkAccessManagerMock();
-
- NetworkReplyMock *get(const QNetworkRequest &request);
-
- void setMode(int mode);
-
-
- enum {CORRECT, INCORRECT, DELAYED_CORRECT};
-
-protected:
- NetworkReplyMock *createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData);
-
-signals:
- void finished(NetworkReplyMock *reply);
-
- private slots:
- void generateError();
- void generateCorrectReply();
- void generateDelayedCorrectReply();
-
-private:
- NetworkReplyMock *reply;
- QNetworkRequest request;
- int mode;
-};
-
-#endif // NETWORKACCESSMANAGERMOCK_H
+++ /dev/null
-/*
- Situare - A location system for Facebook
- 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
- version 2 as published by the Free Software Foundation.
-
- Situare is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Situare; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA.
-*/
-
-#include <QNetworkRequest>
-#include <QDebug>
-#include "networkreplymock.h"
-
-NetworkReplyMock::NetworkReplyMock(QObject *parent)
- : QNetworkReply(parent)
- , m_offset(0)
-{
-}
-
-void NetworkReplyMock::setError(NetworkError errorCode, const QString &errorString)
-{
- qDebug() << __PRETTY_FUNCTION__;
- QNetworkReply::setError(errorCode, errorString);
-}
-
-
-qint64 NetworkReplyMock::readData(char *data, qint64 maxLen)
-{
- qDebug() << __PRETTY_FUNCTION__;
- if (m_offset < m_content.size()) {
- qint64 number = qMin(maxLen, m_content.size() - m_offset);
- memcpy(data, m_content.constData() + m_offset, number);
- m_offset += number;
- return number;
- }
- else {
- return -1;
- }
-}
-
-QByteArray NetworkReplyMock::readAll()
-{
- return m_content;
-}
-
-qint64 NetworkReplyMock::bytesAvailable() const
-{
- qDebug() << __PRETTY_FUNCTION__;
- return m_content.size() - m_offset;
-}
-
-void NetworkReplyMock::setUrl(const QUrl &url)
-{
- qDebug() << __PRETTY_FUNCTION__;
- QNetworkReply::setUrl(url);
-}
-
-void NetworkReplyMock::abort()
-{
- qDebug() << __PRETTY_FUNCTION__;
-}
-
-void NetworkReplyMock::test()
-{
- qDebug() << __PRETTY_FUNCTION__;
-}
-
-void NetworkReplyMock::setData(const QByteArray &content)
-{
- qDebug() << __PRETTY_FUNCTION__;
-// setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/png"));
-// setHeader(QNetworkRequest::ContentLengthHeader, QVariant(this->m_content.size()));
- m_content.append(content);
- qDebug() << "Content size: " << m_content.size();
-}
+++ /dev/null
-/*
- Situare - A location system for Facebook
- 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
- version 2 as published by the Free Software Foundation.
-
- Situare is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Situare; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA.
-*/
-
-#ifndef NETWORKREPLYMOCK_H
-#define NETWORKREPLYMOCK_H
-
-#include <QNetworkReply>
-#include <QUrl>
-
-
-class NetworkReplyMock : public QNetworkReply
-{
- Q_OBJECT
-public:
- NetworkReplyMock(QObject *parent = 0);
- void abort();
- qint64 bytesAvailable() const;
-
- bool isSequential() const
- {
- return true;
- }
- void setError(NetworkError errorCode, const QString &errorString);
- void setData(const QByteArray &content);
- void setUrl(const QUrl &url);
- void test();
- QByteArray readAll();
-
-protected:
- qint64 readData(char *data, qint64 maxlen);
-
-private:
- QByteArray m_content;
- qint64 m_offset;
-};
-
-#endif // NETWORKREPLYMOCK_H
#include "../../../src/situareservice/situareservice.h"
#include "../../../src/situareservice/situarecommon.h"
-#include "networkaccessmanagermock.h"
-#include "networkreplymock.h"
+#include "../networkaccessmanagermock.h"
+#include "../networkreplymock.h"
class testLocationUpdate : public QObject
--- /dev/null
+ /*
+ Situare - A location system for Facebook
+ Copyright (C) 2010 Ixonos Plc. Authors:
+
+ Henri Lampela - henri.lampela@ixonos.com
+
+ Situare is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Situare is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Situare; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA.
+ */
+
+#include <QtTest/QtTest>
+#include <QtCore>
+#include <QPointer>
+#include <QUrl>
+#include <QDebug>
+
+
+#include "../../src/user/user.h"
+
+
+class TestUser : public QObject
+{
+ Q_OBJECT
+public:
+ TestUser();
+ ~TestUser();
+private:
+ User *user;
+
+private slots:
+
+ void testAddress();
+ void testCoordinates();
+ void testName();
+ void testNote();
+ void testImageUrl();
+ void testTimestamp();
+ void testUserType();
+ void testDistance();
+ void testUserId();
+};
+
+TestUser::TestUser()
+{
+ const QString address = "Kuja 3 A, 90560 Oulu, Finland";
+ const QPointF coordinates(65.3, 25.5);
+ const QString name = "Jukka Kukka";
+ const QString note = "Testing";
+ const QUrl imageUrl = QUrl("http://profile.ak.fbcdn.net/v225/874/99/q100000139211584_3252.jpg");
+ const QString timestamp = "1 minute ago";
+ const bool userType = false;
+ const QString units = "km";
+ const QString userId = "111000222";
+ const double value = 12.1;
+
+ user = new User(address, coordinates, name, note, imageUrl, timestamp, userType, userId, units, value);
+}
+
+TestUser::~TestUser()
+{
+ delete user;
+}
+
+void TestUser::testAddress()
+{
+ QString newValue = "Kalmakuja 6 B, 90650 Oulu, Finland";
+ QString oldValue = user->address();
+
+ qDebug() << oldValue;
+
+ user->setAddress(newValue);
+
+ QString currentValue = user->address();
+
+ qDebug() << currentValue;
+
+ QCOMPARE(currentValue, newValue);
+}
+
+void TestUser::testCoordinates()
+{
+ QPointF oldValue = user->coordinates();
+
+ qDebug() << oldValue;
+
+ QPointF newValue(64.3, 25.8);
+
+ user->setCoordinates(newValue);
+
+ QPointF currentValue = user->coordinates();
+
+ qDebug() << currentValue;
+
+ QCOMPARE(currentValue, newValue);
+}
+
+void TestUser::testName()
+{
+ QString currentValue = user->name();
+
+ qDebug() << currentValue;
+
+ QCOMPARE(currentValue, QString("Jukka Kukka"));
+}
+
+void TestUser::testNote()
+{
+ QString oldValue = user->note();
+
+ qDebug() << oldValue;
+
+ QString newValue = "Still testing";
+
+ user->setNote(newValue);
+
+ QString currentValue = user->note();
+
+ qDebug() << currentValue;
+
+ QCOMPARE(currentValue, newValue);
+}
+
+void TestUser::testImageUrl()
+{
+ QUrl oldValue = user->profileImageUrl();
+
+ qDebug() << oldValue;
+
+ QUrl newValue = QUrl("http://profile.ak.fbcdn.net/v225/874/99/xxxxxxx.jpg");
+
+ user->setProfileImageUrl(newValue);
+
+ QUrl currentValue = user->profileImageUrl();
+
+ qDebug() << currentValue;
+
+ QCOMPARE(currentValue, newValue);
+}
+
+void TestUser::testTimestamp()
+{
+ QString oldValue = user->timestamp();
+
+ qDebug() << oldValue;
+
+ QString newValue = "2 minutes ago";
+
+ user->setTimestamp(newValue);
+
+ QString currentValue = user->timestamp();
+
+ qDebug() << currentValue;
+
+ QCOMPARE(currentValue, newValue);
+}
+
+void TestUser::testUserType()
+{
+ bool currentValue = user->type();
+
+ qDebug() << currentValue;
+
+ QCOMPARE(currentValue, false);
+}
+
+void TestUser::testDistance()
+{
+ QString oldUnitValue;
+ double oldDistanceValue;
+
+ user->distance(oldDistanceValue, oldUnitValue);
+
+ qDebug() << oldDistanceValue << oldUnitValue;
+
+ QString newUnitValue = "miles";
+ double newDistanceValue = 2.13;
+
+ user->setDistance(newDistanceValue, newUnitValue);
+
+ QString currentUnitValue;
+ double currentDistanceValue;
+
+ user->distance(currentDistanceValue, currentUnitValue);
+
+ qDebug() << currentDistanceValue << currentUnitValue;
+
+ QCOMPARE(currentDistanceValue, newDistanceValue);
+ QCOMPARE(currentUnitValue, newUnitValue);
+}
+
+void TestUser::testUserId()
+{
+ QString currentValue = user->userId();
+
+ qDebug() << currentValue;
+
+ QCOMPARE(currentValue, QString("111000222"));
+}
+
+QTEST_MAIN(TestUser)
+#include "testuser.moc"
--- /dev/null
+######################################################################
+# Automatically generated by qmake (2.01a) Thu Apr 22 12:14:27 2010
+######################################################################
+
+CONFIG += qtestlib
+TEMPLATE = app
+TARGET =
+DEPENDPATH += .
+INCLUDEPATH += .
+
+# Input
+HEADERS += ../../src/user/user.h
+SOURCES += testuser.cpp ../../src/user/user.cpp