For EXT-1591: Current Outfit Folder contains duplicate attachment items after relog.

--HG--
branch : avatar-pipeline
meow-7.2.2
Brad Payne (Vir Linden) 2009-11-03 12:22:31 -05:00
parent 7add9de18f
commit 9109809fb1
4 changed files with 41 additions and 15 deletions

View File

@ -2014,7 +2014,8 @@ void LLInitialWearablesFetch::done()
LLFindWearables is_wearable;
gInventory.collectDescendentsIf(mCompleteFolders.front(), cat_array, wearable_array,
LLInventoryModel::EXCLUDE_TRASH, is_wearable);
LLAppearanceManager::setAttachmentInvLinkEnable(true);
if (wearable_array.count() > 0)
{
LLAppearanceManager::instance().updateAppearanceFromCOF();

View File

@ -1181,6 +1181,14 @@ void LLAppearanceManager::dumpItemArray(const LLInventoryModel::item_array_t& it
std::set<LLUUID> LLAppearanceManager::sRegisteredAttachments;
bool LLAppearanceManager::sAttachmentInvLinkEnabled(false);
/* static */
void LLAppearanceManager::setAttachmentInvLinkEnable(bool val)
{
llinfos << "setAttachmentInvLinkEnable => " << (int) val << llendl;
sAttachmentInvLinkEnabled = val;
}
void dumpAttachmentSet(const std::set<LLUUID>& atts, const std::string& msg)
{
@ -1204,6 +1212,22 @@ void LLAppearanceManager::registerAttachment(const LLUUID& item_id)
{
sRegisteredAttachments.insert(item_id);
dumpAttachmentSet(sRegisteredAttachments,"after register:");
if (sAttachmentInvLinkEnabled)
{
LLViewerInventoryItem *item = gInventory.getItem(item_id);
if (item)
{
LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Adding attachment link:");
LLAppearanceManager::wearItem(item,false); // Add COF link for item.
gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
gInventory.notifyObservers();
}
}
else
{
llinfos << "no link changes, inv link not enabled" << llendl;
}
}
/* static */
@ -1211,4 +1235,17 @@ void LLAppearanceManager::unregisterAttachment(const LLUUID& item_id)
{
sRegisteredAttachments.erase(item_id);
dumpAttachmentSet(sRegisteredAttachments,"after unregister:");
if (sAttachmentInvLinkEnabled)
{
LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Removing attachment link:");
LLAppearanceManager::removeItemLinks(item_id, false);
// BAP - needs to change for label to track link.
gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
gInventory.notifyObservers();
}
else
{
llinfos << "no link changes, inv link not enabled" << llendl;
}
}

View File

@ -70,7 +70,7 @@ public:
static void dumpItemArray(const LLInventoryModel::item_array_t& items, const std::string& msg);
static void unregisterAttachment(const LLUUID& item_id);
static void registerAttachment(const LLUUID& item_id);
static void setAttachmentInvLinkEnable(bool val);
private:
static void filterWearableItems(LLInventoryModel::item_array_t& items, S32 max_per_type);
@ -99,6 +99,7 @@ private:
static void purgeCategory(const LLUUID& category, bool keep_outfit_links);
static std::set<LLUUID> sRegisteredAttachments;
static bool sAttachmentInvLinkEnabled;
};

View File

@ -1081,15 +1081,7 @@ const LLViewerJointAttachment *LLVOAvatarSelf::attachObject(LLViewerObject *view
{
const LLUUID& attachment_id = viewer_object->getItemID();
LLAppearanceManager::registerAttachment(attachment_id);
LLViewerInventoryItem *item = gInventory.getItem(attachment_id);
if (item)
{
LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Adding attachment link:");
LLAppearanceManager::wearItem(item,false); // Add COF link for item.
gInventory.addChangedMask(LLInventoryObserver::LABEL, attachment_id);
}
}
gInventory.notifyObservers();
return attachment;
}
@ -1127,14 +1119,9 @@ BOOL LLVOAvatarSelf::detachObject(LLViewerObject *viewer_object)
}
else
{
LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Removing attachment link:");
LLAppearanceManager::removeItemLinks(attachment_id, false);
LLAppearanceManager::unregisterAttachment(attachment_id);
}
// BAP - needs to change for label to track link.
gInventory.addChangedMask(LLInventoryObserver::LABEL, attachment_id);
gInventory.notifyObservers();
return TRUE;
}
return FALSE;