summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMerov Linden <merov@lindenlab.com>2015-04-07 15:22:32 -0700
committerMerov Linden <merov@lindenlab.com>2015-04-07 15:22:32 -0700
commit79b891a688c0ebd329118a7ebc1a527c72d8f83f (patch)
treeb1b3789192145d697ad5a86d2cba56b7625b1237
parent32e5d99c9d4b14116eb12a49e9349ee7b1802ee4 (diff)
DD-382 : Set count_on_hand correctly when creating or assigning a listing
-rwxr-xr-xindra/newview/llinventoryfunctions.cpp55
-rwxr-xr-xindra/newview/llinventoryfunctions.h2
-rwxr-xr-xindra/newview/llmarketplacefunctions.cpp16
3 files changed, 44 insertions, 29 deletions
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index 1a7b804d44..aeee3738f9 100755
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -1014,7 +1014,7 @@ LLUUID nested_parent_id(LLUUID cur_uuid, S32 depth)
return cur_uuid;
}
-S32 compute_stock_count(LLUUID cat_uuid)
+S32 compute_stock_count(LLUUID cat_uuid, bool force_count /* false */)
{
// Handle the case of the folder being a stock folder immediately
LLViewerInventoryCategory* cat = gInventory.getCategory(cat_uuid);
@@ -1033,36 +1033,41 @@ S32 compute_stock_count(LLUUID cat_uuid)
return item_array->size();
}
- // Grab marketplace data for this folder
- S32 depth = depth_nesting_in_marketplace(cat_uuid);
- LLUUID listing_uuid = nested_parent_id(cat_uuid, depth);
- if (!LLMarketplaceData::instance().isListed(listing_uuid))
+ // When force_count is true, we do not do any verification of the marketplace status and simply compute
+ // the stock amount based on the descendent hierarchy. This is used specifically when creating a listing.
+ if (!force_count)
{
- // If not listed, the notion of stock is meaningless so it won't be computed for any level
- return -1;
- }
-
- LLUUID version_folder_uuid = LLMarketplaceData::instance().getVersionFolder(listing_uuid);
- // Handle the case of the first 2 levels : listing and version folders
- if (depth == 1)
- {
- if (version_folder_uuid.notNull())
+ // Grab marketplace data for this folder
+ S32 depth = depth_nesting_in_marketplace(cat_uuid);
+ LLUUID listing_uuid = nested_parent_id(cat_uuid, depth);
+ if (!!LLMarketplaceData::instance().isListed(listing_uuid))
{
- // If there is a version folder, the stock value for the listing is the version folder stock
- return compute_stock_count(version_folder_uuid);
+ // If not listed, the notion of stock is meaningless so it won't be computed for any level
+ return -1;
}
- else
+
+ LLUUID version_folder_uuid = LLMarketplaceData::instance().getVersionFolder(listing_uuid);
+ // Handle the case of the first 2 levels : listing and version folders
+ if (depth == 1)
{
- // If there's no version folder associated, the notion of stock count has no meaning
- return -1;
+ if (version_folder_uuid.notNull())
+ {
+ // If there is a version folder, the stock value for the listing is the version folder stock
+ return compute_stock_count(version_folder_uuid);
+ }
+ else
+ {
+ // If there's no version folder associated, the notion of stock count has no meaning
+ return -1;
+ }
}
- }
- else if (depth == 2)
- {
- if (version_folder_uuid.notNull() && (version_folder_uuid != cat_uuid))
+ else if (depth == 2)
{
- // If there is a version folder but we're not it, our stock count is meaningless
- return -1;
+ if (version_folder_uuid.notNull() && (version_folder_uuid != cat_uuid))
+ {
+ // If there is a version folder but we're not it, our stock count is meaningless
+ return -1;
+ }
}
}
diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h
index 86124e1dad..4f4a64a7f9 100755
--- a/indra/newview/llinventoryfunctions.h
+++ b/indra/newview/llinventoryfunctions.h
@@ -83,7 +83,7 @@ bool move_folder_to_marketplacelistings(LLInventoryCategory* inv_cat, const LLUU
bool validate_marketplacelistings(LLInventoryCategory* inv_cat, validation_callback_t cb = NULL, bool fix_hierarchy = true, S32 depth = -1);
S32 depth_nesting_in_marketplace(LLUUID cur_uuid);
LLUUID nested_parent_id(LLUUID cur_uuid, S32 depth);
-S32 compute_stock_count(LLUUID cat_uuid);
+S32 compute_stock_count(LLUUID cat_uuid, bool force_count = false);
/** Miscellaneous global functions
** **
diff --git a/indra/newview/llmarketplacefunctions.cpp b/indra/newview/llmarketplacefunctions.cpp
index 6ba98ff00e..d634a252d9 100755
--- a/indra/newview/llmarketplacefunctions.cpp
+++ b/indra/newview/llmarketplacefunctions.cpp
@@ -1274,8 +1274,13 @@ void LLMarketplaceData::createSLMListing(const LLUUID& folder_id)
LLViewerInventoryCategory* category = gInventory.getCategory(folder_id);
// Get the version folder: if there is only one subfolder, we will set it as a version folder immediately
+ S32 count = -1;
LLUUID version_id = getVersionFolderIfUnique(folder_id);
-
+ if (version_id.notNull())
+ {
+ count = compute_stock_count(version_id, true);
+ }
+
// Build the json message
Json::Value root;
Json::FastWriter writer;
@@ -1283,7 +1288,7 @@ void LLMarketplaceData::createSLMListing(const LLUUID& folder_id)
root["listing"]["name"] = category->getName();
root["listing"]["inventory_info"]["listing_folder_id"] = folder_id.asString();
root["listing"]["inventory_info"]["version_folder_id"] = version_id.asString();
- root["listing"]["inventory_info"]["count_on_hand"] = -1;
+ root["listing"]["inventory_info"]["count_on_hand"] = count;
std::string json_str = writer.write(root);
@@ -1343,7 +1348,12 @@ void LLMarketplaceData::associateSLMListing(const LLUUID& folder_id, S32 listing
headers["Content-Type"] = "application/json";
// Get the version folder: if there is only one subfolder, we will set it as a version folder immediately
+ S32 count = -1;
LLUUID version_id = getVersionFolderIfUnique(folder_id);
+ if (version_id.notNull())
+ {
+ count = compute_stock_count(version_id, true);
+ }
Json::Value root;
Json::FastWriter writer;
@@ -1352,7 +1362,7 @@ void LLMarketplaceData::associateSLMListing(const LLUUID& folder_id, S32 listing
root["listing"]["id"] = listing_id;
root["listing"]["inventory_info"]["listing_folder_id"] = folder_id.asString();
root["listing"]["inventory_info"]["version_folder_id"] = version_id.asString();
- root["listing"]["inventory_info"]["count_on_hand"] = -1;
+ root["listing"]["inventory_info"]["count_on_hand"] = count;
std::string json_str = writer.write(root);