summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorandreykproductengine <andreykproductengine@lindenlab.com>2017-05-19 18:47:20 +0300
committerandreykproductengine <andreykproductengine@lindenlab.com>2017-05-19 18:47:20 +0300
commitc7dde30435c578b8fd4606135193e3ec8d31bd76 (patch)
treeca72152a79ef40912847350bea597269de600cc6 /indra/newview
parented249c13af3509645089b280d3a594c29c216f68 (diff)
MAINT-7424 Fixed number of items in the Trash not calculating correctly
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llinventorymodel.cpp38
-rw-r--r--indra/newview/llinventorymodel.h2
-rw-r--r--indra/newview/llinventorypanel.cpp5
3 files changed, 22 insertions, 23 deletions
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index e5fd126d53..7ee41140f0 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -799,22 +799,6 @@ void LLInventoryModel::collectDescendentsIf(const LLUUID& id,
}
}
-U32 LLInventoryModel::getDescendentsCountRecursive(const LLUUID& id, U32 max_item_limit)
-{
- LLInventoryModel::cat_array_t cats;
- LLInventoryModel::item_array_t items;
- gInventory.collectDescendents(id, cats, items, LLInventoryModel::INCLUDE_TRASH);
-
- U32 items_found = items.size() + cats.size();
-
- for (U32 i = 0; i < cats.size() && items_found <= max_item_limit; ++i)
- {
- items_found += getDescendentsCountRecursive(cats[i]->getUUID(), max_item_limit - items_found);
- }
-
- return items_found;
-}
-
void LLInventoryModel::addChangedMaskForLinks(const LLUUID& object_id, U32 mask)
{
const LLInventoryObject *obj = getObject(object_id);
@@ -3321,9 +3305,12 @@ void LLInventoryModel::emptyFolderType(const std::string notification, LLFolderT
LLSD args;
if(LLFolderType::FT_TRASH == preferred_type)
{
- static const U32 trash_max_capacity = gSavedSettings.getU32("InventoryTrashMaxCapacity");
+ LLInventoryModel::cat_array_t cats;
+ LLInventoryModel::item_array_t items;
const LLUUID trash_id = findCategoryUUIDForType(preferred_type);
- args["COUNT"] = (S32)getDescendentsCountRecursive(trash_id, trash_max_capacity);
+ gInventory.collectDescendents(trash_id, cats, items, LLInventoryModel::INCLUDE_TRASH); //All descendants
+ S32 item_count = items.size() + cats.size();
+ args["COUNT"] = item_count;
}
LLNotificationsUtil::add(notification, args, LLSD(),
boost::bind(&LLInventoryModel::callbackEmptyFolderType, this, _1, _2, preferred_type));
@@ -3433,9 +3420,20 @@ bool callback_preview_trash_folder(const LLSD& notification, const LLSD& respons
void LLInventoryModel::checkTrashOverflow()
{
- static const U32 trash_max_capacity = gSavedSettings.getU32("InventoryTrashMaxCapacity");
+ static LLCachedControl<U32> trash_max_capacity(gSavedSettings, "InventoryTrashMaxCapacity");
+
+ // Collect all descendants including those in subfolders.
+ //
+ // Note: Do we really need content of subfolders?
+ // This was made to prevent download of trash folder timeouting
+ // viewer and sub-folders are supposed to download independently.
+ LLInventoryModel::cat_array_t cats;
+ LLInventoryModel::item_array_t items;
const LLUUID trash_id = findCategoryUUIDForType(LLFolderType::FT_TRASH);
- if (getDescendentsCountRecursive(trash_id, trash_max_capacity) >= trash_max_capacity)
+ gInventory.collectDescendents(trash_id, cats, items, LLInventoryModel::INCLUDE_TRASH);
+ S32 item_count = items.size() + cats.size();
+
+ if (item_count >= trash_max_capacity)
{
if (LLFloaterPreviewTrash::isVisible())
{
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
index da78a057b5..01e0ed7e9b 100644
--- a/indra/newview/llinventorymodel.h
+++ b/indra/newview/llinventorymodel.h
@@ -265,8 +265,6 @@ public:
// Follow parent chain to the top.
bool getObjectTopmostAncestor(const LLUUID& object_id, LLUUID& result) const;
- U32 getDescendentsCountRecursive(const LLUUID& id, U32 max_item_limit);
-
//--------------------------------------------------------------------
// Find
//--------------------------------------------------------------------
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 5a7881fe49..ba2dce1f98 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -1224,7 +1224,10 @@ void LLInventoryPanel::purgeSelectedItems()
++it)
{
LLUUID item_id = static_cast<LLFolderViewModelItemInventory*>((*it)->getViewModelItem())->getUUID();
- count += gInventory.getDescendentsCountRecursive(item_id, trash_max_capacity);
+ LLInventoryModel::cat_array_t cats;
+ LLInventoryModel::item_array_t items;
+ gInventory.collectDescendents(item_id, cats, items, LLInventoryModel::INCLUDE_TRASH);
+ count += items.size() + cats.size();
}
args["COUNT"] = count;
LLNotificationsUtil::add("PurgeSelectedItems", args, LLSD(), boost::bind(&LLInventoryPanel::callbackPurgeSelectedItems, this, _1, _2));