DD-19 : Fix all the subcases signaled by QA and producers, though not with the same messages. Needs validation by producer.

meow-7.2.2
Merov Linden 2014-09-22 17:54:05 -07:00
parent e9a0b93395
commit c94191b2d2
3 changed files with 76 additions and 44 deletions

View File

@ -1123,7 +1123,7 @@ bool can_move_item_to_marketplace(const LLInventoryCategory* root_folder, LLInve
// Returns true if inv_cat can be dropped in dest_folder, a folder nested in marketplace listings (or merchant inventory) under the root_folder root
// If returns is false, tooltip_msg contains an error message to display to the user (localized and all).
// bundle_size is the amount of sibling items that are getting moved to the marketplace at the same time.
bool can_move_folder_to_marketplace(const LLInventoryCategory* root_folder, LLInventoryCategory* dest_folder, LLInventoryCategory* inv_cat, std::string& tooltip_msg, S32 bundle_size)
bool can_move_folder_to_marketplace(const LLInventoryCategory* root_folder, LLInventoryCategory* dest_folder, LLInventoryCategory* inv_cat, std::string& tooltip_msg, S32 bundle_size, bool check_items)
{
bool accept = true;
@ -1197,7 +1197,7 @@ bool can_move_folder_to_marketplace(const LLInventoryCategory* root_folder, LLIn
}
// Now check that each item in the folder can be moved in the marketplace
if (accept)
if (accept && check_items)
{
for (S32 i=0; i < descendent_items.size(); ++i)
{
@ -1396,19 +1396,12 @@ bool validate_marketplacelistings(LLInventoryCategory* cat, validation_callback_
{
indent += " ";
}
if (depth == 1)
{
if (cb)
{
std::string message = indent + cat->getName() + LLTrans::getString("Marketplace Validation Intro");
cb(message,LLError::LEVEL_INFO);
}
}
else if (depth == 2)
if (depth == 2)
{
// Check out that version folders are marketplace ready
std::string message;
if (!can_move_folder_to_marketplace(cat, cat, cat, message, 0))
if (!can_move_folder_to_marketplace(cat, cat, cat, message, 0, false))
{
result = false;
if (cb)
@ -1452,6 +1445,7 @@ bool validate_marketplacelistings(LLInventoryCategory* cat, validation_callback_
items_vector.resize(LLInventoryType::IT_COUNT+1);
// Parse the items and create vectors of items to sort copyable items and stock items of various types
bool has_bad_items = false;
LLInventoryModel::item_array_t item_array_copy = *item_array;
for (LLInventoryModel::item_array_t::iterator iter = item_array_copy.begin(); iter != item_array_copy.end(); iter++)
{
@ -1462,8 +1456,8 @@ bool validate_marketplacelistings(LLInventoryCategory* cat, validation_callback_
std::string error_msg;
if (!can_move_to_marketplace(item, error_msg, false))
{
result = false;
if (cb)
has_bad_items = true;
if (cb && fix_hierarchy)
{
std::string message = indent + viewer_inv_item->getName() + LLTrans::getString("Marketplace Validation Error") + error_msg;
cb(message,LLError::LEVEL_ERROR);
@ -1491,11 +1485,11 @@ bool validate_marketplacelistings(LLInventoryCategory* cat, validation_callback_
}
}
// If we have no items in there (only folders or empty), analyze a bit further
if (count == 0)
if ((count == 0) && !has_bad_items)
{
if (cat_array->size() == 0)
{
// If this is an empty version folder (not even folders), raise an error
// If this is an empty version folder, raise an error
if (depth == 2)
{
result = false;
@ -1522,12 +1516,21 @@ bool validate_marketplacelistings(LLInventoryCategory* cat, validation_callback_
cb(message,LLError::LEVEL_WARN);
}
}
else
{
// Done with that folder : Print out the folder name unless we already found an error here
if (cb && result && (depth >= 1))
{
std::string message = indent + cat->getName() + LLTrans::getString("Marketplace Validation Log");
cb(message,LLError::LEVEL_INFO);
}
}
}
// If we have a single type of items of the right type in the right place, we're done
else if ((count == 1) && (((type == LLInventoryType::IT_COUNT) && (depth > 1)) || ((folder_type == LLFolderType::FT_MARKETPLACE_STOCK) && (depth > 2))))
else if ((count == 1) && !has_bad_items && (((type == LLInventoryType::IT_COUNT) && (depth > 1)) || ((folder_type == LLFolderType::FT_MARKETPLACE_STOCK) && (depth > 2))))
{
// Done with that folder!
if (cb)
// Done with that folder : Print out the folder name unless we already found an error here
if (cb && result && (depth >= 1))
{
std::string message = indent + cat->getName() + LLTrans::getString("Marketplace Validation Log");
cb(message,LLError::LEVEL_INFO);
@ -1535,12 +1538,12 @@ bool validate_marketplacelistings(LLInventoryCategory* cat, validation_callback_
}
else
{
// Create one folder per vector at the right depth and of the right type
for (S32 i = 0; i <= LLInventoryType::IT_COUNT; i++)
if (fix_hierarchy && !has_bad_items)
{
if (!items_vector[i].empty())
// Create one folder per vector at the right depth and of the right type
for (S32 i = 0; i <= LLInventoryType::IT_COUNT; i++)
{
if (fix_hierarchy)
if (!items_vector[i].empty())
{
// Create a new folder
LLUUID parent_uuid = (depth > 2 ? viewer_cat->getParentUUID() : viewer_cat->getUUID());
@ -1576,23 +1579,51 @@ bool validate_marketplacelistings(LLInventoryCategory* cat, validation_callback_
update_marketplace_category(folder_uuid);
gInventory.notifyObservers();
}
else if (i != LLInventoryType::IT_COUNT)
}
}
else if (cb)
{
// We are not fixing the hierarchy but reporting problems, report everything we can find
// Print the folder name
if (result && (depth >= 1))
{
if ((folder_type == LLFolderType::FT_MARKETPLACE_STOCK) && (count >= 2))
{
// Report about misplaced no-copy items
while (!items_vector[i].empty())
{
LLViewerInventoryItem* viewer_inv_item = items_vector[i].back();
if (cb)
{
std::string message = indent + viewer_inv_item->getName() + LLTrans::getString("Marketplace Validation Warning Stock Item");
cb(message,LLError::LEVEL_WARN);
}
items_vector[i].pop_back();
}
// LLStringUtil::format_map_t args;
// U32 amount = gSavedSettings.getU32("InventoryOutboxMaxFolderDepth");
// args["[AMOUNT]"] = llformat("%d",amount);
// tooltip_msg = LLTrans::getString("TooltipOutboxFolderLevels", args);
// Report if a stock folder contains a mix of items
std::string message = indent + cat->getName() + LLTrans::getString("Marketplace Validation Warning Mixed Stock");
cb(message,LLError::LEVEL_WARN);
}
else
{
// Simply print the folder name
std::string message = indent + cat->getName() + LLTrans::getString("Marketplace Validation Log");
cb(message,LLError::LEVEL_INFO);
}
}
// Scan each item and report if there's a problem
LLInventoryModel::item_array_t item_array_copy = *item_array;
for (LLInventoryModel::item_array_t::iterator iter = item_array_copy.begin(); iter != item_array_copy.end(); iter++)
{
LLInventoryItem* item = *iter;
LLViewerInventoryItem * viewer_inv_item = (LLViewerInventoryItem *) item;
std::string error_msg;
if (!can_move_to_marketplace(item, error_msg, false))
{
// Report items that shouldn't be there to start with
std::string message = indent + " " + viewer_inv_item->getName() + LLTrans::getString("Marketplace Validation Error") + error_msg;
cb(message,LLError::LEVEL_ERROR);
}
else if ((!viewer_inv_item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID(), gAgent.getGroupID())) && (folder_type != LLFolderType::FT_MARKETPLACE_STOCK))
{
// Report stock items that are misplaced
std::string message = indent + " " + viewer_inv_item->getName() + LLTrans::getString("Marketplace Validation Warning Stock Item");
cb(message,LLError::LEVEL_WARN);
}
else if (depth == 1)
{
// Report items not wrapped in version folder
std::string message = indent + " " + viewer_inv_item->getName() + LLTrans::getString("Marketplace Validation Warning Unwrapped Item");
cb(message,LLError::LEVEL_WARN);
}
}
}
@ -1607,7 +1638,7 @@ bool validate_marketplacelistings(LLInventoryCategory* cat, validation_callback_
}
gInventory.removeCategory(cat->getUUID());
gInventory.notifyObservers();
return result;
return result && !has_bad_items;
}
else
{
@ -1628,7 +1659,7 @@ bool validate_marketplacelistings(LLInventoryCategory* cat, validation_callback_
result &= validate_marketplacelistings(category, cb, fix_hierarchy);
}
return result;
return result && !has_bad_items;
}
///----------------------------------------------------------------------------

View File

@ -77,7 +77,7 @@ void copy_folder_to_outbox(LLInventoryCategory* inv_cat, const LLUUID& dest_fold
typedef boost::function<void(std::string& validation_message, LLError::ELevel log_level)> validation_callback_t;
bool can_move_item_to_marketplace(const LLInventoryCategory* root_folder, LLInventoryCategory* dest_folder, LLInventoryItem* inv_item, std::string& tooltip_msg, S32 bundle_size = 1);
bool can_move_folder_to_marketplace(const LLInventoryCategory* root_folder, LLInventoryCategory* dest_folder, LLInventoryCategory* inv_cat, std::string& tooltip_msg, S32 bundle_size = 1);
bool can_move_folder_to_marketplace(const LLInventoryCategory* root_folder, LLInventoryCategory* dest_folder, LLInventoryCategory* inv_cat, std::string& tooltip_msg, S32 bundle_size = 1, bool check_items = true);
bool move_item_to_marketplacelistings(LLInventoryItem* inv_item, LLUUID dest_folder, bool copy = false);
bool move_folder_to_marketplacelistings(LLInventoryCategory* inv_cat, const LLUUID& dest_folder, bool copy = false);
bool validate_marketplacelistings(LLInventoryCategory* inv_cat, validation_callback_t cb = NULL, bool fix_hierarchy = true);

View File

@ -2292,15 +2292,16 @@ The [[MARKETPLACE_CREATE_STORE_URL] Marketplace store] is returning errors.
Drag folders to this area to list them for sale on the [[MARKETPLACE_DASHBOARD_URL] Marketplace].
</string>
<string name="Marketplace Validation Intro"></string>
<string name="Marketplace Validation Log"></string>
<string name="Marketplace Validation Warning Stock">: Warning: stock folder must be contained by a version folder</string>
<string name="Marketplace Validation Warning Mixed Stock">: Warning: all items in a stock folder must be no-copy and of the same type</string>
<string name="Marketplace Validation Warning Empty">: Warning: folder doesn't contain any item</string>
<string name="Marketplace Validation Warning Create Stock">: Warning: creating stock folder</string>
<string name="Marketplace Validation Warning Create Version">: Warning: creating version folder</string>
<string name="Marketplace Validation Warning Move">: Warning : moving items</string>
<string name="Marketplace Validation Warning Delete">: Warning: folder content transfered to stock folder, removing empty folder</string>
<string name="Marketplace Validation Warning Stock Item">: Warning: no-copy item must be contained by a stock folder</string>
<string name="Marketplace Validation Warning Unwrapped Item">: Warning: items must be contained by a version folder</string>
<string name="Marketplace Validation Error">: Error: </string>
<string name="Marketplace Validation Error Empty Version">: Error: version folder must contain at least 1 item</string>
<string name="Marketplace Validation Error Empty Stock">: Error: stock folder must contain at least 1 item</string>