From 6d7b33f77e6d6facd585faf8c5d355f68942fcef Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Fri, 25 Apr 2014 17:12:49 -0700
Subject: [PATCH] DD-22 : WIP : Implemented SLM API GET merchant, use it in
 initialization but glitch in UI (needs to reopen the floater to see content)

---
 .../newview/llfloatermarketplacelistings.cpp  | 18 ++--
 indra/newview/llmarketplacefunctions.cpp      | 94 +++++++++++++++----
 indra/newview/llmarketplacefunctions.h        |  8 +-
 3 files changed, 96 insertions(+), 24 deletions(-)

diff --git a/indra/newview/llfloatermarketplacelistings.cpp b/indra/newview/llfloatermarketplacelistings.cpp
index 76cca065c8f..27b31518a15 100755
--- a/indra/newview/llfloatermarketplacelistings.cpp
+++ b/indra/newview/llfloatermarketplacelistings.cpp
@@ -160,7 +160,8 @@ class LLMarketplaceListingsAddedObserver : public LLInventoryCategoryAddedObserv
 			
 			if (added_category_type == LLFolderType::FT_MARKETPLACE_LISTINGS)
 			{
-				mMarketplaceListingsFloater->initializeMarketPlace();
+				//mMarketplaceListingsFloater->initializeMarketPlace();
+                LLMarketplaceData::instance().initializeSLM();
 			}
 		}
 	}
@@ -234,9 +235,11 @@ void LLFloaterMarketplaceListings::onOpen(const LLSD& key)
 	//
 	// Initialize the Market Place or go update the marketplace listings
 	//
-	if (LLMarketplaceInventoryImporter::getInstance()->getMarketPlaceStatus() == MarketplaceStatusCodes::MARKET_PLACE_NOT_INITIALIZED)
+	//if (LLMarketplaceInventoryImporter::getInstance()->getMarketPlaceStatus() == MarketplaceStatusCodes::MARKET_PLACE_NOT_INITIALIZED)
+    if (LLMarketplaceData::instance().getSLMStatus() == MarketplaceStatusCodes::MARKET_PLACE_NOT_INITIALIZED)
 	{
-		initializeMarketPlace();
+		//initializeMarketPlace();
+        LLMarketplaceData::instance().initializeSLM();
 	}
 	else
 	{
@@ -269,7 +272,8 @@ void LLFloaterMarketplaceListings::fetchContents()
 
 void LLFloaterMarketplaceListings::setup()
 {
-	if (LLMarketplaceInventoryImporter::getInstance()->getMarketPlaceStatus() != MarketplaceStatusCodes::MARKET_PLACE_MERCHANT)
+	//if (LLMarketplaceInventoryImporter::getInstance()->getMarketPlaceStatus() != MarketplaceStatusCodes::MARKET_PLACE_MERCHANT)
+    if (LLMarketplaceData::instance().getSLMStatus() != MarketplaceStatusCodes::MARKET_PLACE_MERCHANT)
 	{
 		// If we are *not* a merchant or we have no market place connection established yet, do nothing
 		return;
@@ -375,7 +379,8 @@ void LLFloaterMarketplaceListings::updateView()
         std::string tooltip;
     
         const LLSD& subs = getMarketplaceStringSubstitutions();
-        U32 mkt_status = LLMarketplaceInventoryImporter::getInstance()->getMarketPlaceStatus();
+        //U32 mkt_status = LLMarketplaceInventoryImporter::getInstance()->getMarketPlaceStatus();
+        U32 mkt_status = LLMarketplaceData::instance().getSLMStatus();
     
         // *TODO : check those messages and create better appropriate ones in strings.xml
         if (mRootFolderId.notNull())
@@ -485,7 +490,8 @@ void LLFloaterMarketplaceListings::initializationReportError(U32 status, const L
 
 void LLFloaterMarketplaceListings::importStatusChanged(bool inProgress)
 {
-	if (mRootFolderId.isNull() && (LLMarketplaceInventoryImporter::getInstance()->getMarketPlaceStatus() == MarketplaceStatusCodes::MARKET_PLACE_MERCHANT))
+	//if (mRootFolderId.isNull() && (LLMarketplaceInventoryImporter::getInstance()->getMarketPlaceStatus() == MarketplaceStatusCodes::MARKET_PLACE_MERCHANT))
+    if (mRootFolderId.isNull() && (LLMarketplaceData::instance().getSLMStatus() == MarketplaceStatusCodes::MARKET_PLACE_MERCHANT))
 	{
 		setup();
 	}
diff --git a/indra/newview/llmarketplacefunctions.cpp b/indra/newview/llmarketplacefunctions.cpp
index 40417bf77b7..607f907ed16 100755
--- a/indra/newview/llmarketplacefunctions.cpp
+++ b/indra/newview/llmarketplacefunctions.cpp
@@ -95,6 +95,46 @@ LLSD getMarketplaceStringSubstitutions()
 	return marketplace_sub_map;
 }
 
+///////////////////////////////////////////////////////////////////////////////
+// SLM Responder
+class LLSLMMerchantResponder : public LLHTTPClient::Responder
+{
+	LOG_CLASS(LLSLMMerchantResponder);
+public:
+	
+    LLSLMMerchantResponder() {}
+    
+	virtual void completed(U32 status, const std::string& reason, const LLSD& content)
+	{
+		if (isGoodStatus(status))
+		{
+            llinfos << "Merov : completed successful, status = " << status << ", reason = " << reason << ", content = " << content << llendl;
+            LLMarketplaceData::instance().setSLMStatus(MarketplaceStatusCodes::MARKET_PLACE_MERCHANT);
+		}
+		else
+		{
+            llinfos << "Merov : completed with error, status = " << status << ", reason = " << reason << ", content = " << content << llendl;
+            LLMarketplaceData::instance().setSLMStatus(MarketplaceStatusCodes::MARKET_PLACE_NOT_MERCHANT);
+		}
+	}
+    
+    void completedHeader(U32 status, const std::string& reason, const LLSD& content)
+    {
+		if (isGoodStatus(status))
+		{
+            llinfos << "Merov : completed header successful, status = " << status << ", reason = " << reason << ", content = " << content << llendl;
+            LLMarketplaceData::instance().setSLMStatus(MarketplaceStatusCodes::MARKET_PLACE_MERCHANT);
+		}
+		else
+		{
+            llinfos << "Merov : completed header with error, status = " << status << ", reason = " << reason << ", content = " << content << llendl;
+            LLMarketplaceData::instance().setSLMStatus(MarketplaceStatusCodes::MARKET_PLACE_NOT_MERCHANT);
+		}
+    }
+};
+// SLM Responder End
+///////////////////////////////////////////////////////////////////////////////
+
 namespace LLMarketplaceImport
 {
 	// Basic interface for this namespace
@@ -427,27 +467,15 @@ void LLMarketplaceInventoryImporter::initialize()
         return;
     }
 
-    // Test DirectDelivery cap
-	LLViewerRegion* region = gAgent.getRegion();
-	if (region)
+    if (!LLMarketplaceImport::hasSessionCookie())
     {
-        std::string url = region->getCapability("DirectDelivery");
-        llinfos << "Merov : Test DirectDelivery cap : url = " << url << llendl;
+        mMarketPlaceStatus = MarketplaceStatusCodes::MARKET_PLACE_INITIALIZING;
+        LLMarketplaceImport::establishMarketplaceSessionCookie();
     }
     else
     {
-        llinfos << "Merov : Test DirectDelivery cap : no region accessible" << llendl;
+        mMarketPlaceStatus = MarketplaceStatusCodes::MARKET_PLACE_MERCHANT;
     }
-
-	if (!LLMarketplaceImport::hasSessionCookie())
-	{
-		mMarketPlaceStatus = MarketplaceStatusCodes::MARKET_PLACE_INITIALIZING;
-		LLMarketplaceImport::establishMarketplaceSessionCookie();
-	}
-	else
-	{
-		mMarketPlaceStatus = MarketplaceStatusCodes::MARKET_PLACE_MERCHANT;
-	}
 }
 
 void LLMarketplaceInventoryImporter::reinitializeAndTriggerImport()
@@ -573,11 +601,43 @@ LLMarketplaceTuple::LLMarketplaceTuple(const LLUUID& folder_id, S32 listing_id,
 
 
 // Data map
-LLMarketplaceData::LLMarketplaceData()
+LLMarketplaceData::LLMarketplaceData() : 
+ mMarketPlaceStatus(MarketplaceStatusCodes::MARKET_PLACE_NOT_INITIALIZED)
 {
     mTestCurrentMarketplaceID = 1234567;
 }
 
+S32 LLMarketplaceData::getTestMarketplaceID()
+{
+    return mTestCurrentMarketplaceID++;
+}
+
+void LLMarketplaceData::initializeSLM()
+{
+    mMarketPlaceStatus = MarketplaceStatusCodes::MARKET_PLACE_INITIALIZING;
+    
+    // Get DirectDelivery cap
+    std::string url = "";
+	LLViewerRegion* region = gAgent.getRegion();
+	if (region)
+    {
+        url = region->getCapability("DirectDelivery");
+        llinfos << "Merov : Test DirectDelivery cap : url = " << url << llendl;
+    }
+    else
+    {
+        llinfos << "Merov : Test DirectDelivery cap : no region accessible" << llendl;
+    }
+    // *TODO : Take this DirectDelivery cap coping hack out
+    if (url == "")
+    {
+        url = "https://marketplace.secondlife-staging.com/api/1/viewer/" + gAgentID.asString() + "/merchant";
+    }
+    llinfos << "Merov : Testing get : " << url << llendl;
+    
+	LLHTTPClient::get(url, new LLSLMMerchantResponder(), LLSD());
+}
+
 // Creation / Deletion
 bool LLMarketplaceData::addListing(const LLUUID& folder_id)
 {
diff --git a/indra/newview/llmarketplacefunctions.h b/indra/newview/llmarketplacefunctions.h
index a5874193239..a71ccfd53ea 100755
--- a/indra/newview/llmarketplacefunctions.h
+++ b/indra/newview/llmarketplacefunctions.h
@@ -145,6 +145,11 @@ class LLMarketplaceData
 public:
 	LLMarketplaceData();
     
+    // SLM
+	U32  getSLMStatus() const { return mMarketPlaceStatus; }
+	void setSLMStatus(U32 status) { mMarketPlaceStatus = status; }
+    void initializeSLM();
+    
     bool isEmpty() { return (mMarketplaceItems.size() == 0); }
     
     // Probe the Marketplace data set to identify folders
@@ -169,10 +174,11 @@ class LLMarketplaceData
     bool setActivation(const LLUUID& folder_id, bool activate);
     
     // Merov : Test method while waiting for SLM API
-    S32 getTestMarketplaceID() { return mTestCurrentMarketplaceID++; }
+    S32 getTestMarketplaceID();
     
 private:
     marketplace_items_list_t mMarketplaceItems;
+	U32  mMarketPlaceStatus;
     // Merov : This is for test only, waiting for SLM API
     S32 mTestCurrentMarketplaceID;
 };
-- 
GitLab