Modified TagsDialog.
[situare] / src / situareservice / situareservice.cpp
index d5fe2f3..6493ad3 100644 (file)
@@ -99,6 +99,15 @@ void SituareService::fetchPeopleWithSimilarInterest(const GeoCoordinate &southWe
     parseInterestingPeopleData(arr);
 }
 
+void SituareService::fetchPopularTags()
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    QByteArray arr = m_database->getPopularTags();
+
+    parsePopularTagsData(arr);
+}
+
 void SituareService::fetchLocations()
 {
     qDebug() << __PRETTY_FUNCTION__;
@@ -254,11 +263,13 @@ QString SituareService::formUrlParameters(const GeoCoordinate &coordinates, QStr
     return parameters;
 }
 
-void SituareService::sendMessage(const QString &receiverId, const QString &message)
+void SituareService::sendMessage(const QString &receiverId, const QString &message,
+                                 const GeoCoordinate &coordinates)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    qWarning() << __PRETTY_FUNCTION__ << m_database->sendMessage(613374451, receiverId.toULongLong(), message);
+    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)
@@ -305,7 +316,7 @@ void SituareService::requestFinished(QNetworkReply *reply)
                 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);
@@ -340,9 +351,12 @@ void SituareService::parseInterestingPeopleData(const QByteArray &jsonReply)
         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, result["people"].toList()) {
+        foreach (QVariant personVariant, people.toMap().value("friends").toList()) {
             User user;
             QMap<QString, QVariant> person = personVariant.toMap();
             user.setUserId(person["uid"].toString());
@@ -351,13 +365,38 @@ void SituareService::parseInterestingPeopleData(const QByteArray &jsonReply)
                     QPixmap(":/res/images/empty_avatar.png"), AvatarImage::Small));
             user.setProfileImageUrl(person["image_url"].toUrl());
             user.setTags(person["tags"].toList());
-            interestingPeople.append(user);
+
+            bool latOk;
+            qreal latitude = person["latitude"].toReal(&latOk);
+            bool lonOk;
+            qreal longitude = person["longitude"].toReal(&lonOk);
+
+            if (latOk && lonOk)
+                user.setCoordinates(GeoCoordinate(latitude, longitude));
+
+            friends.append(user);
 
             //Remove comment when the actual server is used
             //emit fetchImage(user.userId(), user.profileImageUrl());
         }
 
-        emit interestingPeopleReceived(interestingPeople);
+        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());
+
+            others.append(user);
+
+            //Remove comment when the actual server is used
+            //emit fetchImage(user.userId(), user.profileImageUrl());
+        }
+
+        emit interestingPeopleReceived(friends, others);
     }
 }
 
@@ -372,13 +411,17 @@ void SituareService::parseMessagesData(const QByteArray &jsonReply)
         emit error(ErrorContext::SITUARE, SituareError::INVALID_JSON);
         return;
     } else {
-        QList<Message> messages;
+        QVariant messages = result["messages"];
+
+        QList<Message> received;
+        QList<Message> sent;
 
-        foreach (QVariant messageVariant, result["messages"].toList()) {
-            Message message;
+        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));
@@ -386,15 +429,78 @@ void SituareService::parseMessagesData(const QByteArray &jsonReply)
             message.setImage(AvatarImage::create(
                     QPixmap(":/res/images/empty_avatar.png"), AvatarImage::Small));
 
-            messages.append(message);
+            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());
         }
 
-        emit messagesReceived(messages);
+        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();
+
+    if (!ok) {
+        emit error(ErrorContext::SITUARE, SituareError::INVALID_JSON);
+        return;
+    } 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__;
@@ -611,7 +717,16 @@ void SituareService::removeTags(const QStringList &tags)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    m_database->removeTags(613374451, tags);
+    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)
@@ -620,4 +735,15 @@ void SituareService::addTags(const QStringList &tags)
 
     foreach (QString tag, tags)
         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);
 }