diff options
Diffstat (limited to 'indra')
| -rwxr-xr-x | indra/newview/app_settings/settings.xml | 11 | ||||
| -rwxr-xr-x | indra/newview/llinventorybridge.cpp | 1 | ||||
| -rwxr-xr-x | indra/newview/llinventorymodel.cpp | 29 | ||||
| -rwxr-xr-x | indra/newview/llinventorymodel.h | 5 | ||||
| -rwxr-xr-x | indra/newview/skins/default/xui/en/notifications.xml | 12 | 
5 files changed, 58 insertions, 0 deletions
| diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index aef2438dc7..d5de494434 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -4845,6 +4845,17 @@        <key>Value</key>        <integer>7</integer>      </map> +    <key>InventoryTrashMaxCapacity</key> +    <map> +        <key>Comment</key> +        <string>Maximum capacity of the Trash folder. User will ve offered to clean it up when exceeded.</string> +        <key>Persist</key> +        <integer>1</integer> +        <key>Type</key> +        <string>U32</string> +        <key>Value</key> +        <integer>5000</integer> +    </map>      <key>MarketplaceListingsSortOrder</key>      <map>        <key>Comment</key> diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 9782c792c9..907491a390 100755 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -2065,6 +2065,7 @@ BOOL LLItemBridge::removeItem()  	}  	LLNotifications::instance().forceResponse(params, 0); +	model->checkTrashOverflow();  	return TRUE;  } diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 1ae8fc418f..1554940a25 100755 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -771,6 +771,22 @@ 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); @@ -3333,6 +3349,7 @@ void LLInventoryModel::processMoveInventoryItem(LLMessageSystem* msg, void**)  //----------------------------------------------------------------------------  // Trash: LLFolderType::FT_TRASH, "ConfirmEmptyTrash" +// Trash: LLFolderType::FT_TRASH, "TrashIsFull" when trash exceeds maximum capacity  // Lost&Found: LLFolderType::FT_LOST_AND_FOUND, "ConfirmEmptyLostAndFound"  bool LLInventoryModel::callbackEmptyFolderType(const LLSD& notification, const LLSD& response, LLFolderType::EType preferred_type) @@ -3414,6 +3431,8 @@ void LLInventoryModel::removeCategory(const LLUUID& category_id)  			changeCategoryParent(cat, trash_id, TRUE);  		}  	} + +	checkTrashOverflow();  }  void LLInventoryModel::removeObject(const LLUUID& object_id) @@ -3444,6 +3463,16 @@ void LLInventoryModel::removeObject(const LLUUID& object_id)  	}  } +void  LLInventoryModel::checkTrashOverflow() +{ +	static const U32 trash_max_capacity = gSavedSettings.getU32("InventoryTrashMaxCapacity"); +	const LLUUID trash_id = findCategoryUUIDForType(LLFolderType::FT_TRASH); +	if (getDescendentsCountRecursive(trash_id, trash_max_capacity) >= trash_max_capacity) +	{ +		gInventory.emptyFolderType("TrashIsFull", LLFolderType::FT_TRASH); +	} +} +  const LLUUID &LLInventoryModel::getRootFolderID() const  {  	return mRootFolderID; diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h index ac336e347c..0782ec5255 100755 --- a/indra/newview/llinventorymodel.h +++ b/indra/newview/llinventorymodel.h @@ -258,6 +258,9 @@ public:  	// Follow parent chain to the top.  	bool getObjectTopmostAncestor(const LLUUID& object_id, LLUUID& result) const; + +private: +	U32 getDescendentsCountRecursive(const LLUUID& id, U32 max_item_limit);  	//--------------------------------------------------------------------  	// Find @@ -399,6 +402,8 @@ public:  	/// removeItem() or removeCategory(), whichever is appropriate  	void removeObject(const LLUUID& object_id); +	void checkTrashOverflow(); +  protected:  	void updateLinkedObjectsFromPurge(const LLUUID& baseobj_id); diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 3831b52c2c..f8d76eff58 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -5992,6 +5992,18 @@ Are you sure you want to permanently delete the contents of your Trash?    <notification     icon="alertmodal.tga" +   name="TrashIsFull" +   type="alertmodal"> +Your trash is overflowing. This may cause problems logging in. +      <tag>confirm</tag> +        <usetemplate +         name="okcancelbuttons" +         notext="I will empty trash later" +         yestext="Empty trash now"/> +  </notification> + +  <notification +   icon="alertmodal.tga"     name="ConfirmClearBrowserCache"     type="alertmodal">  Are you sure you want to delete your travel, web, and search history? | 
