From ad9558abc9dc330286ea8677e44eb0dee8a4d26d Mon Sep 17 00:00:00 2001 From: lampehe-local Date: Mon, 14 Jun 2010 12:02:04 +0300 Subject: [PATCH] Added error handling for invalid JSON string Reviewed by: Kaj Wallin --- res/languages/situare_fi.qm | Bin 4994 -> 4978 bytes res/languages/situare_fi.ts | 34 ++++++------ src/engine/engine.cpp | 5 +- src/facebookservice/facebookauthentication.cpp | 52 +++++++++--------- src/situareservice/situareservice.cpp | 67 ++++++++++++------------ src/situareservice/situareservice.h | 2 +- 6 files changed, 83 insertions(+), 77 deletions(-) diff --git a/res/languages/situare_fi.qm b/res/languages/situare_fi.qm index 0daffc432936b2d66dd58802878c7061904fc836..7161474ea9fd266adae2d7b12ee3cb570ddb09e7 100644 GIT binary patch delta 257 zcmZot|D-m-gmL~vQ~AJ1Myb2|7#KLEm^^O@GcYi8F*O(eV_;xe$(*p{G6MsjH}iMT zRv^8FrL+1H0|SpAtLd{N3=GUuS*I!k_3`dt^P2R8fq{D)yPz^qpP<3SrSgp1CLUF1 zw4C_Xj*0)*WL-va##@tJ8PyqYOwMJLXVcCED!aLP5@Qfgo)1G9LncEaLkm`3!78Ea#h; ila^nUn^;nknxasYT98wzkXDqRJK2CsZgT@46Dt5Q*+ggn delta 215 zcmeyQ)}%hcgmL{uQ+dHmMyb2|7#KLE7+3sFXJFv*n;0vu8O{9Nvz38??+B~uvm*=) z%u`vXDgzbqo?!Eu^n`(ddmFo;@;?R!L5GP;lK|IbT}E-nSCd^C z)frz*&SjKmv(5x6d%1ZMV-OEx&}3g;X?ZV(UI{830^@&NNymW=M#LS%36di@kyt2fc%oGK%WN}FmP;T-; L4)M(ed`zqWhb2Dl diff --git a/res/languages/situare_fi.ts b/res/languages/situare_fi.ts index 64430bc..9cefcee 100644 --- a/res/languages/situare_fi.ts +++ b/res/languages/situare_fi.ts @@ -69,43 +69,43 @@ Situare - - + + Login Kirjaudu - + Settings Asetukset - + GPS GPS - + Auto centering Automaattinen keskitys - + Main Päävalikko - + Menu Valikko - + GPS timeout GPS pyyntö aikakatkaistiin - + Logout Kirjaudu ulos @@ -230,6 +230,11 @@ Osoitteen haku epäonnistui + + Malformatted reply from server + Viallisesti muotoiltu serverin vastaus + + Address retrieval failed, please try again Osoitteen haku epäonnistui. Yritä uudelleen @@ -254,19 +259,18 @@ Tuntematon vastaus palvelimelta - JSON parsing failed, invalid JSON string - Virheellinen JSON, parsiminen epäonnistui + Virheellinen JSON, parsiminen epäonnistui - - + + GPS enabled GPS päällä - - + + Auto centering enabled Automaattinen keskitys päällä diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 52dd36e..2e7cde6 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -263,7 +263,10 @@ void SituareEngine::error(const int error) m_ui->buildInformationBox(tr("Unknown server response"), true); break; case SituareError::INVALID_JSON: - m_ui->buildInformationBox(tr("JSON parsing failed, invalid JSON string"), true); + m_ui->buildInformationBox(tr("Malformatted reply from server"), true); + m_loggedIn = false; + m_ui->loggedIn(false); + m_facebookAuthenticator->clearAccountInformation(false); // clean all break; default: qCritical() << "QNetworkReply::NetworkError :" << error; diff --git a/src/facebookservice/facebookauthentication.cpp b/src/facebookservice/facebookauthentication.cpp index 02d83ec..9537793 100644 --- a/src/facebookservice/facebookauthentication.cpp +++ b/src/facebookservice/facebookauthentication.cpp @@ -129,42 +129,43 @@ bool FacebookAuthentication::updateCredentials(const QUrl &url) if(list.at(i).startsWith("{")) { QByteArray jsonString = list.at(i).toAscii(); QVariantMap result = parser.parse (jsonString, &ok).toMap(); - if (!ok) { - qFatal("An error occurred during parsing"); + if (!ok) { emit error(SituareError::INVALID_JSON); found = false; - } - qDebug() << "Session Key" << result[SESSION_KEY].toString(); - m_loginCredentials.setSessionKey(result[SESSION_KEY].toString()); + } else { + qDebug() << "Session Key" << result[SESSION_KEY].toString(); + m_loginCredentials.setSessionKey(result[SESSION_KEY].toString()); -// // commeted out until qjson parser can handle 64-bit integers -// qDebug() << "userID" << result[USER_ID].toString(); -// m_loginCredentials.setUserID(result[USER_ID].toString().toAscii()); + // // commeted out until qjson parser can handle 64-bit integers + // qDebug() << "userID" << result[USER_ID].toString(); + // m_loginCredentials.setUserID(result[USER_ID].toString().toAscii()); - // dirty fix, get user id from session_key - QStringList list = result[SESSION_KEY].toString().split("-"); - m_loginCredentials.setUserID(list.at(1)); - qDebug() << m_loginCredentials.userID(); + // dirty fix, get user id from session_key + QStringList list = result[SESSION_KEY].toString().split("-"); + m_loginCredentials.setUserID(list.at(1)); + qDebug() << m_loginCredentials.userID(); - qDebug() << "Expires" << result[EXPIRES].toString(); - m_loginCredentials.setExpires(result[EXPIRES].toString()); + qDebug() << "Expires" << result[EXPIRES].toString(); + m_loginCredentials.setExpires(result[EXPIRES].toString()); - qDebug() << "Session Secret" << result[SESSION_SECRET].toString(); - m_loginCredentials.setSessionSecret(result[SESSION_SECRET].toString()); + qDebug() << "Session Secret" << result[SESSION_SECRET].toString(); + m_loginCredentials.setSessionSecret(result[SESSION_SECRET].toString()); - qDebug() << "Signature" << result[SIGNATURE].toString(); - m_loginCredentials.setSig(result[SIGNATURE].toString()); + qDebug() << "Signature" << result[SIGNATURE].toString(); + m_loginCredentials.setSig(result[SIGNATURE].toString()); + + found = true; + m_freshLogin = false; + emit saveCookiesRequest(); + emit credentialsReady(m_loginCredentials); + } } - } - found = true; - m_freshLogin = false; - emit saveCookiesRequest(); - } - emit credentialsReady(m_loginCredentials); + } + } } else if ( callbackUrl.indexOf(LOGIN_FAILURE_REPLY) == 0){ - qWarning() << "login failure" << endl; + qDebug() << "login failure"; qDebug() << callbackUrl; clearAccountInformation(true); if(m_freshLogin) { @@ -189,7 +190,6 @@ bool FacebookAuthentication::updateCredentials(const QUrl &url) qDebug() << " Loading of page failed invalid URL" << endl; // we should not get a wrong page at this point emit loginFailure(); - return false; } return found; } diff --git a/src/situareservice/situareservice.cpp b/src/situareservice/situareservice.cpp index af6fd3c..2360ee1 100644 --- a/src/situareservice/situareservice.cpp +++ b/src/situareservice/situareservice.cpp @@ -298,7 +298,7 @@ void SituareService::credentialsReady(const FacebookCredentials &credentials) m_credentials = credentials; } -void SituareService::parseUserData(const QByteArray &jsonReply) +void SituareService::parseUserData(/*const*/ QByteArray &jsonReply) { qDebug() << __PRETTY_FUNCTION__; @@ -318,53 +318,52 @@ void SituareService::parseUserData(const QByteArray &jsonReply) QVariantMap result = parser.parse (jsonReply, &ok).toMap(); if (!ok) { - - qFatal("An error occurred during parsing"); emit error(SituareError::INVALID_JSON); return; - } + } else { - QVariant userVariant = result.value("user"); - QMap userMap = userVariant.toMap(); + QVariant userVariant = result.value("user"); + QMap userMap = userVariant.toMap(); - QPointF coordinates(userMap["longitude"].toReal(), userMap["latitude"].toReal()); + QPointF coordinates(userMap["longitude"].toReal(), userMap["latitude"].toReal()); - QUrl imageUrl = userMap[NORMAL_SIZE_PROFILE_IMAGE].toUrl(); + QUrl imageUrl = userMap[NORMAL_SIZE_PROFILE_IMAGE].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()) { + // 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()); + 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 friendMap = friendsVariant.toMap(); - QVariant distance = friendMap["distance"]; - QMap distanceMap = distance.toMap(); + foreach (QVariant friendsVariant, result["friends"].toList()) { + QMap friendMap = friendsVariant.toMap(); + QVariant distance = friendMap["distance"]; + QMap distanceMap = distance.toMap(); - QPointF coordinates(friendMap["longitude"].toReal(), friendMap["latitude"].toReal()); + QPointF coordinates(friendMap["longitude"].toReal(), friendMap["latitude"].toReal()); - QUrl imageUrl = friendMap["profile_pic"].toUrl(); + 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; - } + if(imageUrl.isEmpty()) { + // friend doesn't have profile image, so we need to get him a silhouette image + m_defaultImage = true; + } - 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()); + 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_friendsList.append(user); + m_friendsList.append(user); + } + addProfileImages(); } - addProfileImages(); } void SituareService::imageReceived(const QUrl &url, const QPixmap &image) diff --git a/src/situareservice/situareservice.h b/src/situareservice/situareservice.h index 1b40c14..4ed475f 100644 --- a/src/situareservice/situareservice.h +++ b/src/situareservice/situareservice.h @@ -159,7 +159,7 @@ private: * * @param jsonReply JSON string */ - void parseUserData(const QByteArray &jsonReply); + void parseUserData(/*const*/ QByteArray &jsonReply); /** * @brief Sends http request -- 1.7.9.5