CHOP-854: Use new LLInventoryModel::removeObject() to discard offer.

Introduce new LLInventoryModel::removeCategory() method comparable to
removeItem(), but for folder objects (using changeCategoryParent() rather than
changeItemParent()). Introduce removeObject() method that calls one of the
above, depending on runtime object type.
meow-7.2.2
Nat Goodspeed 2012-03-27 22:39:31 -04:00
parent b8561da34d
commit b7e0e44e32
3 changed files with 48 additions and 2 deletions

View File

@ -46,6 +46,7 @@
#include "llviewerregion.h"
#include "llcallbacklist.h"
#include "llvoavatarself.h"
#include <typeinfo>
//#define DIFF_INVENTORY_FILES
#ifdef DIFF_INVENTORY_FILES
@ -3003,6 +3004,44 @@ void LLInventoryModel::removeItem(const LLUUID& item_id)
}
}
void LLInventoryModel::removeCategory(const LLUUID& category_id)
{
LLViewerInventoryCategory* cat = getCategory(category_id);
if (! cat)
{
LL_WARNS("Inventory") << "couldn't find inventory folder " << category_id << LL_ENDL;
}
else
{
const LLUUID new_parent = findCategoryUUIDForType(LLFolderType::FT_TRASH);
LL_INFOS("Inventory") << "Moving to Trash (" << new_parent << "):" << LL_ENDL;
changeCategoryParent(cat, new_parent, TRUE);
}
}
void LLInventoryModel::removeObject(const LLUUID& object_id)
{
LLInventoryObject* obj = getObject(object_id);
if (dynamic_cast<LLViewerInventoryItem*>(obj))
{
removeItem(object_id);
}
else if (dynamic_cast<LLViewerInventoryCategory*>(obj))
{
removeCategory(object_id);
}
else if (obj)
{
LL_WARNS("Inventory") << "object ID " << object_id
<< " is an object of unrecognized class "
<< typeid(*obj).name() << LL_ENDL;
}
else
{
LL_WARNS("Inventory") << "object ID " << object_id << " not found" << LL_ENDL;
}
}
const LLUUID &LLInventoryModel::getRootFolderID() const
{
return mRootFolderID;

View File

@ -325,8 +325,13 @@ public:
// consistent internal state. No cache accounting, observer
// notification, or server update is performed.
void deleteObject(const LLUUID& id);
/// move Item item_id to Trash
void removeItem(const LLUUID& item_id);
/// move Category category_id to Trash
void removeCategory(const LLUUID& category_id);
/// removeItem() or removeCategory(), whichever is appropriate
void removeObject(const LLUUID& object_id);
// Delete a particular inventory object by ID, and delete it from
// the server. Also updates linked items.
void purgeObject(const LLUUID& id);

View File

@ -1064,7 +1064,9 @@ public:
// If we now try to remove the inventory item, it will cause a nested
// notifyObservers() call, which won't work.
// So defer moving the item to trash until viewer gets idle (in a moment).
LLAppViewer::instance()->addOnIdleCallback(boost::bind(&LLInventoryModel::removeItem, &gInventory, mObjectID));
// Use removeObject() rather than removeItem() because at this level,
// the object could be either an item or a folder.
LLAppViewer::instance()->addOnIdleCallback(boost::bind(&LLInventoryModel::removeObject, &gInventory, mObjectID));
gInventory.removeObserver(this);
delete this;
}