m_imageFetcher, SLOT(fetchImage(QUrl)));
connect(m_imageFetcher, SIGNAL(imageReceived(QUrl,QPixmap)),
this, SLOT(imageReceived(QUrl, QPixmap)));
- connect(m_imageFetcher, SIGNAL(error(int)),
- this, SIGNAL(error(int)));
+ connect(m_imageFetcher, SIGNAL(error(int, int)),
+ this, SIGNAL(error(int, int)));
}
SituareService::~SituareService()
m_credentials.sig(), EN_LOCALE);
QString urlParameters = formUrlParameters(coordinates);
+ urlParameters.append(JSON_FORMAT);
QUrl url = formUrl(SITUARE_URL, REVERSE_GEO, urlParameters);
sendRequest(url, COOKIE, cookie);
//Reply from situare
if (m_currentRequests.contains(reply)) {
- QUrl url = reply->url();
qDebug() << "BytesAvailable: " << reply->bytesAvailable();
if (reply->error()) {
- emit error(reply->error());
+ emit error(ErrorContext::NETWORK, reply->error());
} else {
- qint64 max = reply->size();
- QByteArray replyArray = reply->read(max);
- qDebug() << "Reply from: " << url << "reply " << replyArray;
+ QByteArray replyArray = reply->readAll();
+ qDebug() << "Reply from: " << reply->url() << "reply " << replyArray;
if(replyArray == ERROR_LAT.toAscii()) {
qDebug() << "Error: " << ERROR_LAT;
- emit error(SituareError::UPDATE_FAILED);
+ emit error(ErrorContext::SITUARE, SituareError::UPDATE_FAILED);
} else if(replyArray == ERROR_LON.toAscii()) {
qDebug() << "Error: " << ERROR_LON;
- emit error(SituareError::UPDATE_FAILED);
+ emit error(ErrorContext::SITUARE, SituareError::UPDATE_FAILED);
} else if(replyArray.contains(ERROR_SESSION.toAscii())) {
qDebug() << "Error: " << ERROR_SESSION;
- emit error(SituareError::SESSION_EXPIRED);
+ emit error(ErrorContext::SITUARE, SituareError::SESSION_EXPIRED);
} else if(replyArray.startsWith(OPENING_BRACE_MARK.toAscii())) {
qDebug() << "JSON string";
parseUserData(replyArray);
} else if(replyArray.isEmpty()) {
- if(url.toString().contains(UPDATE_LOCATION.toAscii())) {
+ if(reply->url().toString().contains(UPDATE_LOCATION.toAscii())) {
emit updateWasSuccessful();
- } else if(url.toString().contains(REVERSE_GEO.toAscii())) {
- // reversegeo failed
- emit error(SituareError::ADDRESS_RETRIEVAL_FAILED);
} else {
// session credentials are invalid
- emit error(SituareError::SESSION_EXPIRED);
+ emit error(ErrorContext::SITUARE, SituareError::SESSION_EXPIRED);
}
- } else if(url.toString().contains(REVERSE_GEO.toAscii())) {
- // Street address ready
- QString address = QString::fromUtf8(replyArray);
- emit reverseGeoReady(address);
} else {
// unknown reply
- emit error(SituareError::UNKNOWN_REPLY);
+ emit error(ErrorContext::SITUARE, SituareError::ERROR_GENERAL);
}
}
m_currentRequests.removeAll(reply);
m_credentials = credentials;
}
-void SituareService::parseUserData(/*const*/ QByteArray &jsonReply)
+void SituareService::parseUserData(const QByteArray &jsonReply)
{
qDebug() << __PRETTY_FUNCTION__;
QVariantMap result = parser.parse (jsonReply, &ok).toMap();
if (!ok) {
- emit error(SituareError::INVALID_JSON);
+ emit error(ErrorContext::SITUARE, SituareError::INVALID_JSON);
return;
} else {
- QVariant userVariant = result.value("user");
- QMap<QString, QVariant> userMap = userVariant.toMap();
+ if(result.contains("ErrorCode")) {
+ QVariant errorVariant = result.value("ErrorCode");
+ emit error(ErrorContext::SITUARE, errorVariant.toInt());
+ return;
+ } else if(result.contains("user")) {
- QPointF coordinates(userMap["longitude"].toReal(), userMap["latitude"].toReal());
+ QVariant userVariant = result.value("user");
+ QMap<QString, QVariant> userMap = userVariant.toMap();
- QUrl imageUrl = userMap[NORMAL_SIZE_PROFILE_IMAGE].toUrl();
+ QPointF coordinates(userMap["longitude"].toReal(), userMap["latitude"].toReal());
- if(imageUrl.isEmpty()) {
- // user doesn't have profile image, so we need to get him a silhouette image
- m_defaultImage = true;
- }
-
- m_user = new 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();
+ QUrl imageUrl = userMap[NORMAL_SIZE_PROFILE_IMAGE].toUrl();
- QPointF coordinates(friendMap["longitude"].toReal(), friendMap["latitude"].toReal());
-
- QUrl imageUrl = friendMap["profile_pic"].toUrl();
+ if(imageUrl.isEmpty()) {
+ // user doesn't have profile image, so we need to get him a silhouette image
+ m_defaultImage = true;
+ }
- if(imageUrl.isEmpty()) {
- // friend doesn't have profile image, so we need to get him a silhouette image
- m_defaultImage = true;
- }
+ QString address = userMap["address"].toString();
+ if(address.isEmpty()) {
+ QStringList location;
+ location.append(QString::number(coordinates.y()));
+ location.append(QString::number(coordinates.x()));
+ address = location.join(", ");
+ }
- 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());
+ m_user = new User(address, 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();
+
+ if(imageUrl.isEmpty()) {
+ // friend doesn't have profile image, so we need to get him a silhouette image
+ m_defaultImage = true;
+ }
+
+ QString address = friendMap["address"].toString();
+ if(address.isEmpty()) {
+ QStringList location;
+ location.append(QString::number(coordinates.y()));
+ location.append(QString::number(coordinates.x()));
+ 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());
+
+ m_friendsList.append(user);
+ }
+ addProfileImages();
+ } else {
+ QVariant address = result.value("address");
+ if(!address.toString().isEmpty()) {
+ emit reverseGeoReady(address.toString());
+ } else {
+ QStringList coordinates;
+ coordinates.append(result.value("lat").toString());
+ coordinates.append(result.value("lon").toString());
- m_friendsList.append(user);
+ emit error(ErrorContext::SITUARE, SituareError::ADDRESS_RETRIEVAL_FAILED);
+ emit reverseGeoReady(coordinates.join(", "));
+ }
}
- addProfileImages();
}
}