Added tags to SituareService::getInterestingPeople.
authorJussi Laitinen <jupe@l3l7588.ixonos.local>
Mon, 1 Nov 2010 13:55:45 +0000 (15:55 +0200)
committerJussi Laitinen <jupe@l3l7588.ixonos.local>
Mon, 1 Nov 2010 13:55:45 +0000 (15:55 +0200)
src/situareservice/database.cpp
src/situareservice/situareservice.cpp
src/situareservice/situareservice.h
src/ui/headerlistitemdelegate.cpp
src/ui/personlistitem.cpp
src/user/user.cpp
src/user/user.h

index 49fd3f7..bca5e91 100644 (file)
@@ -143,24 +143,48 @@ QByteArray Database::getInterestingPeople(qulonglong userId,
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    QSqlQuery query(QString("SELECT user.id, user.name, user.image_url FROM user WHERE "
-                            "user.latitude >= '%1' AND user.latitude <= '%2' AND "
-                            "user.longitude >= '%3' AND user.longitude <= '%4' AND user.id IN "
-                            "(SELECT DISTINCT usertag.userid FROM usertag WHERE usertag.tagid IN "
-                            "(SELECT usertag.tagid FROM usertag WHERE usertag.userid = '%5') AND "
-                            "usertag.userid != '%6')")
-                    .arg(southWestCoordinates.latitude()).arg(northEastCoordinates.latitude())
-                    .arg(southWestCoordinates.longitude()).arg(northEastCoordinates.longitude())
-                    .arg(userId).arg(userId));
+    QHash<QString, QString> tags;
+
+    QSqlQuery tagQuery(QString("SELECT usertag.userid, tag.name FROM usertag, tag WHERE "
+                               "usertag.tagid IN (SELECT usertag.tagid FROM usertag WHERE "
+                               "usertag.userid = '%1') AND usertag.userid != '%2' "
+                               "AND usertag.tagid = tag.id").arg(userId).arg(userId));
+
+    while (tagQuery.next()) {
+        QString userId = tagQuery.value(0).toString();
+        QString tagName = tagQuery.value(1).toString();
+
+        if (tags.contains(userId)) {
+            QString value = tags.take(userId);
+            value.append(", \"" + tagName + "\"");
+            tags.insert(userId, value);
+        }
+        else {
+            tags.insert(userId, QString("\"" + tagName + "\""));
+        }
+    }
+
+    QStringList userIds;
+    QHashIterator<QString, QString> i(tags);
+    while (i.hasNext())
+        userIds.append(i.key());
+
+    QSqlQuery userQuery(QString("SELECT user.id, user.name, user.image_url FROM user WHERE "
+                                "user.id IN (") + userIds.join(", ") + QString(") AND "
+                                "user.latitude >= '%1' AND user.latitude < '%2' AND "
+                                "user.longitude >= '%3' AND user.longitude < '%4")
+                .arg(southWestCoordinates.latitude()).arg(northEastCoordinates.latitude())
+                .arg(southWestCoordinates.longitude()).arg(northEastCoordinates.longitude()));
 
     QString result;
     result.append("{\"people\": [");
 
-    while (query.next()) {
+    while (userQuery.next()) {
         result.append("{");
-        result.append("\"uid\": \"" + query.value(0).toString() + "\",");
-        result.append("\"name\": \"" + query.value(1).toString() + "\",");
-        result.append("\"image_url\": \"" + query.value(2).toString() + "\"");
+        result.append("\"uid\": \"" + userQuery.value(0).toString() + "\",");
+        result.append("\"name\": \"" + userQuery.value(1).toString() + "\",");
+        result.append("\"image_url\": \"" + userQuery.value(2).toString() + "\",");
+        result.append("\"tags\": [" + tags.value(userQuery.value(0).toString()) + "]");
         result.append("},");
     }
 
@@ -201,7 +225,7 @@ QByteArray Database::getNotifications(qulonglong userId)
         result.remove(result.lastIndexOf(","), 1);
 
     result.append("]}");
-
+    qWarning() << result;
     return result.toUtf8();
 }
 
index 0b5bdac..6130658 100644 (file)
@@ -350,10 +350,11 @@ void SituareService::parseInterestingPeopleData(const QByteArray &jsonReply)
             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);
 
-            emit fetchImage(user.userId(), user.profileImageUrl());
+            //Remove comment when the actual server is used
+            //emit fetchImage(user.userId(), user.profileImageUrl());
         }
 
         emit interestingPeopleReceived(interestingPeople);
@@ -387,7 +388,7 @@ void SituareService::parseMessagesData(const QByteArray &jsonReply)
 
             messages.append(message);
 
-            emit fetchImage(message.id(), messageMap["image_url"].toString());
+            //emit fetchImage(message.id(), messageMap["image_url"].toString());
         }
 
         emit messagesReceived(messages);
index a79d5c6..92f5a90 100644 (file)
@@ -289,7 +289,7 @@ signals:
     *
     * @param messages list of messages sent to user
     */
-    void messagesReceived(const QList<Message> &messages);
+    void messagesReceived(QList<Message> &messages);
 
     /**
     * @brief Signals when address data is retrieved
index b8c98a5..db7a1d9 100644 (file)
@@ -38,9 +38,11 @@ void HeaderListItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem
 {
     qDebug() << __PRETTY_FUNCTION__;
 
+    const QColor BLUE_COLOR(122, 185, 222);
+
     QString text = index.data(Qt::DisplayRole).toString();
 
-    painter->setPen(Qt::white);
+    painter->setPen(BLUE_COLOR);
     painter->setFont(NOKIA_FONT_NORMAL);
 
     painter->drawText(option.rect, Qt::AlignCenter, text);
index 2b56131..dad016b 100644 (file)
@@ -88,5 +88,12 @@ void PersonListItem::setPersonData(const User &user)
         setImage(user.profileImage());
 
     clearSubItems();
+
+    QString tagsText;
+
+    foreach (QString tag, user.tags())
+        tagsText.append("[" + tag + "] ");
+
+    addSubItem(tagsText, QPixmap(":/res/images/tag.png"));
 }
 
index 75be9b6..fbbc0e8 100644 (file)
@@ -19,6 +19,8 @@
    USA.
 */
 
+#include <QVariant>
+
 #include "user.h"
 
 User::User(const QString &address, const GeoCoordinate &coordinates, const QString &name,
@@ -97,6 +99,16 @@ void User::setTags(const QStringList &tags)
     m_tags = tags;
 }
 
+void User::setTags(const QList<QVariant> &tags)
+{
+    QStringList tagsStrings;
+
+    foreach (QVariant tag, tags)
+        tagsStrings.append(tag.toString());
+
+    m_tags = tagsStrings;
+}
+
 void User::setTimestamp(const QString &timestamp)
 {
     m_timestamp = timestamp;
index dbe902e..0b0ca2e 100644 (file)
@@ -115,6 +115,13 @@ public:
     void setTags(const QStringList &tags);
 
     /**
+    * @brief Sets user's tags.
+    *
+    * @param tags user's tags
+    */
+    void setTags(const QList<QVariant> &tags);
+
+    /**
     * @brief Set timestamp for last status update, timestamp is in literal mode
     *
     * @param timestamp timestamp