From cc2a35c2a83506e13eee8bdade44a06e455700a4 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 28 Aug 2014 10:52:29 -0700 Subject: [PATCH] handle not found errors returned for addresses from data-web --- interface/src/avatar/MyAvatar.cpp | 8 +--- interface/src/location/LocationManager.cpp | 45 +++++++++++++++------- interface/src/location/LocationManager.h | 3 ++ 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index a4ebe85611..e51390f9d0 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -1896,12 +1896,8 @@ void MyAvatar::resetSize() { } void MyAvatar::goToLocationFromResponse(const QJsonObject& jsonObject) { - if (jsonObject["status"].toString() == "success") { - QJsonObject locationObject = jsonObject["data"].toObject()["address"].toObject(); - goToLocationFromAddress(locationObject); - } else { - QMessageBox::warning(Application::getInstance()->getWindow(), "", "That user or location could not be found."); - } + QJsonObject locationObject = jsonObject["data"].toObject()["address"].toObject(); + goToLocationFromAddress(locationObject); } void MyAvatar::goToLocationFromAddress(const QJsonObject& locationObject) { diff --git a/interface/src/location/LocationManager.cpp b/interface/src/location/LocationManager.cpp index cbf7d3dfd0..551e08a8bc 100644 --- a/interface/src/location/LocationManager.cpp +++ b/interface/src/location/LocationManager.cpp @@ -85,9 +85,13 @@ void LocationManager::goTo(QString destination) { if (!goToDestination(destination)) { destination = QString(QUrl::toPercentEncoding(destination)); UserActivityLogger::getInstance().wentTo(OTHER_DESTINATION_TYPE, destination); + JSONCallbackParameters callbackParams; callbackParams.jsonCallbackReceiver = this; callbackParams.jsonCallbackMethod = "goToAddressFromResponse"; + callbackParams.errorCallbackReceiver = this; + callbackParams.errorCallbackMethod = "handleAddressLookupError"; + AccountManager::getInstance().authenticatedRequest(GET_ADDRESSES.arg(destination), QNetworkAccessManager::GetOperation, callbackParams); @@ -96,21 +100,17 @@ void LocationManager::goTo(QString destination) { void LocationManager::goToAddressFromResponse(const QJsonObject& responseData) { QJsonValue status = responseData["status"]; - qDebug() << responseData; - if (!status.isUndefined() && status.toString() == "success") { - const QJsonObject& data = responseData["data"].toObject(); - const QJsonValue& userObject = data["user"]; - const QJsonValue& placeObject = data["place"]; - - if (!placeObject.isUndefined() && !userObject.isUndefined()) { - emit multipleDestinationsFound(userObject.toObject(), placeObject.toObject()); - } else if (placeObject.isUndefined()) { - Application::getInstance()->getAvatar()->goToLocationFromAddress(userObject.toObject()["address"].toObject()); - } else { - Application::getInstance()->getAvatar()->goToLocationFromAddress(placeObject.toObject()["address"].toObject()); - } + + const QJsonObject& data = responseData["data"].toObject(); + const QJsonValue& userObject = data["user"]; + const QJsonValue& placeObject = data["place"]; + + if (!placeObject.isUndefined() && !userObject.isUndefined()) { + emit multipleDestinationsFound(userObject.toObject(), placeObject.toObject()); + } else if (placeObject.isUndefined()) { + Application::getInstance()->getAvatar()->goToLocationFromAddress(userObject.toObject()["address"].toObject()); } else { - QMessageBox::warning(Application::getInstance()->getWindow(), "", "That user or location could not be found."); + Application::getInstance()->getAvatar()->goToLocationFromAddress(placeObject.toObject()["address"].toObject()); } } @@ -118,6 +118,8 @@ void LocationManager::goToUser(QString userName) { JSONCallbackParameters callbackParams; callbackParams.jsonCallbackReceiver = Application::getInstance()->getAvatar(); callbackParams.jsonCallbackMethod = "goToLocationFromResponse"; + callbackParams.errorCallbackReceiver = this; + callbackParams.errorCallbackMethod = "handleAddressLookupError"; userName = QString(QUrl::toPercentEncoding(userName)); AccountManager::getInstance().authenticatedRequest(GET_USER_ADDRESS.arg(userName), @@ -129,6 +131,8 @@ void LocationManager::goToPlace(QString placeName) { JSONCallbackParameters callbackParams; callbackParams.jsonCallbackReceiver = Application::getInstance()->getAvatar(); callbackParams.jsonCallbackMethod = "goToLocationFromResponse"; + callbackParams.errorCallbackReceiver = this; + callbackParams.errorCallbackMethod = "handleAddressLookupError"; placeName = QString(QUrl::toPercentEncoding(placeName)); AccountManager::getInstance().authenticatedRequest(GET_PLACE_ADDRESS.arg(placeName), @@ -212,6 +216,19 @@ bool LocationManager::goToDestination(QString destination) { return false; } +void LocationManager::handleAddressLookupError(QNetworkReply::NetworkError networkError, + const QString& errorString) { + QString messageBoxString; + + if (networkError == QNetworkReply::ContentNotFoundError) { + messageBoxString = "That address could not be found."; + } else { + messageBoxString = errorString; + } + + QMessageBox::warning(Application::getInstance()->getWindow(), "", messageBoxString); +} + void LocationManager::replaceLastOccurrence(const QChar search, const QChar replace, QString& string) { int lastIndex; lastIndex = string.lastIndexOf(search); diff --git a/interface/src/location/LocationManager.h b/interface/src/location/LocationManager.h index b781f3f54e..30b4447ded 100644 --- a/interface/src/location/LocationManager.h +++ b/interface/src/location/LocationManager.h @@ -37,6 +37,9 @@ public: void goToPlace(QString placeName); void goToOrientation(QString orientation); bool goToDestination(QString destination); + +public slots: + void handleAddressLookupError(QNetworkReply::NetworkError networkError, const QString& errorString); private: void replaceLastOccurrence(const QChar search, const QChar replace, QString& string);