diff options
| author | Nyx Linden <nyx@lindenlab.com> | 2013-05-10 12:59:01 -0400 | 
|---|---|---|
| committer | Nyx Linden <nyx@lindenlab.com> | 2013-05-10 12:59:01 -0400 | 
| commit | 0f2cffd98b69bb4493a554115a8712122ec6b3e7 (patch) | |
| tree | 6097384e2dc33495e9b27f65553b8db10ad7f469 /indra | |
| parent | 5c219f694a97d010332618eff9de7bdbeb5b6ed6 (diff) | |
| parent | 43224062a64cc658d429e434a7b673fac0b7c012 (diff) | |
merge
Diffstat (limited to 'indra')
| -rwxr-xr-x | indra/newview/llappearancemgr.cpp | 62 | ||||
| -rwxr-xr-x | indra/newview/llinventorymodel.cpp | 121 | 
2 files changed, 120 insertions, 63 deletions
| diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 40ec88f1be..3c141aa37a 100755 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -2905,15 +2905,14 @@ protected:  	// Error  	/*virtual*/ void httpFailure()  	{ -		const LLSD& content = getContent(); -		LL_WARNS("Avatar") << "appearance update request failed " -						   << dumpResponse() << LL_ENDL; +		LL_WARNS("Avatar") << "appearance update request failed, status " +						   << getStatus() << " reason " << getReason() << LL_ENDL;  		if (gSavedSettings.getBOOL("DebugAvatarAppearanceMessage"))  		{ +			const LLSD& content = getContent();  			dumpContents(gAgentAvatarp->getFullname() + "_appearance_request_error", content);  			debugCOF(content); -		  		}  		onFailure();  	} @@ -2947,7 +2946,8 @@ protected:  	void debugCOF(const LLSD& content)  	{ -		LL_DEBUGS("Avatar") << "AIS COF, version found: " << content["expected"].asInteger() << llendl; +		LL_INFOS("Avatar") << "AIS COF, version received: " << content["expected"].asInteger() +						   << " ================================= " << llendl;  		std::set<LLUUID> ais_items, local_items;  		const LLSD& cof_raw = content["cof_raw"];  		for (LLSD::array_const_iterator it = cof_raw.beginArray(); @@ -2959,30 +2959,32 @@ protected:  				ais_items.insert(item["item_id"].asUUID());  				if (item["type"].asInteger() == 24) // link  				{ -					LL_DEBUGS("Avatar") << "Link: item_id: " << item["item_id"].asUUID() -										<< " linked_item_id: " << item["asset_id"].asUUID() -										<< " name: " << item["name"].asString() -										<< llendl;  +					LL_INFOS("Avatar") << "AIS Link: item_id: " << item["item_id"].asUUID() +									   << " linked_item_id: " << item["asset_id"].asUUID() +									   << " name: " << item["name"].asString() +									   << llendl;   				}  				else if (item["type"].asInteger() == 25) // folder link  				{ -					LL_DEBUGS("Avatar") << "Folder link: item_id: " << item["item_id"].asUUID() -										<< " linked_item_id: " << item["asset_id"].asUUID() -										<< " name: " << item["name"].asString() -										<< llendl;  +					LL_INFOS("Avatar") << "AIS Folder link: item_id: " << item["item_id"].asUUID() +									   << " linked_item_id: " << item["asset_id"].asUUID() +									   << " name: " << item["name"].asString() +									   << llendl;   				}  				else  				{ -					LL_DEBUGS("Avatar") << "Other: item_id: " << item["item_id"].asUUID() -										<< " linked_item_id: " << item["asset_id"].asUUID() -										<< " name: " << item["name"].asString() -										<< llendl;  +					LL_INFOS("Avatar") << "AIS Other: item_id: " << item["item_id"].asUUID() +									   << " linked_item_id: " << item["asset_id"].asUUID() +									   << " name: " << item["name"].asString() +									   << " type: " << item["type"].asInteger() +									   << llendl;   				}  			}  		} -		LL_DEBUGS("Avatar") << llendl; -		LL_DEBUGS("Avatar") << "Local COF, version requested: " << content["observed"].asInteger() << llendl; +		LL_INFOS("Avatar") << llendl; +		LL_INFOS("Avatar") << "Local COF, version requested: " << content["observed"].asInteger()  +						   << " ================================= " << llendl;  		LLInventoryModel::cat_array_t cat_array;  		LLInventoryModel::item_array_t item_array;  		gInventory.collectDescendents(LLAppearanceMgr::instance().getCOF(), @@ -2991,26 +2993,34 @@ protected:  		{  			const LLViewerInventoryItem* inv_item = item_array.get(i).get();  			local_items.insert(inv_item->getUUID()); -			LL_DEBUGS("Avatar") << "item_id: " << inv_item->getUUID() -								<< " linked_item_id: " << inv_item->getLinkedUUID() -								<< " name: " << inv_item->getName() -								<< llendl; +			LL_INFOS("Avatar") << "LOCAL: item_id: " << inv_item->getUUID() +							   << " linked_item_id: " << inv_item->getLinkedUUID() +							   << " name: " << inv_item->getName() +							   << " parent: " << inv_item->getParentUUID() +							   << llendl;  		} -		LL_DEBUGS("Avatar") << llendl; +		LL_INFOS("Avatar") << " ================================= " << llendl;  		for (std::set<LLUUID>::iterator it = local_items.begin(); it != local_items.end(); ++it)  		{  			if (ais_items.find(*it) == ais_items.end())  			{ -				LL_DEBUGS("Avatar") << "LOCAL ONLY: " << *it << llendl; +				LL_INFOS("Avatar") << "LOCAL ONLY: " << *it << llendl;  			}  		}  		for (std::set<LLUUID>::iterator it = ais_items.begin(); it != ais_items.end(); ++it)  		{  			if (local_items.find(*it) == local_items.end())  			{ -				LL_DEBUGS("Avatar") << "AIS ONLY: " << *it << llendl; +				LL_INFOS("Avatar") << "AIS ONLY: " << *it << llendl;  			}  		} +		if (local_items.size()==0 && ais_items.size()==0) +		{ +			LL_INFOS("Avatar") << "COF contents identical, only version numbers differ (req " +							   << content["observed"].asInteger() +							   << " rcv " << content["expected"].asInteger() +							   << ")" << llendl; +		}  	}  	LLPointer<LLHTTPRetryPolicy> mRetryPolicy; diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index bb5da2e9db..b49e617f62 100755 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -1197,14 +1197,39 @@ void LLInventoryModel::onDescendentsPurgedFromServer(const LLUUID& object_id)  		}  		count = categories.count(); -		for(S32 i = 0; i < count; ++i) +		// Slightly kludgy way to make sure categories are removed +		// only after their child categories have gone away. + +		// FIXME: Would probably make more sense to have this whole +		// descendent-clearing thing be a post-order recursive +		// function to get the leaf-up behavior automatically. +		S32 deleted_count; +		S32 total_deleted_count = 0; +		do  		{ -			uu_id = categories.get(i)->getUUID(); -			if (getCategory(uu_id)) +			deleted_count = 0; +			for(S32 i = 0; i < count; ++i)  			{ -				deleteObject(uu_id); +				uu_id = categories.get(i)->getUUID(); +				if (getCategory(uu_id)) +				{ +					cat_array_t* cat_list = getUnlockedCatArray(uu_id); +					if (!cat_list || (cat_list->size() == 0)) +					{ +						deleteObject(uu_id); +						deleted_count++; +					} +				}  			} +			total_deleted_count += deleted_count; +		} +		while (deleted_count > 0); +		if (total_deleted_count != count) +		{ +			llwarns << "Unexpected count of categories deleted, got " +					<< total_deleted_count << " expected " << count << llendl;  		} +		gInventory.validate();  	}  } @@ -1258,12 +1283,20 @@ void LLInventoryModel::deleteObject(const LLUUID& id)  	item_list = getUnlockedItemArray(id);  	if(item_list)  	{ +		if (item_list->size()) +		{ +			llwarns << "Deleting cat " << id << " while it still has child items" << llendl; +		}  		delete item_list;  		mParentChildItemTree.erase(id);  	}  	cat_list = getUnlockedCatArray(id);  	if(cat_list)  	{ +		if (cat_list->size()) +		{ +			llwarns << "Deleting cat " << id << " while it still has child cats" << llendl; +		}  		delete cat_list;  		mParentChildCategoryTree.erase(id);  	} @@ -2084,11 +2117,16 @@ void LLInventoryModel::buildParentChildMap()  	S32 count = cats.count();  	S32 i;  	S32 lost = 0; +	cat_array_t lost_cats;  	for(i = 0; i < count; ++i)  	{  		LLViewerInventoryCategory* cat = cats.get(i);  		catsp = getUnlockedCatArray(cat->getParentUUID()); -		if(catsp) +		if(catsp && +		   // Only the two root folders should be children of null. +		   // Others should go to lost & found. +		   (cat->getParentUUID().notNull() ||  +			cat->getPreferredType() == LLFolderType::FT_ROOT_INVENTORY ))  		{  			catsp->put(cat);  		} @@ -2103,34 +2141,7 @@ void LLInventoryModel::buildParentChildMap()  			llinfos << "Lost category: " << cat->getUUID() << " - "  					<< cat->getName() << llendl;  			++lost; -			// plop it into the lost & found. -			LLFolderType::EType pref = cat->getPreferredType(); -			if(LLFolderType::FT_NONE == pref) -			{ -				cat->setParent(findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND)); -			} -			else if(LLFolderType::FT_ROOT_INVENTORY == pref) -			{ -				// it's the root -				cat->setParent(LLUUID::null); -			} -			else -			{ -				// it's a protected folder. -				cat->setParent(gInventory.getRootFolderID()); -			} -			// FIXME note that updateServer() fails with protected -			// types, so this will not work as intended in that case. -			cat->updateServer(TRUE); -			catsp = getUnlockedCatArray(cat->getParentUUID()); -			if(catsp) -			{ -				catsp->put(cat); -			} -			else -			{		 -				llwarns << "Lost and found Not there!!" << llendl; -			} +			lost_cats.put(cat);  		}  	}  	if(lost) @@ -2138,6 +2149,42 @@ void LLInventoryModel::buildParentChildMap()  		llwarns << "Found  " << lost << " lost categories." << llendl;  	} +	// Do moves in a separate pass to make sure we've properly filed +	// the FT_LOST_AND_FOUND category before we try to find its UUID. +	for(i = 0; i<lost_cats.count(); ++i) +	{ +		LLViewerInventoryCategory *cat = lost_cats.get(i); + +		// plop it into the lost & found. +		LLFolderType::EType pref = cat->getPreferredType(); +		if(LLFolderType::FT_NONE == pref) +		{ +			cat->setParent(findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND)); +		} +		else if(LLFolderType::FT_ROOT_INVENTORY == pref) +		{ +			// it's the root +			cat->setParent(LLUUID::null); +		} +		else +		{ +			// it's a protected folder. +			cat->setParent(gInventory.getRootFolderID()); +		} +		// FIXME note that updateServer() fails with protected +		// types, so this will not work as intended in that case. +		cat->updateServer(TRUE); +		catsp = getUnlockedCatArray(cat->getParentUUID()); +		if(catsp) +		{ +			catsp->put(cat); +		} +		else +		{		 +			llwarns << "Lost and found Not there!!" << llendl; +		} +	} +  	const BOOL COF_exists = (findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, FALSE) != LLUUID::null);  	sFirstTimeInViewer2 = !COF_exists || gAgent.isFirstLogin(); @@ -2267,10 +2314,10 @@ void LLInventoryModel::buildParentChildMap()  		}  	} -	// if (!gInventory.validate()) -	// { -	// 	llwarns << "model failed validity check!" << llendl; -	// } +	if (!gInventory.validate()) +	{ +	 	llwarns << "model failed validity check!" << llendl; +	}  }  struct LLUUIDAndName | 
