From 00529b31b722d64699615241d95ea492134bc9bf Mon Sep 17 00:00:00 2001
From: Mnikolenko Productengine <mnikolenko@productengine.com>
Date: Thu, 4 May 2017 15:00:33 +0300
Subject: [PATCH] MAINT-7383 Revise notification for Empty Trash / Purge trash
 action to include number of items being deleted.

---
 indra/newview/llavataractions.cpp             | 28 +++++++++++++++++++
 indra/newview/llavataractions.h               |  3 ++
 indra/newview/llinventorymodel.cpp            |  9 +++++-
 indra/newview/llpanelmaininventory.cpp        |  1 +
 .../skins/default/xui/en/menu_inventory.xml   |  3 +-
 .../skins/default/xui/en/notifications.xml    | 17 +++++++++--
 6 files changed, 55 insertions(+), 6 deletions(-)

diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 2045c3e2971..0d0861efcc1 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -930,6 +930,16 @@ void LLAvatarActions::shareWithAvatars(LLView * panel)
 }
 
 
+//static
+void LLAvatarActions::purgeSelectedItems()
+{
+	const std::set<LLUUID> inventory_selected_uuids = LLAvatarActions::getInventorySelectedUUIDs();
+	if (inventory_selected_uuids.empty()) return;
+	LLSD args;
+	args["COUNT"] = (S32)inventory_selected_uuids.size();
+	LLNotificationsUtil::add("PurgeSelectedItems", args, LLSD(), &callbackPurgeSelectedItems);
+}
+
 // static
 bool LLAvatarActions::canShareSelectedItems(LLInventoryPanel* inv_panel /* = NULL*/)
 {
@@ -1170,6 +1180,24 @@ bool LLAvatarActions::callbackAddFriendWithMessage(const LLSD& notification, con
 	return false;
 }
 
+bool LLAvatarActions::callbackPurgeSelectedItems(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+	if (option == 0)
+	{
+		const std::set<LLUUID> inventory_selected_uuids = LLAvatarActions::getInventorySelectedUUIDs();
+		if (inventory_selected_uuids.empty()) return false;
+
+		std::set<LLUUID>::const_iterator it = inventory_selected_uuids.begin();
+		const std::set<LLUUID>::const_iterator it_end = inventory_selected_uuids.end();
+		for (; it != it_end; ++it)
+		{
+			remove_inventory_object(*it, NULL);
+		}
+	}
+	return false;
+}
+
 // static
 bool LLAvatarActions::handleKick(const LLSD& notification, const LLSD& response)
 {
diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h
index 256d44d820a..8ff1ef073df 100644
--- a/indra/newview/llavataractions.h
+++ b/indra/newview/llavataractions.h
@@ -125,6 +125,8 @@ class LLAvatarActions
 	 */
 	static void shareWithAvatars(LLView * panel);
 
+	static void purgeSelectedItems();
+
 	/**
 	 * Block/unblock the avatar.
 	 */
@@ -243,6 +245,7 @@ class LLAvatarActions
 
 private:
 	static bool callbackAddFriendWithMessage(const LLSD& notification, const LLSD& response);
+	static bool callbackPurgeSelectedItems(const LLSD& notification, const LLSD& response);
 	static bool handleRemove(const LLSD& notification, const LLSD& response);
 	static bool handlePay(const LLSD& notification, const LLSD& response, LLUUID avatar_id);
 	static bool handleFreezeAvatar(const LLSD& notification, const LLSD& response);
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index 8a605ff5743..0fe03583f5b 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -3318,7 +3318,14 @@ void LLInventoryModel::emptyFolderType(const std::string notification, LLFolderT
 {
 	if (!notification.empty())
 	{
-		LLNotificationsUtil::add(notification, LLSD(), LLSD(),
+		LLSD args;
+		if(LLFolderType::FT_TRASH == preferred_type)
+		{
+			static const U32 trash_max_capacity = gSavedSettings.getU32("InventoryTrashMaxCapacity");
+			const LLUUID trash_id = findCategoryUUIDForType(preferred_type);
+			args["COUNT"] = (S32)getDescendentsCountRecursive(trash_id, trash_max_capacity);
+		}
+		LLNotificationsUtil::add(notification, args, LLSD(),
 										boost::bind(&LLInventoryModel::callbackEmptyFolderType, this, _1, _2, preferred_type));
 	}
 	else
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index fa946ee5c7a..adbcf377c0c 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -118,6 +118,7 @@ LLPanelMainInventory::LLPanelMainInventory(const LLPanel::Params& p)
 	mCommitCallbackRegistrar.add("Inventory.ResetFilters", boost::bind(&LLPanelMainInventory::resetFilters, this));
 	mCommitCallbackRegistrar.add("Inventory.SetSortBy", boost::bind(&LLPanelMainInventory::setSortBy, this, _2));
 	mCommitCallbackRegistrar.add("Inventory.Share",  boost::bind(&LLAvatarActions::shareWithAvatars, this));
+	mCommitCallbackRegistrar.add("Inventory.Purge",  boost::bind(&LLAvatarActions::purgeSelectedItems));
 
 	mSavedFolderState = new LLSaveFolderState();
 	mSavedFolderState->setApply(FALSE);
diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml
index e1f9269c70b..7b3a9a2e3ec 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory.xml
@@ -518,8 +518,7 @@
      layout="topleft"
      name="Purge Item">
         <menu_item_call.on_click
-         function="Inventory.DoToSelected"
-         parameter="purge" />
+         function="Inventory.Purge"/>
     </menu_item_call>
     <menu_item_call
      label="Restore Item"
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 60162bee234..90184a581ed 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -6186,15 +6186,26 @@ The folder &apos;[FOLDERNAME]&apos; is a system folder. Deleting system folders
      yestext="OK"/>
   </notification>
 
+  <notification
+   icon="alertmodal.tga"
+   name="PurgeSelectedItems"
+   type="alertmodal">
+[COUNT] item(s) will be permanently deleted. Are you sure you want to permanently delete selected item(s) from your Trash?
+    <tag>confirm</tag>
+    <usetemplate
+     name="okcancelbuttons"
+     notext="Cancel"
+     yestext="OK"/>
+  </notification>
+
   <notification
    icon="alertmodal.tga"
    name="ConfirmEmptyTrash"
    type="alertmodal">
-Are you sure you want to permanently delete the contents of your Trash?
+[COUNT] items will be permanently deleted. Are you sure you want to permanently delete the contents of your Trash?
     <tag>confirm</tag>
     <usetemplate
-     ignoretext="Confirm before I empty the inventory Trash folder"
-     name="okcancelignore"
+     name="okcancelbuttons"
      notext="Cancel"
      yestext="OK"/>
   </notification>
-- 
GitLab