From 77eb745abcf549e7f2360a082564b5c6a2d12952 Mon Sep 17 00:00:00 2001 From: Lirusaito Date: Thu, 7 Mar 2019 17:06:38 -0500 Subject: [PATCH] Fix notification bugs, sync with upstream, yaaay --- indra/newview/llinventorybridge.cpp | 12 ++- indra/newview/llmarketplacefunctions.cpp | 94 ++++++++++++------- .../skins/default/xui/en-us/notifications.xml | 33 +++++-- 3 files changed, 93 insertions(+), 46 deletions(-) diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 634145a0c..d5ac2b5f1 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -3053,7 +3053,17 @@ void LLFolderBridge::performAction(LLInventoryModel* model, std::string action) if (depth_nesting_in_marketplace(mUUID) == 2) { LLInventoryCategory* category = gInventory.getCategory(mUUID); - LLMarketplaceData::instance().setVersionFolder(category->getParentUUID(), mUUID); + mMessage = ""; + if (!validate_marketplacelistings(category,boost::bind(&LLFolderBridge::gatherMessage, this, _1, _2, _3),false,2)) + { + LLSD subs; + subs["[ERROR_CODE]"] = mMessage; + LLNotificationsUtil::add("MerchantFolderActivationFailed", subs); + } + else + { + LLMarketplaceData::instance().setVersionFolder(category->getParentUUID(), mUUID); + } } return; } diff --git a/indra/newview/llmarketplacefunctions.cpp b/indra/newview/llmarketplacefunctions.cpp index 43d1497a8..7ee7ac9b2 100644 --- a/indra/newview/llmarketplacefunctions.cpp +++ b/indra/newview/llmarketplacefunctions.cpp @@ -148,11 +148,13 @@ LLUUID getVersionFolderIfUnique(const LLUUID& folder_id) } /////////////////////////////////////////////////////////////////////////////// -// SLM Responders -void log_SLM_warning(const std::string& request, U32 status, const std::string& reason, const std::string& code, const std::string& description) + // SLM Reporters +void log_SLM_warning(const std::string& request, U32 status, const std::string& reason, const std::string& code, const LLSD& content) { - LL_WARNS("SLM") << "SLM API : Responder to " << request << ". status : " << status << ", reason : " << reason << ", code : " << code << ", description : " << description << LL_ENDL; - if ((status == 422) && (description == "[\"You must have an English description to list the product\", \"You must choose a category for your product before it can be listed\", \"Listing could not change state.\", \"Price can't be blank\"]")) + LL_WARNS("SLM") << "SLM API : Responder to " << request << ". status : " << status << ", reason : " << reason << ", code : " << code << ", description : " << ll_pretty_print_sd(content) << LL_ENDL; + if ((status == 422) && + content.isArray() && + content.size() > 4) { // Unprocessable Entity : Special case that error as it is a frequent answer when trying to list an incomplete listing LLNotificationsUtil::add("MerchantUnprocessableEntity"); @@ -161,9 +163,34 @@ void log_SLM_warning(const std::string& request, U32 status, const std::string& { // Prompt the user with the warning (so they know why things are failing) LLSD subs; - subs["[ERROR_REASON]"] = reason; // We do show long descriptions in the alert (unlikely to be readable). The description string will be in the log though. - subs["[ERROR_DESCRIPTION]"] = (description.length() <= 512 ? description : LLStringUtil::null); + std::string description; + { + if (content.isArray()) + { + for (auto it = content.beginArray(); it != content.endArray(); ++it) + { + if (!description.empty()) + description += '\n'; + description += (*it).asString(); + } + } + else + { + description = content.asString(); + } + } + std::string reason_lc = reason; + LLStringUtil::toLower(reason_lc); + if (!description.empty() && reason_lc.find("unknown") != std::string::npos) + { + subs["[ERROR_REASON]"] = LLStringUtil::null; + } + else + { + subs["[ERROR_REASON]"] = '\'' + reason +"'\n"; + } + subs["[ERROR_DESCRIPTION]"] = description; LLNotificationsUtil::add("MerchantTransactionFailed", subs); } } @@ -220,7 +247,7 @@ protected: } else { - log_SLM_warning("Get /merchant", httpCode, getReason(), getContent().get("error_code"), getContent().get("error_description")); + log_SLM_warning("Get /merchant", httpCode, getReason(), LLStringUtil::null, getContent()); LLMarketplaceData::instance(). setSLMStatus(MarketplaceStatusCodes::MARKET_PLACE_CONNECTION_FAILURE); } @@ -254,9 +281,12 @@ public: std::string body; decode_raw_body(channels, buffer, body); + auto json = nlohmann::json::parse(body); + LLSD result = LlsdFromJson(json);; + if (!isGoodStatus(mStatus)) { - log_SLM_warning("Get /listings", getStatus(), getReason(), "", body); + log_SLM_warning("Get /listings", getStatus(), getReason(), LLStringUtil::null, result); LLMarketplaceData::instance(). setSLMDataFetched(MarketplaceFetchCodes::MARKET_FETCH_FAILED); update_marketplace_category(folderId, false); @@ -266,9 +296,6 @@ public: log_SLM_infos("Get /listings", getStatus(), body); - auto json = nlohmann::json::parse(body); - LLSD result = LlsdFromJson(json);; - // Extract the info from the results for (LLSD::array_iterator it = result["listings"].beginArray(); it != result["listings"].endArray(); ++it) @@ -315,14 +342,15 @@ public: { LLMarketplaceData::instance().setUpdating(folderId, false); - LLBufferStream istr(channels, buffer.get()); - std::stringstream strstrm; - strstrm << istr.rdbuf(); - const std::string body = strstrm.str(); + std::string body; + decode_raw_body(channels, buffer, body); + + auto json = nlohmann::json::parse(body); + LLSD result = LlsdFromJson(json);; if (!isGoodStatus(mStatus)) { - log_SLM_warning("Post /listings", getStatus(), getReason(), "", body); + log_SLM_warning("Post /listings", getStatus(), getReason(), LLStringUtil::null, result); update_marketplace_category(folderId, false); gInventory.notifyObservers(); return; @@ -330,9 +358,6 @@ public: log_SLM_infos("Post /listings", getStatus(), body); - auto json = nlohmann::json::parse(body); - LLSD result = LlsdFromJson(json);; - // Extract the info from the Json string auto it = result["listings"].beginArray(); @@ -379,6 +404,9 @@ public: std::string body; decode_raw_body(channels, buffer, body); + auto json = nlohmann::json::parse(body); + LLSD result = LlsdFromJson(json); + if (!isGoodStatus(mStatus)) { if (getStatus() == HTTP_NOT_FOUND) @@ -389,7 +417,7 @@ public: } else { - log_SLM_warning("Get /listing", getStatus(), getReason(), "", body); + log_SLM_warning("Get /listing", getStatus(), getReason(), LLStringUtil::null, result); } update_marketplace_category(folderId, false); gInventory.notifyObservers(); @@ -398,9 +426,6 @@ public: log_SLM_infos("Get /listing", getStatus(), body); - auto json = nlohmann::json::parse(body); - LLSD result = LlsdFromJson(json);; - // Extract the info from the results for (LLSD::array_iterator it = result["listings"].beginArray(); it != result["listings"].endArray(); ++it) @@ -455,9 +480,12 @@ public: std::string body; decode_raw_body(channels, buffer, body); + auto json = nlohmann::json::parse(body); + LLSD result = LlsdFromJson(json); + if (!isGoodStatus(mStatus)) { - log_SLM_warning("Put /listing", getStatus(), getReason(), "", body); + log_SLM_warning("Put /listing", getStatus(), getReason(), LLStringUtil::null, result); update_marketplace_category(folderId, false); gInventory.notifyObservers(); return; @@ -465,9 +493,6 @@ public: log_SLM_infos("Put /listing", getStatus(), body); - auto json = nlohmann::json::parse(body); - LLSD result = LlsdFromJson(json);; - // Extract the info from the Json string for (LLSD::array_iterator it = result["listings"].beginArray(); it != result["listings"].endArray(); ++it) @@ -532,9 +557,12 @@ public: std::string body; decode_raw_body(channels, buffer, body); + auto json = nlohmann::json::parse(body); + LLSD result = LlsdFromJson(json); + if (!isGoodStatus(mStatus)) { - log_SLM_warning("Put /associate_inventory", getStatus(), getReason(), "", body); + log_SLM_warning("Put /associate_inventory", getStatus(), getReason(), LLStringUtil::null, result); update_marketplace_category(folderId, false); update_marketplace_category(sourceFolderId, false); gInventory.notifyObservers(); @@ -543,9 +571,6 @@ public: log_SLM_infos("Put /associate_inventory", getStatus(), body); - auto json = nlohmann::json::parse(body); - LLSD result = LlsdFromJson(json);; - for (LLSD::array_iterator it = result["listings"].beginArray(); it != result["listings"].endArray(); ++it) { @@ -604,10 +629,12 @@ public: std::string body; decode_raw_body(channels, buffer, body); + auto json = nlohmann::json::parse(body); + LLSD result = LlsdFromJson(json); if (!isGoodStatus(mStatus)) { - log_SLM_warning("Delete /listing", getStatus(), getReason(), "", body); + log_SLM_warning("Delete /listing", getStatus(), getReason(), LLStringUtil::null, result); update_marketplace_category(folderId, false); gInventory.notifyObservers(); return; @@ -615,9 +642,6 @@ public: log_SLM_infos("Delete /listing", getStatus(), body); - auto json = nlohmann::json::parse(body); - LLSD result = LlsdFromJson(json);; - for (LLSD::array_iterator it = result["listings"].beginArray(); it != result["listings"].endArray(); ++it) { diff --git a/indra/newview/skins/default/xui/en-us/notifications.xml b/indra/newview/skins/default/xui/en-us/notifications.xml index 84ef330e0..a513d5f55 100644 --- a/indra/newview/skins/default/xui/en-us/notifications.xml +++ b/indra/newview/skins/default/xui/en-us/notifications.xml @@ -363,7 +363,7 @@ There is no marketplace on the region you've moved to. + type="alert"> Copy or move to Stock Folder failed with error : '[ERROR_CODE]' @@ -375,7 +375,7 @@ Copy or move to Stock Folder failed with error : + type="alert"> Copy or move to Marketplace Listings failed with error : '[ERROR_CODE]' @@ -387,11 +387,10 @@ Copy or move to Marketplace Listings failed with error : + type="alert"> The transaction with the Marketplace failed with the following error : -Reason : '[ERROR_REASON]' -[ERROR_DESCRIPTION] + [ERROR_REASON][ERROR_DESCRIPTION] @@ -400,7 +399,7 @@ Reason : '[ERROR_REASON]' + type="alert"> We are unable to list this product or activate the version folder. Usually this is caused by missing information in the listing description form, but it may be due to errors in the folder structure. Either edit the listing or check the listing folder for errors. + type="alert"> Listing to Marketplace failed with error : '[ERROR_CODE]' + + + + + + Activating this version folder failed with error : + + '[ERROR_CODE]' + @@ -483,7 +496,7 @@ You don't have permission to copy one or more of these items to the Marketplace. ignoretext="Confirm before I try to copy a selection containing no copy items to the marketplace" name="yesnocancelbuttons" yestext="Move item(s)" - notext="Dont move item(s)" + notext="Don't move item(s)" canceltext="Cancel"/> @@ -504,7 +517,7 @@ This action will unlist this listing. Do you want to continue? icon="alertmodal.tga" name="ConfirmMerchantClearVersion" type="alertmodal"> -This action will deactivate the version folder of this listing. Do you want to continue? + This action will deactivate the version folder of the current listing. Do you want to continue? confirm This listing could not be updated. -[URL] Click to edit it on the Marketplace. +[[URL] Click here] to edit it on the Marketplace.