From bf60675ee5bca3e6e388a6dd62debdf3e7eca8ec Mon Sep 17 00:00:00 2001
From: andreykproductengine <andreykproductengine@lindenlab.com>
Date: Thu, 5 Apr 2018 17:01:19 +0300
Subject: [PATCH] MAINT-8465 Item should be moved to lost and found folder

---
 indra/newview/llinventorymodel.cpp | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index 60fe1528763..76bf87cfe59 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -931,8 +931,11 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item, U32 mask)
 		{
 			// item with null parent will end in random location and then in Lost&Found,
 			// either move to default folder as if it is new item or don't move at all
-			LL_DEBUGS(LOG_INV) << "Update attempts to reparent item to null folder. Resorting!" << LL_ENDL;
-			new_parent_id = findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(new_item->getType()));
+			LL_WARNS(LOG_INV) << "Update attempts to reparent item " << item->getUUID()
+				<< " to null folder. Moving to Lost&Found. Old item name: " << old_item->getName()
+				<< ". New name: " << item->getName()
+				<< "." << LL_ENDL;
+			new_parent_id = findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
 			update_parent_on_server = true;
 		}
 
@@ -948,6 +951,11 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item, U32 mask)
 			item_array = get_ptr_in_map(mParentChildItemTree, new_parent_id);
 			if(item_array)
 			{
+				if (update_parent_on_server)
+				{
+					LLInventoryModel::LLCategoryUpdate update(new_parent_id, 1);
+					gInventory.accountForUpdate(update);
+				}
 				item_array->push_back(old_item);
 			}
 			mask |= LLInventoryObserver::STRUCTURE;
@@ -959,9 +967,7 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item, U32 mask)
 		old_item->copyViewerItem(item);
 		if (update_parent_on_server)
 		{
-			LLInventoryModel::LLCategoryUpdate update(new_parent_id, 1);
-			gInventory.accountForUpdate(update);
-			// Update on server or item will end up in Lost&Found
+			// Parent id at server is null, so update server even if item already is in the same folder
 			old_item->setParent(new_parent_id);
 			new_item->updateParentOnServer(FALSE);
 		}
-- 
GitLab