DD-359 : Improve performance by caching display data while updating and preventing refreshing the whole marketplace (never useful)
parent
4f9bf22d5f
commit
2cc3ce72b3
|
|
@ -203,7 +203,6 @@ const std::string& LLInvFVBridge::getDisplayName() const
|
|||
{
|
||||
buildDisplayName();
|
||||
}
|
||||
|
||||
return mDisplayName;
|
||||
}
|
||||
|
||||
|
|
@ -4292,6 +4291,14 @@ void LLFolderBridge::modifyOutfit(BOOL append)
|
|||
// +=================================================+
|
||||
|
||||
// LLMarketplaceFolderBridge is a specialized LLFolderBridge for use in Marketplace Inventory panels
|
||||
LLMarketplaceFolderBridge::LLMarketplaceFolderBridge(LLInventoryPanel* inventory,
|
||||
LLFolderView* root,
|
||||
const LLUUID& uuid) :
|
||||
LLFolderBridge(inventory, root, uuid)
|
||||
{
|
||||
m_depth = depth_nesting_in_marketplace(mUUID);
|
||||
m_stockCountCache = COMPUTE_STOCK_NOT_EVALUATED;
|
||||
}
|
||||
|
||||
LLUIImagePtr LLMarketplaceFolderBridge::getIcon() const
|
||||
{
|
||||
|
|
@ -4306,8 +4313,12 @@ LLUIImagePtr LLMarketplaceFolderBridge::getIconOpen() const
|
|||
LLUIImagePtr LLMarketplaceFolderBridge::getMarketplaceFolderIcon(BOOL is_open) const
|
||||
{
|
||||
LLFolderType::EType preferred_type = getPreferredType();
|
||||
S32 depth = depth_nesting_in_marketplace(mUUID);
|
||||
if ((preferred_type == LLFolderType::FT_NONE) && (depth == 2))
|
||||
if (!LLMarketplaceData::instance().isUpdating(getUUID()))
|
||||
{
|
||||
// Skip computation (expensive) if we're waiting for updates. Use the old value in that case.
|
||||
m_depth = depth_nesting_in_marketplace(mUUID);
|
||||
}
|
||||
if ((preferred_type == LLFolderType::FT_NONE) && (m_depth == 2))
|
||||
{
|
||||
// We override the type when in the marketplace listings folder and only for version folder
|
||||
preferred_type = LLFolderType::FT_MARKETPLACE_VERSION;
|
||||
|
|
@ -4345,12 +4356,16 @@ std::string LLMarketplaceFolderBridge::getLabelSuffix() const
|
|||
suffix += " (" + LLTrans::getString("MarketplaceActive") + ")";
|
||||
}
|
||||
// Add stock amount
|
||||
S32 stock_count = compute_stock_count(getUUID());
|
||||
if (stock_count == 0)
|
||||
if (!LLMarketplaceData::instance().isUpdating(getUUID()))
|
||||
{
|
||||
// Skip computation (expensive) if we're waiting for update anyway. Use the old value in that case.
|
||||
m_stockCountCache = compute_stock_count(getUUID());
|
||||
}
|
||||
if (m_stockCountCache == 0)
|
||||
{
|
||||
suffix += " (" + LLTrans::getString("MarketplaceNoStock") + ")";
|
||||
}
|
||||
else if (stock_count != COMPUTE_STOCK_INFINITE)
|
||||
else if (m_stockCountCache != COMPUTE_STOCK_INFINITE)
|
||||
{
|
||||
if (getPreferredType() == LLFolderType::FT_MARKETPLACE_STOCK)
|
||||
{
|
||||
|
|
@ -4360,13 +4375,13 @@ std::string LLMarketplaceFolderBridge::getLabelSuffix() const
|
|||
{
|
||||
suffix += " (" + LLTrans::getString("MarketplaceMax");
|
||||
}
|
||||
if (stock_count == COMPUTE_STOCK_NOT_EVALUATED)
|
||||
if (m_stockCountCache == COMPUTE_STOCK_NOT_EVALUATED)
|
||||
{
|
||||
suffix += "=" + LLTrans::getString("MarketplaceUpdating") + ")";
|
||||
}
|
||||
else
|
||||
{
|
||||
suffix += "=" + llformat("%d", stock_count) + ")";
|
||||
suffix += "=" + llformat("%d", m_stockCountCache) + ")";
|
||||
}
|
||||
}
|
||||
// Add updating suffix
|
||||
|
|
|
|||
|
|
@ -697,8 +697,7 @@ public:
|
|||
// Overloads some display related methods specific to folders in a marketplace floater context
|
||||
LLMarketplaceFolderBridge(LLInventoryPanel* inventory,
|
||||
LLFolderView* root,
|
||||
const LLUUID& uuid) :
|
||||
LLFolderBridge(inventory, root, uuid) { }
|
||||
const LLUUID& uuid);
|
||||
|
||||
virtual LLUIImagePtr getIcon() const;
|
||||
virtual LLUIImagePtr getIconOpen() const;
|
||||
|
|
@ -707,6 +706,9 @@ public:
|
|||
|
||||
private:
|
||||
LLUIImagePtr getMarketplaceFolderIcon(BOOL is_open) const;
|
||||
// Those members are mutable because they are cached variablse to speed up display, not a state variables
|
||||
mutable S32 m_depth;
|
||||
mutable S32 m_stockCountCache;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -2576,6 +2576,7 @@ void LLInventoryAction::buildMarketplaceFolders(LLFolderView* root)
|
|||
// containing folder will need to be updated as well as their initially containing folder. For
|
||||
// instance, moving a stock folder from a listed folder to another will require an update of the
|
||||
// target listing *and* the original listing. So we need to keep track of both.
|
||||
// Note: do not however put the marketplace listings root itself in this list or the whole marketplace data will be rebuilt.
|
||||
sMarketplaceFolders.clear();
|
||||
const LLUUID &marketplacelistings_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
|
||||
std::set<LLFolderViewItem*> selected_items = root->getSelectionList();
|
||||
|
|
@ -2586,8 +2587,16 @@ void LLInventoryAction::buildMarketplaceFolders(LLFolderView* root)
|
|||
viewModel = dynamic_cast<LLFolderViewModelItemInventory *>((*set_iter)->getViewModelItem());
|
||||
if (viewModel && gInventory.isObjectDescendentOf(viewModel->getInventoryObject()->getParentUUID(), marketplacelistings_id))
|
||||
{
|
||||
sMarketplaceFolders.push_back(viewModel->getInventoryObject()->getParentUUID());
|
||||
sMarketplaceFolders.push_back(viewModel->getInventoryObject()->getUUID());
|
||||
const LLUUID &parent_id = viewModel->getInventoryObject()->getParentUUID();
|
||||
if (parent_id != marketplacelistings_id)
|
||||
{
|
||||
sMarketplaceFolders.push_back(parent_id);
|
||||
}
|
||||
const LLUUID &curr_id = viewModel->getInventoryObject()->getUUID();
|
||||
if (curr_id != marketplacelistings_id)
|
||||
{
|
||||
sMarketplaceFolders.push_back(curr_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Suppress dupes in the list so we won't update listings twice
|
||||
|
|
|
|||
Loading…
Reference in New Issue