diff options
| -rw-r--r-- | indra/newview/llinventorymodel.cpp | 38 | ||||
| -rw-r--r-- | indra/newview/llinventorymodel.h | 2 | ||||
| -rw-r--r-- | indra/newview/llinventorypanel.cpp | 5 | 
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)); | 
