summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorAndrey Kleshchev <andreykproductengine@lindenlab.com>2021-04-06 20:12:28 +0300
committerAndrey Kleshchev <andreykproductengine@lindenlab.com>2021-04-06 20:12:52 +0300
commit77147012fff0673fc5c8ab9ffe654bd32305ad1a (patch)
treeb1d72437f34abd6f728aa4f391ca81daa74a1b99 /indra/newview
parent2be5baf70dcf4e55fcac3935e304828ced202123 (diff)
SL-14770 Sorting group notices by date disconnects the viewer.
getItemIndex() on each insertion can be very expensive, use std::set's find instead
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llpanelgroupnotices.cpp38
-rw-r--r--indra/newview/llpanelgroupnotices.h1
2 files changed, 16 insertions, 23 deletions
diff --git a/indra/newview/llpanelgroupnotices.cpp b/indra/newview/llpanelgroupnotices.cpp
index c63d04cd55..ab32ea3956 100644
--- a/indra/newview/llpanelgroupnotices.cpp
+++ b/indra/newview/llpanelgroupnotices.cpp
@@ -305,8 +305,11 @@ BOOL LLPanelGroupNotices::postBuild()
void LLPanelGroupNotices::activate()
{
- if(mNoticesList)
- mNoticesList->deleteAllItems();
+ if (mNoticesList)
+ {
+ mNoticesList->deleteAllItems();
+ mKnownNoticeIds.clear();
+ }
mPrevSelectedNotice = LLUUID();
@@ -413,6 +416,7 @@ void LLPanelGroupNotices::onClickSendMessage(void* data)
row["columns"][4]["value"] = llformat( "%u", timestamp);
self->mNoticesList->addElement(row, ADD_BOTTOM);
+ self->mKnownNoticeIds.insert(id);
self->mCreateMessage->clear();
self->mCreateSubject->clear();
@@ -443,27 +447,13 @@ void LLPanelGroupNotices::onClickNewMessage(void* data)
void LLPanelGroupNotices::refreshNotices()
{
onClickRefreshNotices(this);
- /*
- LL_DEBUGS() << "LLPanelGroupNotices::onClickGetPastNotices" << LL_ENDL;
-
- mNoticesList->deleteAllItems();
-
- LLMessageSystem* msg = gMessageSystem;
- msg->newMessage("GroupNoticesListRequest");
- msg->nextBlock("AgentData");
- msg->addUUID("AgentID",gAgent.getID());
- msg->addUUID("SessionID",gAgent.getSessionID());
- msg->nextBlock("Data");
- msg->addUUID("GroupID",self->mGroupID);
- gAgent.sendReliableMessage();
- */
-
}
void LLPanelGroupNotices::clearNoticeList()
{
mPrevSelectedNotice = mNoticesList->getStringUUIDSelectedItem();
mNoticesList->deleteAllItems();
+ mKnownNoticeIds.clear();
}
void LLPanelGroupNotices::onClickRefreshNotices(void* data)
@@ -541,13 +531,14 @@ void LLPanelGroupNotices::processNotices(LLMessageSystem* msg)
return;
}
- //with some network delays we can receive notice list more then once...
- //so add only unique notices
- S32 pos = mNoticesList->getItemIndex(id);
+ // Due to some network delays we can receive notice list more than once...
+ // So add only unique notices
+ if (mKnownNoticeIds.find(id) != mKnownNoticeIds.end())
+ {
+ // If items with this ID already in the list - skip it
+ continue;
+ }
- if(pos!=-1)//if items with this ID already in the list - skip it
- continue;
-
msg->getString("Data","Subject",subj,i);
msg->getString("Data","FromName",name,i);
msg->getBOOL("Data","HasAttachment",has_attachment,i);
@@ -582,6 +573,7 @@ void LLPanelGroupNotices::processNotices(LLMessageSystem* msg)
row["columns"][4]["value"] = llformat( "%u", timestamp);
mNoticesList->addElement(row, ADD_BOTTOM);
+ mKnownNoticeIds.insert(id);
}
mNoticesList->setNeedsSort(save_sort);
diff --git a/indra/newview/llpanelgroupnotices.h b/indra/newview/llpanelgroupnotices.h
index 46c8c241c6..55319cb9ae 100644
--- a/indra/newview/llpanelgroupnotices.h
+++ b/indra/newview/llpanelgroupnotices.h
@@ -110,6 +110,7 @@ private:
LLIconCtrl *mViewInventoryIcon;
LLScrollListCtrl *mNoticesList;
+ std::set<LLUUID> mKnownNoticeIds; // Dupplicate avoidance, to avoid searching and inserting dupplciates into mNoticesList
std::string mNoNoticesStr;