summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeslie Linden <leslie@lindenlab.com>2011-12-05 13:37:37 -0800
committerLeslie Linden <leslie@lindenlab.com>2011-12-05 13:37:37 -0800
commit591891306366e683416b187207fa2b94bdc263a8 (patch)
tree36c87abd7b102658e6f88503aa3d7669714306cb
parent837e4e5165cc3e6595577e90bae240e676be8ffe (diff)
First pass at connecting to the new marketplace API
-rw-r--r--indra/newview/llinventorybridge.cpp2
-rw-r--r--indra/newview/llmarketplacefunctions.cpp24
-rw-r--r--indra/newview/llmarketplacefunctions.h17
-rw-r--r--indra/newview/llpanelmarketplaceoutbox.cpp158
-rw-r--r--indra/newview/llpanelmarketplaceoutbox.h19
-rw-r--r--indra/newview/llsidepanelinventory.cpp2
-rw-r--r--indra/newview/llviewermedia.cpp61
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml18
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_inventory.xml4
9 files changed, 170 insertions, 135 deletions
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 0eaa0a4627..017dabe2ad 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -71,7 +71,7 @@
#include "llwearablelist.h"
// Marketplace outbox current disabled
-#define ENABLE_MERCHANT_OUTBOX_CONTEXT_MENU 1 // keep in sync with ENABLE_INVENTORY_DISPLAY_OUTBOX, ENABLE_MERCHANT_OUTBOX_PANEL
+#define ENABLE_MERCHANT_OUTBOX_CONTEXT_MENU 1 // keep in sync with ENABLE_MERCHANT_OUTBOX_PANEL
typedef std::pair<LLUUID, LLUUID> two_uuids_t;
typedef std::list<two_uuids_t> two_uuids_list_t;
diff --git a/indra/newview/llmarketplacefunctions.cpp b/indra/newview/llmarketplacefunctions.cpp
index 99b0389413..1c189f6ee2 100644
--- a/indra/newview/llmarketplacefunctions.cpp
+++ b/indra/newview/llmarketplacefunctions.cpp
@@ -50,8 +50,9 @@ std::string getMarketplaceBaseURL()
}
}
- url += "api/1/users/";
+ url += "api/1/";
url += gAgent.getID().getString();
+ url += "/inventory";
return url;
}
@@ -60,29 +61,20 @@ std::string getMarketplaceURL_InventoryImport()
{
std::string url = getMarketplaceBaseURL();
- url += "/inventory_import";
-
- return url;
-}
-
-std::string getMarketplaceURL_UserStatus()
-{
- std::string url = getMarketplaceBaseURL();
-
- url += "/user_status";
+ url += "/import";
return url;
}
-static bool gMarketplaceSyncEnabled = true;
+static bool gMarketplaceImportEnabled = true;
-bool getMarketplaceSyncEnabled()
+bool getMarketplaceImportEnabled()
{
- return gMarketplaceSyncEnabled;
+ return gMarketplaceImportEnabled;
}
-void setMarketplaceSyncEnabled(bool syncEnabled)
+void setMarketplaceImportEnabled(bool importEnabled)
{
- gMarketplaceSyncEnabled = syncEnabled;
+ gMarketplaceImportEnabled = importEnabled;
}
diff --git a/indra/newview/llmarketplacefunctions.h b/indra/newview/llmarketplacefunctions.h
index e80e6a471c..fda2fbb935 100644
--- a/indra/newview/llmarketplacefunctions.h
+++ b/indra/newview/llmarketplacefunctions.h
@@ -30,11 +30,20 @@
std::string getMarketplaceURL_InventoryImport();
-std::string getMarketplaceURL_UserStatus();
-
-bool getMarketplaceSyncEnabled();
-void setMarketplaceSyncEnabled(bool syncEnabled);
+bool getMarketplaceImportEnabled();
+void setMarketplaceImportEnabled(bool syncEnabled);
+
+namespace MarketplaceErrorCodes
+{
+ enum eCodes
+ {
+ IMPORT_DONE = 200,
+ IMPORT_PROCESSING = 202,
+ IMPORT_DONE_WITH_ERRORS = 409,
+ IMPORT_JOB_FAILED = 410,
+ };
+}
#endif // LL_LLMARKETPLACEFUNCTIONS_H
diff --git a/indra/newview/llpanelmarketplaceoutbox.cpp b/indra/newview/llpanelmarketplaceoutbox.cpp
index 0ad4d56051..3c8817c199 100644
--- a/indra/newview/llpanelmarketplaceoutbox.cpp
+++ b/indra/newview/llpanelmarketplaceoutbox.cpp
@@ -59,9 +59,12 @@ const LLPanelMarketplaceOutbox::Params& LLPanelMarketplaceOutbox::getDefaultPara
LLPanelMarketplaceOutbox::LLPanelMarketplaceOutbox(const Params& p)
: LLPanel(p)
, mInventoryPanel(NULL)
- , mSyncButton(NULL)
- , mSyncIndicator(NULL)
- , mSyncInProgress(false)
+ , mImportButton(NULL)
+ , mImportFrameTimer(0)
+ , mImportGetPending(false)
+ , mImportIndicator(NULL)
+ , mImportInProgress(false)
+ , mOutboxButton(NULL)
{
}
@@ -81,11 +84,13 @@ BOOL LLPanelMarketplaceOutbox::postBuild()
void LLPanelMarketplaceOutbox::handleLoginComplete()
{
- mSyncButton = getChild<LLButton>("outbox_sync_btn");
- mSyncButton->setCommitCallback(boost::bind(&LLPanelMarketplaceOutbox::onSyncButtonClicked, this));
- mSyncButton->setEnabled(getMarketplaceSyncEnabled() && !isOutboxEmpty());
+ mImportButton = getChild<LLButton>("outbox_import_btn");
+ mImportButton->setCommitCallback(boost::bind(&LLPanelMarketplaceOutbox::onImportButtonClicked, this));
+ mImportButton->setEnabled(getMarketplaceImportEnabled() && !isOutboxEmpty());
- mSyncIndicator = getChild<LLLoadingIndicator>("outbox_sync_indicator");
+ mImportIndicator = getChild<LLLoadingIndicator>("outbox_import_indicator");
+
+ mOutboxButton = getChild<LLButton>("outbox_btn");
}
void LLPanelMarketplaceOutbox::onFocusReceived()
@@ -164,9 +169,9 @@ bool LLPanelMarketplaceOutbox::isOutboxEmpty() const
return (getTotalItemCount() == 0);
}
-bool LLPanelMarketplaceOutbox::isSyncInProgress() const
+bool LLPanelMarketplaceOutbox::isImportInProgress() const
{
- return mSyncInProgress;
+ return mImportInProgress;
}
@@ -185,25 +190,55 @@ void timeDelay(LLCoros::self& self, LLPanelMarketplaceOutbox* outboxPanel)
waitForEventOn(self, "mainloop");
}
- outboxPanel->onSyncComplete(true, LLSD::emptyMap());
+ outboxPanel->onImportPostComplete(MarketplaceErrorCodes::IMPORT_DONE, LLSD::emptyMap());
gTimeDelayDebugFunc = "";
}
-class LLInventorySyncResponder : public LLHTTPClient::Responder
+class LLInventoryImportPostResponder : public LLHTTPClient::Responder
{
public:
- LLInventorySyncResponder(LLPanelMarketplaceOutbox * outboxPanel)
+ LLInventoryImportPostResponder(LLPanelMarketplaceOutbox * outboxPanel)
: LLCurl::Responder()
, mOutboxPanel(outboxPanel)
{
}
-
+
void completed(U32 status, const std::string& reason, const LLSD& content)
{
- llinfos << "inventory_import complete status: " << status << ", reason: " << reason << llendl;
+ llinfos << "inventory/import post status: " << status << ", reason: " << reason << llendl;
+
+ if (isGoodStatus(status))
+ {
+ // Complete success
+ llinfos << "success" << llendl;
+ }
+ else
+ {
+ llwarns << "failed" << llendl;
+ }
+
+ mOutboxPanel->onImportPostComplete(status, content);
+ }
+
+private:
+ LLPanelMarketplaceOutbox * mOutboxPanel;
+};
+class LLInventoryImportGetResponder : public LLHTTPClient::Responder
+{
+public:
+ LLInventoryImportGetResponder(LLPanelMarketplaceOutbox * outboxPanel)
+ : LLCurl::Responder()
+ , mOutboxPanel(outboxPanel)
+ {
+ }
+
+ void completed(U32 status, const std::string& reason, const LLSD& content)
+ {
+ llinfos << "inventory/import get status: " << status << ", reason: " << reason << llendl;
+
if (isGoodStatus(status))
{
// Complete success
@@ -214,37 +249,67 @@ public:
llwarns << "failed" << llendl;
}
- mOutboxPanel->onSyncComplete(isGoodStatus(status), content);
+ mOutboxPanel->onImportGetComplete(status, content);
}
private:
LLPanelMarketplaceOutbox * mOutboxPanel;
};
-void LLPanelMarketplaceOutbox::onSyncButtonClicked()
+void LLPanelMarketplaceOutbox::onImportButtonClicked()
{
- // Get the sync animation going
- mSyncInProgress = true;
- updateSyncButtonStatus();
+ // Get the import animation going
+ mImportInProgress = true;
+ mImportFrameTimer = 0;
+
+ updateImportButtonStatus();
// Make the url for the inventory import request
std::string url = getMarketplaceURL_InventoryImport();
- llinfos << "http get: " << url << llendl;
- LLHTTPClient::get(url, new LLInventorySyncResponder(this), LLViewerMedia::getHeaders());
+ llinfos << "http post: " << url << llendl;
+ LLHTTPClient::post(url, LLSD(), new LLInventoryImportPostResponder(this), LLViewerMedia::getHeaders());
// Set a timer (for testing only)
//gTimeDelayDebugFunc = LLCoros::instance().launch("LLPanelMarketplaceOutbox timeDelay", boost::bind(&timeDelay, _1, this));
}
-void LLPanelMarketplaceOutbox::onSyncComplete(bool goodStatus, const LLSD& content)
+void LLPanelMarketplaceOutbox::onImportPostComplete(U32 status, const LLSD& content)
{
- mSyncInProgress = false;
- updateSyncButtonStatus();
+ llinfos << "onImportPostComplete status = " << status << llendl;
+ llinfos << "onImportPostComplete content = " << content.asString() << llendl;
+}
+
+void LLPanelMarketplaceOutbox::onImportGetComplete(U32 status, const LLSD& content)
+{
+ mImportGetPending = false;
+ mImportInProgress = (status == MarketplaceErrorCodes::IMPORT_PROCESSING);
+ updateImportButtonStatus();
+
+ if (!mImportInProgress)
+ {
+ if (status == MarketplaceErrorCodes::IMPORT_DONE)
+ {
+ LLNotificationsUtil::add("OutboxImportComplete", LLSD::emptyMap(), LLSD::emptyMap());
+ }
+ else if (status == MarketplaceErrorCodes::IMPORT_DONE_WITH_ERRORS)
+ {
+ LLNotificationsUtil::add("OutboxImportHadErrors", LLSD::emptyMap(), LLSD::emptyMap());
+ }
+ else
+ {
+ llassert(status == MarketplaceErrorCodes::IMPORT_JOB_FAILED);
+ LLNotificationsUtil::add("OutboxImportFailed", LLSD::emptyMap(), LLSD::emptyMap());
+ }
+ }
+
+ return;
+
+
const LLSD& errors_list = content["errors"];
- if (goodStatus && (errors_list.size() == 0))
+ if (errors_list.size() == 0)
{
LLNotificationsUtil::add("OutboxUploadComplete", LLSD::emptyMap(), LLSD::emptyMap());
}
@@ -287,23 +352,23 @@ void LLPanelMarketplaceOutbox::onSyncComplete(bool goodStatus, const LLSD& conte
}
}
-void LLPanelMarketplaceOutbox::updateSyncButtonStatus()
+void LLPanelMarketplaceOutbox::updateImportButtonStatus()
{
- if (isSyncInProgress())
+ if (isImportInProgress())
{
- mSyncButton->setVisible(false);
+ mImportButton->setVisible(false);
- mSyncIndicator->setVisible(true);
- mSyncIndicator->reset();
- mSyncIndicator->start();
+ mImportIndicator->setVisible(true);
+ mImportIndicator->reset();
+ mImportIndicator->start();
}
else
{
- mSyncIndicator->stop();
- mSyncIndicator->setVisible(false);
+ mImportIndicator->stop();
+ mImportIndicator->setVisible(false);
- mSyncButton->setVisible(true);
- mSyncButton->setEnabled(getMarketplaceSyncEnabled() && !isOutboxEmpty());
+ mImportButton->setVisible(true);
+ mImportButton->setEnabled(getMarketplaceImportEnabled() && !isOutboxEmpty());
}
}
@@ -335,17 +400,32 @@ void LLPanelMarketplaceOutbox::draw()
LLStringUtil::format_map_t args;
args["[NUM]"] = item_count_str;
- getChild<LLButton>("outbox_btn")->setLabel(getString("OutboxLabelWithArg", args));
+ mOutboxButton->setLabel(getString("OutboxLabelWithArg", args));
}
else
{
- getChild<LLButton>("outbox_btn")->setLabel(getString("OutboxLabelNoArg"));
+ mOutboxButton->setLabel(getString("OutboxLabelNoArg"));
}
- if (!isSyncInProgress())
+ if (!isImportInProgress())
{
- mSyncButton->setEnabled(getMarketplaceSyncEnabled() && not_empty);
+ mImportButton->setEnabled(getMarketplaceImportEnabled() && not_empty);
}
+ else
+ {
+ ++mImportFrameTimer;
+
+ if ((mImportFrameTimer % 50 == 0) && !mImportGetPending)
+ {
+ mImportGetPending = true;
+
+ std::string url = getMarketplaceURL_InventoryImport();
+
+ llinfos << "http get: " << url << llendl;
+ LLHTTPClient::get(url, new LLInventoryImportGetResponder(this), LLViewerMedia::getHeaders());
+ }
+ }
+
LLPanel::draw();
}
diff --git a/indra/newview/llpanelmarketplaceoutbox.h b/indra/newview/llpanelmarketplaceoutbox.h
index c6b4a5abe2..a776ee0919 100644
--- a/indra/newview/llpanelmarketplaceoutbox.h
+++ b/indra/newview/llpanelmarketplaceoutbox.h
@@ -59,9 +59,10 @@ public:
U32 getTotalItemCount() const;
bool isOutboxEmpty() const;
- bool isSyncInProgress() const;
+ bool isImportInProgress() const;
- void onSyncComplete(bool goodStatus, const LLSD& content);
+ void onImportPostComplete(U32 status, const LLSD& content);
+ void onImportGetComplete(U32 status, const LLSD& content);
/*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
EDragAndDropType cargo_type,
@@ -70,8 +71,8 @@ public:
std::string& tooltip_msg);
protected:
- void onSyncButtonClicked();
- void updateSyncButtonStatus();
+ void onImportButtonClicked();
+ void updateImportButtonStatus();
void handleLoginComplete();
void onFocusReceived();
@@ -80,9 +81,13 @@ protected:
private:
LLInventoryPanel * mInventoryPanel;
- LLButton * mSyncButton;
- LLLoadingIndicator * mSyncIndicator;
- bool mSyncInProgress;
+ LLButton * mImportButton;
+ U32 mImportFrameTimer;
+ bool mImportGetPending;
+ LLLoadingIndicator * mImportIndicator;
+ bool mImportInProgress;
+
+ LLButton * mOutboxButton;
};
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index d556b8523e..19a81b93bf 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -69,7 +69,7 @@ static LLRegisterPanelClassWrapper<LLSidepanelInventory> t_inventory("sidepanel_
#define AUTO_EXPAND_INBOX 0
// Temporarily disabling the outbox until we straighten out the API
-#define ENABLE_MERCHANT_OUTBOX_PANEL 1 // keep in sync with ENABLE_INVENTORY_DISPLAY_OUTBOX, ENABLE_MERCHANT_OUTBOX_CONTEXT_MENU
+#define ENABLE_MERCHANT_OUTBOX_PANEL 1 // keep in sync with ENABLE_MERCHANT_OUTBOX_CONTEXT_MENU
static const char * const INBOX_BUTTON_NAME = "inbox_btn";
static const char * const OUTBOX_BUTTON_NAME = "outbox_btn";
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index a5bd0223cc..02d8036666 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -1386,64 +1386,6 @@ void LLViewerMedia::removeCookie(const std::string &name, const std::string &dom
}
-// This is defined in two files but I don't want to create a dependence between this and llsidepanelinventory
-// just to be able to temporarily disable the outbox.
-#define ENABLE_INVENTORY_DISPLAY_OUTBOX 1 // keep in sync with ENABLE_MERCHANT_OUTBOX_PANEL, ENABLE_MERCHANT_OUTBOX_CONTEXT_MENU
-
-class LLInventoryUserStatusResponder : public LLHTTPClient::Responder
-{
-public:
- LLInventoryUserStatusResponder()
- : LLCurl::Responder()
- {
- }
-
- void completed(U32 status, const std::string& reason, const LLSD& content)
- {
- if (isGoodStatus(status))
- {
- std::string merchantStatus = content[gAgent.getID().getString()].asString();
- llinfos << "Marketplace merchant status: " << merchantStatus << llendl;
-
- // Save the merchant status before turning on the display
- gSavedSettings.setString("InventoryMarketplaceUserStatus", merchantStatus);
-
- // Complete success
- gSavedSettings.setBOOL("InventoryDisplayInbox", true);
-
-#if ENABLE_INVENTORY_DISPLAY_OUTBOX
- gSavedSettings.setBOOL("InventoryDisplayOutbox", true);
-#endif
-
- setMarketplaceSyncEnabled(true);
- }
- else if (status == 401)
- {
- // API is available for use but OpenID authorization failed
- gSavedSettings.setBOOL("InventoryDisplayInbox", true);
-
- setMarketplaceSyncEnabled(false);
- }
- else
- {
- setMarketplaceSyncEnabled(false);
-
- // API in unavailable
- llinfos << "Marketplace API is unavailable -- Inbox may be disabled, status = " << status << ", reason = " << reason << llendl;
- }
- }
-};
-
-
-void doOnetimeEarlyHTTPRequests()
-{
- std::string url = getMarketplaceURL_UserStatus();
-
- llinfos << "http get: " << url << llendl;
- LLHTTPClient::get(url, new LLInventoryUserStatusResponder(), LLViewerMedia::getHeaders());
-}
-
-
LLSD LLViewerMedia::getHeaders()
{
LLSD headers = LLSD::emptyMap();
@@ -1502,9 +1444,6 @@ void LLViewerMedia::setOpenIDCookie()
LLHTTPClient::get(profile_url,
new LLViewerMediaWebProfileResponder(raw_profile_url.getAuthority()),
headers);
-
- // FUI: No longer perform the user_status query
- //doOnetimeEarlyHTTPRequests();
}
}
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index d925bf8f96..46a6da2450 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -213,9 +213,9 @@ Save changes to current clothing/body part?
<notification
icon="alertmodal.tga"
- name="OutboxUploadComplete"
+ name="OutboxImportComplete"
type="alertmodal">
-Marketplace upload complete.
+Marketplace import complete.
<usetemplate
name="okbutton"
yestext="Hooray!"/>
@@ -223,14 +223,24 @@ Marketplace upload complete.
<notification
icon="alertmodal.tga"
- name="OutboxUploadHadErrors"
+ name="OutboxImportHadErrors"
type="alertmodal">
-Marketplace upload completed with errors! Please correct the problems in your outbox and retry. Thanks.
+Marketplace import completed with errors! Please correct the problems in your outbox and retry. Thanks.
<usetemplate
name="okbutton"
yestext="Boo!"/>
</notification>
+ <notification
+ icon="alertmodal.tga"
+ name="OutboxImportFailed"
+ type="alertmodal">
+Marketplace import failed! Please try again later. Thanks.
+ <usetemplate
+ name="okbutton"
+ yestext="Rats!"/>
+ </notification>
+
<notification
diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
index b52784d6bc..9f3c57fa0f 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
@@ -205,7 +205,7 @@
label=""
tool_tip="Push to my Marketplace Storefront"
is_toggle="false"
- name="outbox_sync_btn"
+ name="outbox_import_btn"
follows="top|right"
tab_stop="false"
halign="center"
@@ -216,7 +216,7 @@
enabled="false" />
<loading_indicator
follows="top|right"
- name="outbox_sync_indicator"
+ name="outbox_import_indicator"
top="6"
left="-50"
height="23"