diff options
Diffstat (limited to 'indra/newview')
| -rwxr-xr-x | indra/newview/llinventorybridge.cpp | 5 | ||||
| -rwxr-xr-x | indra/newview/llmarketplacefunctions.cpp | 92 | ||||
| -rwxr-xr-x | indra/newview/llmarketplacefunctions.h | 9 | ||||
| -rwxr-xr-x | indra/newview/skins/default/xui/en/strings.xml | 1 | 
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>  | 
