diff options
author | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2023-08-15 00:00:40 +0300 |
---|---|---|
committer | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2023-08-15 00:00:40 +0300 |
commit | fa5af90e30aaaf638d5083dff6258a66da06c00c (patch) | |
tree | 1ef39bd2dfb696cf741e8dcce4b10dc69eb29a6b /indra | |
parent | 809ebe7d6a98ec2ed450f3fd0bdb95dc8bd648cd (diff) |
SL-18629 Fix observers failing to start fetching items in some cases
start(folder.first) ignored fetch request due to folder having version
Diffstat (limited to 'indra')
-rw-r--r-- | indra/newview/llinventoryobserver.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp index 0b02528246..0d96c7a005 100644 --- a/indra/newview/llinventoryobserver.cpp +++ b/indra/newview/llinventoryobserver.cpp @@ -266,8 +266,8 @@ void LLInventoryFetchItemsObserver::startFetch() LLSD items_llsd; - typedef std::map<LLUUID, uuid_vec_t> requests_by_fodlers_t; - requests_by_fodlers_t requests; + typedef std::map<LLUUID, uuid_vec_t> requests_by_folders_t; + requests_by_folders_t requests; for (uuid_vec_t::const_iterator it = mIDs.begin(); it < mIDs.end(); ++it) { LLViewerInventoryItem* item = gInventory.getItem(*it); @@ -335,12 +335,19 @@ void LLInventoryFetchItemsObserver::startFetch() if (aisv3) { const S32 MAX_INDIVIDUAL_REQUESTS = 10; - for (requests_by_fodlers_t::value_type &folder : requests) + for (requests_by_folders_t::value_type &folder : requests) { + LLViewerInventoryCategory* cat = gInventory.getCategory(folder.first); if (folder.second.size() > MAX_INDIVIDUAL_REQUESTS) { // requesting one by one will take a while // do whole folder + if (cat) + { + // Either drop version or use scheduleFolderFetch to force-fetch + // otherwise background fetch will ignore folders with set version + cat->setVersion(LLViewerInventoryCategory::VERSION_UNKNOWN); + } LLInventoryModelBackgroundFetch::getInstance()->start(folder.first); } else @@ -355,7 +362,8 @@ void LLInventoryFetchItemsObserver::startFetch() } else if (cat->getViewerDescendentCount() <= folder.second.size()) { - // start fetching whole folder since we need all items + // Start fetching whole folder since we need all items + // Drop version or use scheduleFolderFetch cat->setVersion(LLViewerInventoryCategory::VERSION_UNKNOWN); cat->fetch(); |