sup, breakin localinv here. Trying to implement checks to make sure the parent category exists, and if not toss it to the "orphaned" category.

This commit is contained in:
Hazim Gazov
2010-05-13 08:43:25 -03:00
parent 7df897c585
commit 011b1ad321

View File

@@ -179,6 +179,8 @@ void LLLocalInventory::loadInvCache(std::string filename)
LLInventoryModel::cat_array_t cats;
LLInventoryModel::item_array_t items;
LLDynamicArray<LLUUID> cat_uuids;
if(LLInventoryModel::loadFromFile(inv_filename, cats, items))
{
// create a container category for everything
@@ -189,6 +191,15 @@ void LLLocalInventory::loadInvCache(std::string filename)
container->setUUID(container_id);
container->setParent(gLocalInventoryRoot);
container->setPreferredType(LLAssetType::AT_NONE);
LLViewerInventoryCategory* orphaned_items = new LLViewerInventoryCategory(gAgent.getID());
orphaned_items->rename("Orphaned Items");
LLUUID orphaned_items_id;
orphaned_items_id.generate();
container->setUUID(orphaned_items_id);
container->setParent(container->getUUID());
container->setPreferredType(LLAssetType::AT_NONE);
LLInventoryModel::update_map_t container_update;
++container_update[container->getParentUUID()];
gInventory.accountForUpdate(container_update);
@@ -197,14 +208,23 @@ void LLLocalInventory::loadInvCache(std::string filename)
// Add all categories
LLInventoryModel::cat_array_t::iterator cat_iter = cats.begin();
LLInventoryModel::cat_array_t::iterator cat_uuid_iter = cats.begin();
LLInventoryModel::cat_array_t::iterator cat_end = cats.end();
//first of all, let's build the list of category UUIDs
for(; cat_uuid_iter != cat_end; ++cat_uuid_iter)
{
cat_uuids.push_back((*cat_uuid_iter)->getUUID());
}
for(; cat_iter != cat_end; ++cat_iter)
{
// Conditionally change its parent
// Note: Should I search for missing parent id's?
// Yep!
if((*cat_iter)->getParentUUID().isNull())
{
(*cat_iter)->setParent(container_id);
(*cat_iter)->setParent(orphaned_items_id);
}
// Avoid conflicts with real inventory...
@@ -223,6 +243,14 @@ void LLLocalInventory::loadInvCache(std::string filename)
continue;
}
}
if(std::find(cat_uuids.begin(), cat_uuids.end(), (*cat_iter)->getParentUUID()) == cat_uuids.end())
{
//oh good jorb, this parent doesn't exist.
//just shove it into the "Orphaned" category *sigh*
llinfos << "Missing parent for " << (*cat_iter)->getUUID() << llendl;
(*cat_iter)->setParent(orphaned_items_id);
}
LLInventoryModel::update_map_t update;
++update[(*cat_iter)->getParentUUID()];
@@ -238,10 +266,18 @@ void LLLocalInventory::loadInvCache(std::string filename)
{
// Conditionally change its parent
// Note: Should I search for missing parent id's?
// Edit: yes.
if((*item_iter)->getParentUUID().isNull())
{
(*item_iter)->setParent(container_id);
}
if(std::find(cat_uuids.begin(), cat_uuids.end(), (*item_iter)->getParentUUID()) == cat_uuids.end())
{
//oh good jorb, this parent doesn't exist.
//just shove it into the "Orphaned" category *sigh*
(*item_iter)->setParent(orphaned_items_id);
}
// Avoid conflicts with real inventory...
// If this item id already exists, ignore it
@@ -286,6 +322,8 @@ void LLLocalInventory::loadInvCache(std::string filename)
args["ERROR_MESSAGE"] = message.str();
LLNotifications::instance().add("ErrorMessage", args);
}
cat_uuids.clear();
}
//static