summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xindra/newview/llinventorybridge.cpp5
-rwxr-xr-xindra/newview/llmarketplacefunctions.cpp92
-rwxr-xr-xindra/newview/llmarketplacefunctions.h9
-rwxr-xr-xindra/newview/skins/default/xui/en/strings.xml1
4 files changed, 95 insertions, 12 deletions
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index d6ad9b50a4..f6a851e55f 100755
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -2087,6 +2087,11 @@ std::string LLFolderBridge::getLabelSuffix() const
suffix += " (" + LLTrans::getString("MarketplaceMax") + "=" + llformat("%d", stock_count) + ")";
}
}
+ // Add updating suffix
+ if (LLMarketplaceData::instance().isUpdating(getUUID()))
+ {
+ suffix += " (" + LLTrans::getString("MarketplaceUpdating") + ")";
+ }
return LLInvFVBridge::getLabelSuffix() + suffix;
}
else
diff --git a/indra/newview/llmarketplacefunctions.cpp b/indra/newview/llmarketplacefunctions.cpp
index 669c49ea4f..17b8ec746f 100755
--- a/indra/newview/llmarketplacefunctions.cpp
+++ b/indra/newview/llmarketplacefunctions.cpp
@@ -172,6 +172,8 @@ public:
virtual void completedRaw(const LLChannelDescriptors& channels,
const LLIOPipe::buffer_ptr_t& buffer)
{
+ LLMarketplaceData::instance().setUpdating(false);
+
if (!isGoodStatus())
{
log_SLM_warning("Get /listings", getStatus(), getReason(), "", "");
@@ -223,11 +225,16 @@ class LLSLMCreateListingsResponder : public LLHTTPClient::Responder
LOG_CLASS(LLSLMCreateListingsResponder);
public:
- LLSLMCreateListingsResponder() {}
+ LLSLMCreateListingsResponder(const LLUUID& folder_id)
+ {
+ mExpectedFolderId = folder_id;
+ }
virtual void completedRaw(const LLChannelDescriptors& channels,
const LLIOPipe::buffer_ptr_t& buffer)
{
+ LLMarketplaceData::instance().setUpdating(mExpectedFolderId,false);
+
if (!isGoodStatus())
{
log_SLM_warning("Post /listings", getStatus(), getReason(), "", "");
@@ -269,6 +276,8 @@ public:
it++;
}
}
+private:
+ LLUUID mExpectedFolderId;
};
class LLSLMGetListingResponder : public LLHTTPClient::Responder
@@ -276,11 +285,16 @@ class LLSLMGetListingResponder : public LLHTTPClient::Responder
LOG_CLASS(LLSLMGetListingResponder);
public:
- LLSLMGetListingResponder() {}
+ LLSLMGetListingResponder(const LLUUID& folder_id)
+ {
+ mExpectedFolderId = folder_id;
+ }
virtual void completedRaw(const LLChannelDescriptors& channels,
const LLIOPipe::buffer_ptr_t& buffer)
{
+ LLMarketplaceData::instance().setUpdating(mExpectedFolderId,false);
+
LLBufferStream istr(channels, buffer.get());
std::stringstream strstrm;
strstrm << istr.rdbuf();
@@ -327,6 +341,8 @@ public:
it++;
}
}
+private:
+ LLUUID mExpectedFolderId;
};
class LLSLMUpdateListingsResponder : public LLHTTPClient::Responder
@@ -334,8 +350,9 @@ class LLSLMUpdateListingsResponder : public LLHTTPClient::Responder
LOG_CLASS(LLSLMUpdateListingsResponder);
public:
- LLSLMUpdateListingsResponder(bool expected_listed_state, const LLUUID& expected_version_id)
+ LLSLMUpdateListingsResponder(const LLUUID& folder_id, bool expected_listed_state, const LLUUID& expected_version_id)
{
+ mExpectedFolderId = folder_id;
mExpectedListedState = expected_listed_state;
mExpectedVersionUUID = expected_version_id;
}
@@ -343,6 +360,8 @@ public:
virtual void completedRaw(const LLChannelDescriptors& channels,
const LLIOPipe::buffer_ptr_t& buffer)
{
+ LLMarketplaceData::instance().setUpdating(mExpectedFolderId,false);
+
LLBufferStream istr(channels, buffer.get());
std::stringstream strstrm;
strstrm << istr.rdbuf();
@@ -399,6 +418,7 @@ public:
}
}
private:
+ LLUUID mExpectedFolderId;
bool mExpectedListedState;
LLUUID mExpectedVersionUUID;
};
@@ -408,11 +428,16 @@ class LLSLMAssociateListingsResponder : public LLHTTPClient::Responder
LOG_CLASS(LLSLMAssociateListingsResponder);
public:
- LLSLMAssociateListingsResponder() {}
+ LLSLMAssociateListingsResponder(const LLUUID& folder_id)
+ {
+ mExpectedFolderId = folder_id;
+ }
virtual void completedRaw(const LLChannelDescriptors& channels,
const LLIOPipe::buffer_ptr_t& buffer)
{
+ LLMarketplaceData::instance().setUpdating(mExpectedFolderId,false);
+
if (!isGoodStatus())
{
log_SLM_warning("Put /associate_inventory", getStatus(), getReason(), "", "");
@@ -464,6 +489,8 @@ public:
it++;
}
}
+private:
+ LLUUID mExpectedFolderId;
};
class LLSLMDeleteListingsResponder : public LLHTTPClient::Responder
@@ -471,11 +498,16 @@ class LLSLMDeleteListingsResponder : public LLHTTPClient::Responder
LOG_CLASS(LLSLMDeleteListingsResponder);
public:
- LLSLMDeleteListingsResponder() {}
+ LLSLMDeleteListingsResponder(const LLUUID& folder_id)
+ {
+ mExpectedFolderId = folder_id;
+ }
virtual void completedRaw(const LLChannelDescriptors& channels,
const LLIOPipe::buffer_ptr_t& buffer)
{
+ LLMarketplaceData::instance().setUpdating(mExpectedFolderId,false);
+
LLBufferStream istr(channels, buffer.get());
std::stringstream strstrm;
strstrm << istr.rdbuf();
@@ -511,6 +543,8 @@ public:
it++;
}
}
+private:
+ LLUUID mExpectedFolderId;
};
// SLM Responders End
@@ -1038,7 +1072,8 @@ LLMarketplaceTuple::LLMarketplaceTuple(const LLUUID& folder_id, S32 listing_id,
LLMarketplaceData::LLMarketplaceData() :
mMarketPlaceStatus(MarketplaceStatusCodes::MARKET_PLACE_NOT_INITIALIZED),
mStatusUpdatedSignal(NULL),
- mDirtyCount(false)
+ mDirtyCount(false),
+ mIsUpdating(false)
{
mInventoryObserver = new LLMarketplaceInventoryObserver;
gInventory.addObserver(mInventoryObserver);
@@ -1073,6 +1108,7 @@ void LLMarketplaceData::getSLMListings()
// Send request
std::string url = getSLMConnectURL("/listings");
log_SLM_infos("LLHTTPClient::get", url, "");
+ setUpdating(true);
LLHTTPClient::get(url, new LLSLMGetListingsResponder(), headers);
}
@@ -1085,7 +1121,9 @@ void LLMarketplaceData::getSLMListing(S32 listing_id)
// Send request
std::string url = getSLMConnectURL("/listing/") + llformat("%d",listing_id);
log_SLM_infos("LLHTTPClient::get", url, "");
- LLHTTPClient::get(url, new LLSLMGetListingResponder(), headers);
+ LLUUID folder_id = LLMarketplaceData::instance().getListingFolder(listing_id);
+ setUpdating(folder_id,true);
+ LLHTTPClient::get(url, new LLSLMGetListingResponder(folder_id), headers);
}
void LLMarketplaceData::createSLMListing(const LLUUID& folder_id)
@@ -1112,7 +1150,8 @@ void LLMarketplaceData::createSLMListing(const LLUUID& folder_id)
// Send request
std::string url = getSLMConnectURL("/listings");
log_SLM_infos("LLHTTPClient::postRaw", url, json_str);
- LLHTTPClient::postRaw(url, data, size, new LLSLMCreateListingsResponder(), headers);
+ setUpdating(folder_id,true);
+ LLHTTPClient::postRaw(url, data, size, new LLSLMCreateListingsResponder(folder_id), headers);
}
void LLMarketplaceData::updateSLMListing(const LLUUID& folder_id, S32 listing_id, const LLUUID& version_id, bool is_listed)
@@ -1140,7 +1179,8 @@ void LLMarketplaceData::updateSLMListing(const LLUUID& folder_id, S32 listing_id
// Send request
std::string url = getSLMConnectURL("/listing/") + llformat("%d",listing_id);
log_SLM_infos("LLHTTPClient::putRaw", url, json_str);
- LLHTTPClient::putRaw(url, data, size, new LLSLMUpdateListingsResponder(is_listed, version_id), headers);
+ setUpdating(folder_id,true);
+ LLHTTPClient::putRaw(url, data, size, new LLSLMUpdateListingsResponder(folder_id, is_listed, version_id), headers);
}
void LLMarketplaceData::associateSLMListing(const LLUUID& folder_id, S32 listing_id, const LLUUID& version_id)
@@ -1167,7 +1207,8 @@ void LLMarketplaceData::associateSLMListing(const LLUUID& folder_id, S32 listing
// Send request
std::string url = getSLMConnectURL("/associate_inventory/") + llformat("%d",listing_id);
log_SLM_infos("LLHTTPClient::putRaw", url, json_str);
- LLHTTPClient::putRaw(url, data, size, new LLSLMAssociateListingsResponder(), headers);
+ setUpdating(folder_id,true);
+ LLHTTPClient::putRaw(url, data, size, new LLSLMAssociateListingsResponder(folder_id), headers);
}
void LLMarketplaceData::deleteSLMListing(S32 listing_id)
@@ -1179,7 +1220,9 @@ void LLMarketplaceData::deleteSLMListing(S32 listing_id)
// Send request
std::string url = getSLMConnectURL("/listing/") + llformat("%d",listing_id);
log_SLM_infos("LLHTTPClient::del", url, "");
- LLHTTPClient::del(url, new LLSLMDeleteListingsResponder(), headers);
+ LLUUID folder_id = LLMarketplaceData::instance().getListingFolder(listing_id);
+ setUpdating(folder_id,true);
+ LLHTTPClient::del(url, new LLSLMDeleteListingsResponder(folder_id), headers);
}
std::string LLMarketplaceData::getSLMConnectURL(const std::string& route)
@@ -1466,6 +1509,33 @@ LLUUID LLMarketplaceData::getActiveFolder(const LLUUID& obj_id)
return (getActivationState(listing_uuid) ? getVersionFolder(listing_uuid) : LLUUID::null);
}
+bool LLMarketplaceData::isUpdating(const LLUUID& folder_id)
+{
+ if (mIsUpdating)
+ {
+ // If we're waiting for data for all listings, we are in the updating process
+ return true;
+ }
+ else
+ {
+ std::set<LLUUID>::iterator it = mPendingUpdateSet.find(folder_id);
+ return (it != mPendingUpdateSet.end());
+ }
+}
+
+void LLMarketplaceData::setUpdating(const LLUUID& folder_id, bool isUpdating)
+{
+ std::set<LLUUID>::iterator it = mPendingUpdateSet.find(folder_id);
+ if (it != mPendingUpdateSet.end())
+ {
+ mPendingUpdateSet.erase(it);
+ }
+ if (isUpdating)
+ {
+ mPendingUpdateSet.insert(folder_id);
+ }
+}
+
// Private Modifiers
bool LLMarketplaceData::setListingID(const LLUUID& folder_id, S32 listing_id)
{
diff --git a/indra/newview/llmarketplacefunctions.h b/indra/newview/llmarketplacefunctions.h
index 5f72f6e78e..1614b610a6 100755
--- a/indra/newview/llmarketplacefunctions.h
+++ b/indra/newview/llmarketplacefunctions.h
@@ -201,7 +201,8 @@ public:
bool isVersionFolder(const LLUUID& folder_id); // returns true if folder_id is a Version folder
bool isInActiveFolder(const LLUUID& obj_id); // returns true if the obj_id is buried in an active version folder
LLUUID getActiveFolder(const LLUUID& obj_id); // returns the UUID of the active version folder obj_id is in
-
+ bool isUpdating(const LLUUID& folder_id); // returns true if we're waiting from SLM incoming data for folder_id
+
// Access Marketplace data set : each method returns a default value if the argument can't be found
bool getActivationState(const LLUUID& folder_id);
S32 getListingID(const LLUUID& folder_id);
@@ -212,6 +213,8 @@ public:
// Used to flag if stock count values for Marketplace have to be updated
bool checkDirtyCount() { if (mDirtyCount) { mDirtyCount = false; return true; } else { return false; } }
void setDirtyCount() { mDirtyCount = true; }
+ void setUpdating(bool isUpdating) { mIsUpdating = isUpdating; }
+ void setUpdating(const LLUUID& folder_id, bool isUpdating);
private:
// Modify Marketplace data set : each method returns true if the function succeeds, false if error
@@ -238,6 +241,10 @@ private:
LLInventoryObserver* mInventoryObserver;
bool mDirtyCount; // If true, stock count value need to be updated at the next check
+ // Update data
+ bool mIsUpdating; // true if we're globally waiting for updated values from SLM
+ std::set<LLUUID> mPendingUpdateSet;
+
// The cache of SLM data (at last...)
marketplace_items_list_t mMarketplaceItems;
};
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index b2f28748b2..b51d7d75c3 100755
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -2315,6 +2315,7 @@ The [[MARKETPLACE_CREATE_STORE_URL] Marketplace store] is returning errors.
<string name="MarketplaceMax">max</string>
<string name="MarketplaceStock">stock</string>
<string name="MarketplaceNoStock">out of stock</string>
+ <string name="MarketplaceUpdating">updating...</string>
<string name="Open landmarks">Open landmarks</string>
<string name="Unconstrained">Unconstrained</string>