diff options
| author | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2023-11-28 23:27:18 +0200 | 
|---|---|---|
| committer | akleshchev <117672381+akleshchev@users.noreply.github.com> | 2023-12-06 01:02:42 +0200 | 
| commit | 9f3edb90d49bb10fa5608b4d6bdf242c243b0441 (patch) | |
| tree | e5253f66add394b1532d9334331e297e517b35bc | |
| parent | f394d675a766f58b62bebaaa4f7caeddcec9a600 (diff) | |
SL-20181 Minor inventory fetching adjustements
| -rw-r--r-- | indra/newview/llaisapi.cpp | 16 | ||||
| -rw-r--r-- | indra/newview/llinventoryfilter.cpp | 12 | ||||
| -rw-r--r-- | indra/newview/llinventorygallery.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llinventorymodel.cpp | 17 | ||||
| -rw-r--r-- | indra/newview/llviewerinventory.cpp | 5 | ||||
| -rw-r--r-- | indra/newview/llviewerinventory.h | 5 | 
6 files changed, 36 insertions, 21 deletions
diff --git a/indra/newview/llaisapi.cpp b/indra/newview/llaisapi.cpp index 17e1a27934..f23ce13608 100644 --- a/indra/newview/llaisapi.cpp +++ b/indra/newview/llaisapi.cpp @@ -1738,10 +1738,6 @@ void AISUpdate::doUpdate()  		LL_DEBUGS("Inventory") << "cat version update " << cat->getName() << " to version " << cat->getVersion() << LL_ENDL;  		if (cat->getVersion() != version)  		{ -			LL_WARNS() << "Possible version mismatch for category " << cat->getName() -					<< ", viewer version " << cat->getVersion() -					<< " AIS version " << version << " !!!Adjusting local version!!!" <<  LL_ENDL; -              // the AIS version should be considered the true version. Adjust               // our local category model to reflect this version number.  Otherwise               // it becomes possible to get stuck with the viewer being out of  @@ -1751,13 +1747,23 @@ void AISUpdate::doUpdate()              // is performed.  This occasionally gets out of sync however.              if (version != LLViewerInventoryCategory::VERSION_UNKNOWN)              { +                LL_WARNS() << "Possible version mismatch for category " << cat->getName() +                    << ", viewer version " << cat->getVersion() +                    << " AIS version " << version << " !!!Adjusting local version!!!" << LL_ENDL;                  cat->setVersion(version);              }              else              {                  // We do not account for update if version is UNKNOWN, so we shouldn't rise version                  // either or viewer will get stuck on descendants count -1, try to refetch folder instead -                cat->fetch(); +                // +                // Todo: proper backoff? + +                LL_WARNS() << "Possible version mismatch for category " << cat->getName() +                    << ", viewer version " << cat->getVersion() +                    << " AIS version " << version << " !!!Rerequesting category!!!" << LL_ENDL; +                const S32 LONG_EXPIRY = 360; +                cat->fetch(LONG_EXPIRY);              }  		}  	} diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp index 7b4283e94d..332c6d3085 100644 --- a/indra/newview/llinventoryfilter.cpp +++ b/indra/newview/llinventoryfilter.cpp @@ -202,12 +202,18 @@ bool LLInventoryFilter::checkFolder(const LLUUID& folder_id) const          && !LLInventoryModelBackgroundFetch::instance().inventoryFetchInProgress())      {          LLViewerInventoryCategory* cat = gInventory.getCategory(folder_id); -        if ((!cat && folder_id.notNull()) || (cat && cat->getVersion() == LLViewerInventoryCategory::VERSION_UNKNOWN)) +        if ((!cat && folder_id.notNull()))          { -            // At the moment background fetch only cares about VERSION_UNKNOWN, -            // so do not check isCategoryComplete that compares descendant count +            // Shouldn't happen? Server provides full list of folders on startup              LLInventoryModelBackgroundFetch::instance().start(folder_id, false);          } +        else if (cat && cat->getVersion() == LLViewerInventoryCategory::VERSION_UNKNOWN) +        { +            // At the moment background fetch only cares about VERSION_UNKNOWN, +            // so do not check isCategoryComplete that compares descendant count, +            // but if that is nesesary, do a forced scheduleFolderFetch. +            cat->fetch(); +        }  	}      if (!checkAgainstFilterThumbnails(folder_id)) diff --git a/indra/newview/llinventorygallery.cpp b/indra/newview/llinventorygallery.cpp index 212f8b0446..9fb2783506 100644 --- a/indra/newview/llinventorygallery.cpp +++ b/indra/newview/llinventorygallery.cpp @@ -2386,7 +2386,7 @@ BOOL LLInventoryGallery::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,      return handled;  } -void LLInventoryGallery::startDrag()  +void LLInventoryGallery::startDrag()  {      std::vector<EDragAndDropType> types;      uuid_vec_t ids; diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 01bf7b3270..7f60e6c509 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -3911,19 +3911,22 @@ void LLInventoryModel::processBulkUpdateInventory(LLMessageSystem* msg, void**)  	for (cat_array_t::iterator cit = folders.begin(); cit != folders.end(); ++cit)  	{ -		gInventory.updateCategory(*cit); - -        // Temporary workaround: just fetch the item using AIS to get missing fields. -        // If this works fine we might want to extract ids only from the message -        // then use AIS as a primary fetcher -        LLInventoryModelBackgroundFetch::instance().scheduleFolderFetch((*cit)->getUUID(), true /*force, since it has changes*/); +        gInventory.updateCategory(*cit); +        if ((*cit)->getVersion() != LLViewerInventoryCategory::VERSION_UNKNOWN) +        { +            // Temporary workaround: just fetch the item using AIS to get missing fields. +            // If this works fine we might want to extract 'ids only' from the message +            // then use AIS as a primary fetcher +            LLInventoryModelBackgroundFetch::instance().scheduleFolderFetch((*cit)->getUUID(), true /*force, since it has changes*/); +        } +        // else already called fetch() above  	}  	for (item_array_t::iterator iit = items.begin(); iit != items.end(); ++iit)  	{  		gInventory.updateItem(*iit);          // Temporary workaround: just fetch the item using AIS to get missing fields. -        // If this works fine we might want to extract ids only from the message +        // If this works fine we might want to extract 'ids only' from the message          // then use AIS as a primary fetcher          LLInventoryModelBackgroundFetch::instance().scheduleItemFetch((*iit)->getUUID(), true);  	} diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 5ee613d49d..6d5049347f 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -648,15 +648,14 @@ void LLViewerInventoryCategory::setVersion(S32 version)  	mVersion = version;  } -bool LLViewerInventoryCategory::fetch() +bool LLViewerInventoryCategory::fetch(S32 expiry_seconds)  {  	if((VERSION_UNKNOWN == getVersion())  	   && mDescendentsRequested.hasExpired())	//Expired check prevents multiple downloads.  	{  		LL_DEBUGS(LOG_INV) << "Fetching category children: " << mName << ", UUID: " << mUUID << LL_ENDL; -		const F32 FETCH_TIMER_EXPIRY = 10.0f;  		mDescendentsRequested.reset(); -		mDescendentsRequested.setTimerExpirySec(FETCH_TIMER_EXPIRY); +		mDescendentsRequested.setTimerExpirySec(expiry_seconds);  		std::string url;  		if (gAgent.getRegion()) diff --git a/indra/newview/llviewerinventory.h b/indra/newview/llviewerinventory.h index bce8da0a69..4297e194dd 100644 --- a/indra/newview/llviewerinventory.h +++ b/indra/newview/llviewerinventory.h @@ -209,8 +209,9 @@ public:  	S32 getVersion() const;  	void setVersion(S32 version); -	// Returns true if a fetch was issued (not nessesary in progress). -	bool fetch(); +    // Returns true if a fetch was issued (not nessesary in progress). +    // no requests will happen during expiry_seconds even if fetch completed +    bool fetch(S32 expiry_seconds = 10);      typedef enum {          FETCH_NONE = 0,  | 
