PATH-292: Fixing the post-modify update handler to update the linkset list rather than overwrite it.

master
Todd Stinson 2012-02-23 17:12:44 -08:00
parent 73aa47f391
commit 05a49dd425
4 changed files with 32 additions and 12 deletions

View File

@ -320,7 +320,7 @@ void LLFloaterPathfindingLinksets::requestSetLinksets(LLPathfindingLinksetListPt
llassert(!isMessagingInProgress());
if (!isMessagingInProgress())
{
switch (LLPathfindingManager::getInstance()->requestSetLinksets(pLinksetList, pLinksetUse, pA, pB, pC, pD, boost::bind(&LLFloaterPathfindingLinksets::handleNewLinksets, this, _1, _2)))
switch (LLPathfindingManager::getInstance()->requestSetLinksets(pLinksetList, pLinksetUse, pA, pB, pC, pD, boost::bind(&LLFloaterPathfindingLinksets::handleUpdateLinksets, this, _1, _2)))
{
case LLPathfindingManager::kLinksetsRequestStarted :
setMessagingState(kMessagingSetRequestSent);
@ -359,6 +359,26 @@ void LLFloaterPathfindingLinksets::handleNewLinksets(LLPathfindingManager::ELink
}
}
void LLFloaterPathfindingLinksets::handleUpdateLinksets(LLPathfindingManager::ELinksetsRequestStatus pLinksetsRequestStatus, LLPathfindingLinksetListPtr pLinksetsListPtr)
{
mLinksetsListPtr->update(*pLinksetsListPtr);
updateScrollList();
switch (pLinksetsRequestStatus)
{
case LLPathfindingManager::kLinksetsRequestCompleted :
setMessagingState(kMessagingComplete);
break;
case LLPathfindingManager::kLinksetsRequestError :
setMessagingState(kMessagingSetError);
break;
default :
setMessagingState(kMessagingSetError);
llassert(0);
break;
}
}
void LLFloaterPathfindingLinksets::onApplyAllFilters()
{
applyFilters();

View File

@ -113,6 +113,7 @@ private:
void requestGetLinksets();
void requestSetLinksets(LLPathfindingLinksetListPtr pLinksetList, LLPathfindingLinkset::ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD);
void handleNewLinksets(LLPathfindingManager::ELinksetsRequestStatus pLinksetsRequestStatus, LLPathfindingLinksetListPtr pLinksetsListPtr);
void handleUpdateLinksets(LLPathfindingManager::ELinksetsRequestStatus pLinksetsRequestStatus, LLPathfindingLinksetListPtr pLinksetsListPtr);
void onApplyAllFilters();
void onClearFiltersClicked();

View File

@ -62,24 +62,23 @@ LLPathfindingLinksetList::~LLPathfindingLinksetList()
clear();
}
void LLPathfindingLinksetList::update(const LLSD& pLinksetItems)
void LLPathfindingLinksetList::update(const LLPathfindingLinksetList &pUpdateLinksetList)
{
for (LLSD::map_const_iterator linksetItemIter = pLinksetItems.beginMap();
linksetItemIter != pLinksetItems.endMap(); ++linksetItemIter)
for (LLPathfindingLinksetList::const_iterator updateLinksetIter = pUpdateLinksetList.begin();
updateLinksetIter != pUpdateLinksetList.end(); ++updateLinksetIter)
{
const std::string& uuid(linksetItemIter->first);
const LLSD& linksetData = linksetItemIter->second;
LLPathfindingLinksetMap::iterator linksetIter = this->find(uuid);
const std::string &uuid = updateLinksetIter->first;
const LLPathfindingLinksetPtr updateLinksetPtr = updateLinksetIter->second;
LLPathfindingLinksetList::iterator linksetIter = find(uuid);
if (linksetIter == end())
{
LLPathfindingLinksetPtr linkset(new LLPathfindingLinkset(uuid, linksetData));
insert(std::pair<std::string, LLPathfindingLinksetPtr>(uuid, linkset));
insert(std::pair<std::string, LLPathfindingLinksetPtr>(uuid, updateLinksetPtr));
}
else
{
LLPathfindingLinksetPtr linksetPtr = linksetIter->second;
const LLPathfindingLinkset newLinkset(uuid, linksetData);
*linksetPtr = newLinkset;
*linksetPtr = *updateLinksetPtr;
}
}
}

View File

@ -47,7 +47,7 @@ public:
LLPathfindingLinksetList(const LLSD& pLinksetItems);
virtual ~LLPathfindingLinksetList();
void update(const LLSD& pLinksetItems);
void update(const LLPathfindingLinksetList &pUpdateLinksetList);
LLSD encodeAlteredFields(LLPathfindingLinkset::ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) const;