summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMerov Linden <merov@lindenlab.com>2014-05-09 16:48:51 -0700
committerMerov Linden <merov@lindenlab.com>2014-05-09 16:48:51 -0700
commit4ffa30b533979a2214eb3996c19435f1cd16bc2a (patch)
treeb911388fcb8e1c6aebf6fd89ce94269d440a7b1b
parentb4ddacaa5a3a6a46c38e13a52254c16956e9ed5a (diff)
DD-22 : WIP : Implement deleteSLMListing() to cover the Delete /listing/:listing_id route. Avoid recursive calls in deleteListing()
-rwxr-xr-xindra/newview/llmarketplacefunctions.cpp121
-rwxr-xr-xindra/newview/llmarketplacefunctions.h5
2 files changed, 107 insertions, 19 deletions
diff --git a/indra/newview/llmarketplacefunctions.cpp b/indra/newview/llmarketplacefunctions.cpp
index a3cc3cd0b4..5aab7aa6d3 100755
--- a/indra/newview/llmarketplacefunctions.cpp
+++ b/indra/newview/llmarketplacefunctions.cpp
@@ -186,8 +186,12 @@ public:
LLUUID folder_id(folder_uuid_string);
LLUUID version_id(version_uuid_string);
- LLMarketplaceData::instance().addListing(folder_id,listing_id,version_id,is_listed);
- LLMarketplaceData::instance().setListingURL(folder_id, edit_url);
+ if (folder_id.notNull())
+ {
+ LLMarketplaceData::instance().deleteListing(folder_id,false);
+ LLMarketplaceData::instance().addListing(folder_id,listing_id,version_id,is_listed);
+ LLMarketplaceData::instance().setListingURL(folder_id, edit_url);
+ }
it++;
}
}
@@ -260,17 +264,17 @@ public:
const LLChannelDescriptors& channels,
const LLIOPipe::buffer_ptr_t& buffer)
{
- if (!isGoodStatus(status))
- {
- log_SLM_error("Put listings", status, reason, "", "");
- return;
- }
-
LLBufferStream istr(channels, buffer.get());
std::stringstream strstrm;
strstrm << istr.rdbuf();
const std::string body = strstrm.str();
+ if (!isGoodStatus(status))
+ {
+ log_SLM_error("Put listings", status, reason, "", body);
+ return;
+ }
+
Json::Value root;
Json::Reader reader;
if (!reader.parse(body,root))
@@ -279,7 +283,7 @@ public:
return;
}
- llinfos << "Merov : Update listing completedRaw : data = " << body << llendl;
+ llinfos << "Merov : Update listing completedRaw : status = " << status << ", reason = " << reason << ", body = " << body << llendl;
// Extract the info from the Json string
Json::ValueIterator it = root["listings"].begin();
@@ -341,7 +345,7 @@ public:
return;
}
- llinfos << "Merov : Update listing completedRaw : data = " << body << llendl;
+ llinfos << "Merov : Associate listing completedRaw : data = " << body << llendl;
// Extract the info from the Json string
Json::ValueIterator it = root["listings"].begin();
@@ -375,6 +379,65 @@ public:
}
};
+class LLSLMDeleteListingsResponder : public LLHTTPClient::Responder
+{
+ LOG_CLASS(LLSLMDeleteListingsResponder);
+public:
+
+ LLSLMDeleteListingsResponder() {}
+
+ virtual void completed(U32 status, const std::string& reason, const LLSD& content) { }
+
+ virtual void completedRaw(U32 status,
+ const std::string& reason,
+ const LLChannelDescriptors& channels,
+ const LLIOPipe::buffer_ptr_t& buffer)
+ {
+ LLBufferStream istr(channels, buffer.get());
+ std::stringstream strstrm;
+ strstrm << istr.rdbuf();
+ const std::string body = strstrm.str();
+
+ if (!isGoodStatus(status))
+ {
+ log_SLM_error("Delete listings", status, reason, "", body);
+ return;
+ }
+
+ Json::Value root;
+ Json::Reader reader;
+ if (!reader.parse(body,root))
+ {
+ log_SLM_error("Delete listings", status, "Json parsing failed", reader.getFormatedErrorMessages(), body);
+ return;
+ }
+
+ llinfos << "Merov : Delete listing completedRaw : data = " << body << llendl;
+
+ // Extract the info from the Json string
+ Json::ValueIterator it = root["listings"].begin();
+
+ while (it != root["listings"].end())
+ {
+ Json::Value listing = *it;
+
+ int listing_id = listing["id"].asInt();
+ std::string folder_uuid_string = listing["inventory_info"]["listing_folder_id"].asString();
+
+ LLUUID folder_id(folder_uuid_string);
+
+ // Check that the listing ID is associated to the correct folder
+ LLUUID old_listing = LLMarketplaceData::instance().getListingFolder(listing_id);
+ if (old_listing == folder_id)
+ {
+ LLMarketplaceData::instance().deleteListing(folder_id);
+ }
+
+ it++;
+ }
+ }
+};
+
// SLM Responders End
///////////////////////////////////////////////////////////////////////////////
@@ -1006,6 +1069,18 @@ void LLMarketplaceData::associateSLMListing(const LLUUID& folder_id, S32 listing
LLHTTPClient::putRaw(url, data, size, new LLSLMAssociateListingsResponder(), headers);
}
+void LLMarketplaceData::deleteSLMListing(S32 listing_id)
+{
+ LLSD headers = LLSD::emptyMap();
+ headers["Accept"] = "application/json";
+ headers["Content-Type"] = "application/json";
+
+ // Send request
+ std::string url = getSLMConnectURL("/listing/") + llformat("%d",listing_id);
+ llinfos << "Merov : delete listing : " << url << llendl;
+ LLHTTPClient::del(url, new LLSLMDeleteListingsResponder(), headers);
+}
+
std::string LLMarketplaceData::getSLMConnectURL(const std::string& route)
{
std::string url("");
@@ -1051,20 +1126,27 @@ bool LLMarketplaceData::createListing(const LLUUID& folder_id)
bool LLMarketplaceData::clearListing(const LLUUID& folder_id)
{
+ if (folder_id.isNull())
+ {
+ // Folder doesn't exists -> exit with error
+ return false;
+ }
+
// Folder id can be the root of the listing or not so we need to retrieve the root first
S32 depth = depth_nesting_in_marketplace(folder_id);
- LLUUID listing_uuid = nested_parent_id(folder_id, depth);
+ LLUUID listing_uuid = (isListed(folder_id) ? folder_id : nested_parent_id(folder_id, depth));
S32 listing_id = getListingID(listing_uuid);
+
if (listing_id == 0)
{
// Listing doesn't exists -> exit with error
return false;
}
- // Update the SLM Server so that this listing is not active anymore
- // *TODO : use deleteSLMListing()
- deleteListing(listing_uuid);
- updateSLMListing(listing_uuid, listing_id, LLUUID::null, false);
+ llinfos << "Merov : clearListing, folder id = " << folder_id << ", listing uuid = " << listing_uuid << ", listing id = " << listing_id << ", depth = " << depth << llendl;
+
+ // Update the SLM Server so that this listing is deleted (actually, archived...)
+ deleteSLMListing(listing_id);
return true;
}
@@ -1139,7 +1221,7 @@ bool LLMarketplaceData::addListing(const LLUUID& folder_id, S32 listing_id, cons
return true;
}
-bool LLMarketplaceData::deleteListing(const LLUUID& folder_id)
+bool LLMarketplaceData::deleteListing(const LLUUID& folder_id, bool update_slm)
{
if (!isListed(folder_id))
{
@@ -1148,8 +1230,11 @@ bool LLMarketplaceData::deleteListing(const LLUUID& folder_id)
}
mMarketplaceItems.erase(folder_id);
- update_marketplace_category(folder_id);
- gInventory.notifyObservers();
+ if (update_slm)
+ {
+ update_marketplace_category(folder_id);
+ gInventory.notifyObservers();
+ }
return true;
}
diff --git a/indra/newview/llmarketplacefunctions.h b/indra/newview/llmarketplacefunctions.h
index c3f7693a67..de860bf9ca 100755
--- a/indra/newview/llmarketplacefunctions.h
+++ b/indra/newview/llmarketplacefunctions.h
@@ -162,6 +162,7 @@ class LLSLMGetListingsResponder;
class LLSLMCreateListingsResponder;
class LLSLMUpdateListingsResponder;
class LLSLMAssociateListingsResponder;
+class LLSLMDeleteListingsResponder;
class LLMarketplaceData
: public LLSingleton<LLMarketplaceData>
@@ -172,6 +173,7 @@ public:
friend class LLSLMCreateListingsResponder;
friend class LLSLMUpdateListingsResponder;
friend class LLSLMAssociateListingsResponder;
+ friend class LLSLMDeleteListingsResponder;
LLMarketplaceData();
virtual ~LLMarketplaceData();
@@ -209,7 +211,7 @@ private:
// Modify Marketplace data set : each method returns true if the function succeeds, false if error
// Used internally only by SLM Responders when data are received from the SLM Server
bool addListing(const LLUUID& folder_id, S32 listing_id, const LLUUID& version_id, bool is_listed);
- bool deleteListing(const LLUUID& folder_id);
+ bool deleteListing(const LLUUID& folder_id, bool update_slm = true);
bool setListingID(const LLUUID& folder_id, S32 listing_id);
bool setVersionFolderID(const LLUUID& folder_id, const LLUUID& version_id);
bool setActivationState(const LLUUID& folder_id, bool activate);
@@ -220,6 +222,7 @@ private:
void createSLMListing(const LLUUID& folder_id);
void updateSLMListing(const LLUUID& folder_id, S32 listing_id, const LLUUID& version_id, bool is_listed);
void associateSLMListing(const LLUUID& folder_id, S32 listing_id, const LLUUID& version_id);
+ void deleteSLMListing(S32 listing_id);
std::string getSLMConnectURL(const std::string& route);
// Handling Marketplace connection and inventory connection