#include <QtAlgorithms>
#include <QDebug>
-#include <QNetworkReply>
+#include <QtNetwork/QNetworkReply>
#include <QPixmap>
#include <QStringList>
#include <QtGlobal>
#include "situareservice.h"
-SituareService::SituareService(QObject *parent)
+SituareService::SituareService(NetworkAccessManager *networkManager, ImageFetcher *imageFetcher,
+ QObject *parent)
: QObject(parent),
m_user(0)
{
qDebug() << __PRETTY_FUNCTION__;
- m_networkManager = new NetworkAccessManager(this);
+ m_networkManager = networkManager;
connect(m_networkManager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(requestFinished(QNetworkReply*)), Qt::QueuedConnection);
- m_imageFetcher = new ImageFetcher(new NetworkAccessManager(this), this);
+ m_imageFetcher = imageFetcher;
connect(this, SIGNAL(fetchImage(QString, QUrl)),
m_imageFetcher, SLOT(fetchImage(QString, QUrl)));
connect(m_imageFetcher, SIGNAL(imageReceived(QString,QPixmap)),
m_friendsList.clear();
}
-void SituareService::fetchNotifications()
+void SituareService::fetchMessages()
{
qDebug() << __PRETTY_FUNCTION__;
- QList<Notification*> notifications = m_database->getNotifications(m_user->userId().toULongLong());
+ //Request sent to server does not need the UID
+ QByteArray arr = m_database->getNotifications(613374451);
- foreach (Notification *notification, notifications) {
- notification->setImage(AvatarImage::create(QPixmap(":/res/images/empty_avatar.png"),
- AvatarImage::Small));
- }
-
- foreach (User *user, m_friendsList) {
- foreach (Notification *notification, notifications)
- if (notification->senderId() == user->userId())
- notification->setImage(user->profileImage());
- }
-
- emit notificationsReceived(notifications);
+ parseMessagesData(arr);
}
void SituareService::fetchPeopleWithSimilarInterest(const GeoCoordinate &southWestCoordinates,
{
qDebug() << __PRETTY_FUNCTION__;
- QByteArray arr = m_database->getInterestingPeople(m_user->userId().toULongLong(),
+ //Request sent to server does not need the UID
+ QByteArray arr = m_database->getInterestingPeople(613374451,
southWestCoordinates,
northEastCoordinates);
parseInterestingPeopleData(arr);
}
+void SituareService::fetchPopularTags()
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ QByteArray arr = m_database->getPopularTags();
+
+ parsePopularTagsData(arr);
+}
+
void SituareService::fetchLocations()
{
qDebug() << __PRETTY_FUNCTION__;
return parameters;
}
+void SituareService::sendMessage(const QString &receiverId, const QString &message,
+ const GeoCoordinate &coordinates)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ if (m_database->sendMessage(613374451, receiverId.toULongLong(), message, coordinates))
+ emit updateWasSuccessful(SituareService::SuccessfulSendMessage);
+}
+
void SituareService::sendRequest(const QUrl &url, const QString &cookieType, const QString &cookie)
{
qDebug() << __PRETTY_FUNCTION__;
parseUserData(replyArray);
} else if(replyArray.isEmpty()) {
if(reply->url().toString().contains(UPDATE_LOCATION.toAscii())) {
- emit updateWasSuccessful();
+ emit updateWasSuccessful(SituareService::SuccessfulUpdateLocation);
} else {
// session credentials are invalid
emit error(ErrorContext::SITUARE, SituareError::SESSION_EXPIRED);
emit error(ErrorContext::SITUARE, SituareError::INVALID_JSON);
return;
} else {
- QList<User> interestingPeople;
+ QVariant people = result["people"];
+
+ QList<User> friends;
+ QList<User> others;
+
+ foreach (QVariant personVariant, people.toMap().value("friends").toList()) {
+ User user;
+ QMap<QString, QVariant> person = personVariant.toMap();
+ user.setUserId(person["uid"].toString());
+ user.setName(person["name"].toString());
+ user.setProfileImage(AvatarImage::create(
+ QPixmap(":/res/images/empty_avatar.png"), AvatarImage::Small));
+ user.setProfileImageUrl(person["image_url"].toUrl());
+ user.setTags(person["tags"].toList());
+
+ bool latOk;
+ qreal latitude = person["latitude"].toReal(&latOk);
+ bool lonOk;
+ qreal longitude = person["longitude"].toReal(&lonOk);
+
+ if (latOk && lonOk)
+ user.setCoordinates(GeoCoordinate(latitude, longitude));
- foreach (QVariant personVariant, result["people"].toList()) {
+ friends.append(user);
+
+ //Remove comment when the actual server is used
+ //emit fetchImage(user.userId(), user.profileImageUrl());
+ }
+
+ foreach (QVariant personVariant, people.toMap().value("others").toList()) {
User user;
QMap<QString, QVariant> person = personVariant.toMap();
user.setUserId(person["uid"].toString());
user.setName(person["name"].toString());
+ user.setProfileImage(AvatarImage::create(
+ QPixmap(":/res/images/empty_avatar.png"), AvatarImage::Small));
user.setProfileImageUrl(person["image_url"].toUrl());
+ user.setTags(person["tags"].toList());
- interestingPeople.append(user);
+ others.append(user);
- emit fetchImage(user.userId(), user.profileImageUrl());
+ //Remove comment when the actual server is used
+ //emit fetchImage(user.userId(), user.profileImageUrl());
}
- emit interestingPeopleReceived(interestingPeople);
+ emit interestingPeopleReceived(friends, others);
}
}
-void SituareService::parseNotificationsData(const QByteArray &jsonReply)
+void SituareService::parseMessagesData(const QByteArray &jsonReply)
+{
+ QJson::Parser parser;
+ bool ok;
+
+ QVariantMap result = parser.parse(jsonReply, &ok).toMap();
+
+ if (!ok) {
+ emit error(ErrorContext::SITUARE, SituareError::INVALID_JSON);
+ return;
+ } else {
+ QVariant messages = result["messages"];
+
+ QList<Message> received;
+ QList<Message> sent;
+
+ foreach (QVariant messageVariant, messages.toMap().value("received").toList()) {
+ Message message(Message::MessageTypeReceived);
+ QMap<QString, QVariant> messageMap = messageVariant.toMap();
+ message.setId(messageMap["id"].toString());
+ message.setSenderId(messageMap["sender_id"].toString());
+ message.setReceiverId(messageMap["receiver_id"].toString());
+ message.setSenderName(messageMap["sender_name"].toString());
+ uint timestampSeconds = messageMap["timestamp"].toUInt();
+ message.setTimestamp(QDateTime::fromTime_t(timestampSeconds));
+ message.setText(messageMap["text"].toString());
+ message.setImage(AvatarImage::create(
+ QPixmap(":/res/images/empty_avatar.png"), AvatarImage::Small));
+
+ bool latOk;
+ qreal latitude = messageMap["latitude"].toReal(&latOk);
+ bool lonOk;
+ qreal longitude = messageMap["longitude"].toReal(&lonOk);
+
+ if (latOk && lonOk) {
+ message.setAddress(messageMap["address"].toString());
+ message.setCoordinates(GeoCoordinate(latitude, longitude));
+ }
+
+ received.append(message);
+
+ //emit fetchImage(message.id(), messageMap["image_url"].toString());
+ }
+
+ foreach (QVariant messageVariant, messages.toMap().value("sent").toList()) {
+ Message message(Message::MessageTypeSent);
+ QMap<QString, QVariant> messageMap = messageVariant.toMap();
+ message.setId(messageMap["id"].toString());
+ message.setSenderId(messageMap["sender_id"].toString());
+ message.setReceiverId(messageMap["receiver_id"].toString());
+ message.setSenderName(messageMap["sender_name"].toString());
+ uint timestampSeconds = messageMap["timestamp"].toUInt();
+ message.setTimestamp(QDateTime::fromTime_t(timestampSeconds));
+ message.setText(messageMap["text"].toString());
+ message.setImage(AvatarImage::create(
+ QPixmap(":/res/images/empty_avatar.png"), AvatarImage::Small));
+
+ bool latOk;
+ qreal latitude = messageMap["latitude"].toReal(&latOk);
+ bool lonOk;
+ qreal longitude = messageMap["longitude"].toReal(&lonOk);
+
+ if (latOk && lonOk) {
+ message.setAddress(messageMap["address"].toString());
+ message.setCoordinates(GeoCoordinate(latitude, longitude));
+ }
+
+ sent.append(message);
+
+ //emit fetchImage(message.id(), messageMap["image_url"].toString());
+ }
+
+ emit messagesReceived(received, sent);
+ }
+}
+
+void SituareService::parsePopularTagsData(const QByteArray &jsonReply)
{
qDebug() << __PRETTY_FUNCTION__;
QJson::Parser parser;
bool ok;
- QVariantMap result = parser.parse (jsonReply, &ok).toMap();
+ QVariantMap result = parser.parse(jsonReply, &ok).toMap();
if (!ok) {
emit error(ErrorContext::SITUARE, SituareError::INVALID_JSON);
return;
- }
- else {
+ } else {
+ QHash<QString, QString> popularTags;
+
+ foreach (QVariant tagVariant, result["popular_tags"].toList()) {
+ QMap<QString, QVariant> tag = tagVariant.toMap();
+ popularTags.insert(tag["id"].toString(), tag["name"].toString());
+ }
+ emit interestingPeopleReceived(friends, others);
}
}
+
void SituareService::parseUserData(const QByteArray &jsonReply)
{
qDebug() << __PRETTY_FUNCTION__;
if(imageUrl.isEmpty()) {
// user doesn't have profile image, so we need to get him a silhouette image
m_defaultImage = true;
- user.setProfileImage(QPixmap(":/res/images/empty_avatar_big.png"));
+ user.setProfileImage(AvatarImage::create(
+ QPixmap(":/res/images/empty_avatar_big.png"), AvatarImage::Large));
}
QList<User> tmpFriendsList;
emit userDataChanged(m_user, m_friendsList);
}
-QStringList SituareService::getTags(const QString &userId)
+QHash<QString, QString> SituareService::getTags(const QString &userId)
{
qDebug() << __PRETTY_FUNCTION__;
return m_database->getTags(userId.toInt());
}
-void SituareService::updateTags(const QString &userId, const QStringList &tags)
+void SituareService::removeTags(const QStringList &tags)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ if (m_database->removeTags(613374451, tags))
+ emit updateWasSuccessful(SituareService::SuccessfulRemoveTags);
+}
+
+void SituareService::removeMessage(const QString &id)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ if (m_database->removeMessage(613374451, id))
+ emit updateWasSuccessful(SituareService::SuccessfulRemoveMessage);
+}
+
+void SituareService::addTags(const QStringList &tags)
{
qDebug() << __PRETTY_FUNCTION__;
foreach (QString tag, tags)
- m_database->addTag(userId.toInt(), tag);
+ m_database->addTag(613374451, tag);
+
+ emit updateWasSuccessful(SituareService::SuccessfulAddTags);
+}
+
+void SituareService::searchPeopleByTag(const QString &tag)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ QByteArray arr = m_database->getInterestingPeopleByTag(613374451, tag);
+
+ parseInterestingPeopleData(arr);
}