return;
} else if(result.contains("user")) {
- qDeleteAll(m_friendsList.begin(), m_friendsList.end());
- m_friendsList.clear();
-
- if(m_user) {
- delete m_user;
- m_user = 0;
- }
-
QVariant userVariant = result.value("user");
QMap<QString, QVariant> userMap = userVariant.toMap();
address = location.join(", ");
}
- m_user = new User(address, coordinates, userMap["name"].toString(),
+ User user = User(address, coordinates, userMap["name"].toString(),
userMap["note"].toString(), imageUrl, userMap["timestamp"].toString(),
true, userMap["uid"].toString());
+ QList<User> tmpFriendsList;
+
foreach (QVariant friendsVariant, result["friends"].toList()) {
QMap<QString, QVariant> friendMap = friendsVariant.toMap();
QVariant distance = friendMap["distance"];
address = location.join(", ");
}
- User *user = new User(address, coordinates,
- friendMap["name"].toString(),
- friendMap["note"].toString(), imageUrl,
- friendMap["timestamp"].toString(),
- false, friendMap["uid"].toString(),
- distanceMap["units"].toString(),
- distanceMap["value"].toDouble());
+ User buddy = User(address, coordinates, friendMap["name"].toString(),
+ friendMap["note"].toString(), imageUrl,
+ friendMap["timestamp"].toString(),
+ false, friendMap["uid"].toString(), distanceMap["units"].toString(),
+ distanceMap["value"].toDouble());
+
+ tmpFriendsList.append(buddy);
+ }
+
+ QList<QUrl> imageUrlList; // url list for images
+
+ // set unchanged profile images or add new images to imageUrlList for downloading
+ if(m_user) {
+ if(m_user->profileImageUrl() != user.profileImageUrl()) {
+ if(!user.profileImageUrl().isEmpty())
+ imageUrlList.append(user.profileImageUrl());
+ } else {
+ user.setProfileImage(m_user->profileImage());
+ }
+ } else {
+ if(!user.profileImageUrl().isEmpty())
+ imageUrlList.append(user.profileImageUrl());
+ }
+
+ // clear old user object
+ if(m_user) {
+ delete m_user;
+ m_user = 0;
+ }
- m_friendsList.append(user);
+ // create new user object from temporary user object
+ m_user = new User(user);
+
+ // set unchanged profile images or add new images to imageUrlList for downloading
+ if(!m_friendsList.isEmpty()) {
+ foreach(User tmpBuddy, tmpFriendsList) {
+ if(!tmpBuddy.profileImageUrl().isEmpty()) {
+ bool found = false;
+ foreach(User *buddy, m_friendsList) {
+ if(tmpBuddy.profileImageUrl() == buddy->profileImageUrl()) {
+ tmpBuddy.setProfileImage(buddy->profileImage());
+ found = true;
+ break;
+ }
+ }
+ if(!found && !tmpBuddy.profileImageUrl().isEmpty())
+ imageUrlList.append(tmpBuddy.profileImageUrl());
+ }
+ }
+ } else {
+ foreach(User buddy, tmpFriendsList) {
+ if(!buddy.profileImageUrl().isEmpty())
+ imageUrlList.append(buddy.profileImageUrl());
+ }
}
+
+ // clear old friendlist
+ qDeleteAll(m_friendsList.begin(), m_friendsList.end());
+ m_friendsList.clear();
+
+ // populate new friendlist with temporary friendlist's data
+ foreach(User tmpFriendItem, tmpFriendsList) {
+ User *friendItem = new User(tmpFriendItem);
+ m_friendsList.append(friendItem);
+ }
+ tmpFriendsList.clear();
+
emit userDataChanged(m_user, m_friendsList);
- addProfileImages();
+
+ // set silhouette image to imageUrlList for downloading
+ if(m_defaultImage)
+ imageUrlList.append(QUrl(SILHOUETTE_URL));
+
+ addProfileImages(imageUrlList);
+ imageUrlList.clear();
} else {
QVariant address = result.value("address");
if(!address.toString().isEmpty()) {
m_user->setProfileImage(AvatarImage::create(image, AvatarImage::Large));
emit imageReady(m_user);
}
- for(int i=0;i < m_friendsList.count();i++) {
- if(m_friendsList.at(i)->profileImageUrl().isEmpty()) {
- m_friendsList.at(i)->setProfileImage(AvatarImage::create(image,
- AvatarImage::Small));
- emit imageReady(m_friendsList.at(i));
+ foreach(User *friendItem, m_friendsList) {
+ if(friendItem->profileImageUrl().isEmpty()) {
+ friendItem->setProfileImage(AvatarImage::create(image, AvatarImage::Small));
+ emit imageReady(friendItem);
}
}
}
emit imageReady(m_user);
}
- for(int i=0;i<m_friendsList.count();i++) {
- if(m_friendsList.at(i)->profileImageUrl() == url) {
- m_friendsList.at(i)->setProfileImage(AvatarImage::create(image, AvatarImage::Small));
- emit imageReady(m_friendsList.at(i));
+ foreach(User *friendItem, m_friendsList) {
+ if(friendItem->profileImageUrl() == url) {
+ friendItem->setProfileImage(AvatarImage::create(image, AvatarImage::Small));
+ emit imageReady(friendItem);
}
}
}
-void SituareService::addProfileImages()
+void SituareService::addProfileImages(const QList<QUrl> &imageUrlList)
{
qDebug() << __PRETTY_FUNCTION__;
- // reduce net traffic by sending only one download request for facebook silhouette image
- if(m_defaultImage) {
- emit fetchImage(QUrl(SILHOUETTE_URL));
- }
-
- if(!m_user->profileImageUrl().isEmpty() && m_user->profileImageUrl().isValid())
- emit fetchImage(m_user->profileImageUrl());
-
- for(int i=0;i<m_friendsList.count();i++) {
- if(!m_friendsList.at(i)->profileImageUrl().isEmpty() &&
- m_friendsList.at(i)->profileImageUrl().isValid()) {
- emit fetchImage(m_friendsList.at(i)->profileImageUrl());
- }
+ foreach(QUrl url, imageUrlList) {
+ emit fetchImage(url);
}
}