From ed02d0c1fccbfd25ed54f6be5b051736834d2e27 Mon Sep 17 00:00:00 2001 From: Leyla Farazha Date: Fri, 29 Jul 2011 17:01:24 -0700 Subject: EXP-843 Enable drag and drop to and from the outbox, with conditional warnings based on permissions EXP-1034 Add confirmation dialog for moving no-copy items to outbox --- indra/newview/llpanelmarketplaceoutbox.cpp | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) (limited to 'indra/newview/llpanelmarketplaceoutbox.cpp') diff --git a/indra/newview/llpanelmarketplaceoutbox.cpp b/indra/newview/llpanelmarketplaceoutbox.cpp index 74d0de3b30..9e1b28f168 100644 --- a/indra/newview/llpanelmarketplaceoutbox.cpp +++ b/indra/newview/llpanelmarketplaceoutbox.cpp @@ -38,7 +38,7 @@ #include "llsidepanelinventory.h" #include "llsidetray.h" #include "lltimer.h" - +#include "llfolderview.h" static LLRegisterPanelClassWrapper t_panel_marketplace_outbox("panel_marketplace_outbox"); @@ -136,6 +136,27 @@ void LLPanelMarketplaceOutbox::setupInventoryPanel() outbox_inventory_placeholder->setVisible(FALSE); } +BOOL LLPanelMarketplaceOutbox::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, + EDragAndDropType cargo_type, + void* cargo_data, + EAcceptance* accept, + std::string& tooltip_msg) +{ + BOOL handled = LLPanel::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg); + + if (!handled && mInventoryPanel->getRootFolder()) + { + handled = mInventoryPanel->getRootFolder()->handleDragAndDropFromChild(mask,drop,cargo_type,cargo_data,accept,tooltip_msg); + } + + if (handled && mInventoryPanel->getRootFolder()) + { + mInventoryPanel->getRootFolder()->setDragAndDropThisFrame(); + } + + return handled; +} + bool LLPanelMarketplaceOutbox::isOutboxEmpty() const { // TODO: Check for contents of outbox @@ -170,9 +191,9 @@ void timeDelay(LLCoros::self& self, LLPanelMarketplaceOutbox* outboxPanel) } void LLPanelMarketplaceOutbox::onSyncButtonClicked() -{ +{ // TODO: Actually trigger sync to marketplace - + mSyncInProgress = true; updateSyncButtonStatus(); -- cgit v1.2.3 From adf39dd1473039a8ab9624fa67f3a927fe22b8fe Mon Sep 17 00:00:00 2001 From: Leyla Farazha Date: Fri, 29 Jul 2011 17:02:19 -0700 Subject: fixing outbox handledraganddrop --- indra/newview/llpanelmarketplaceoutbox.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'indra/newview/llpanelmarketplaceoutbox.cpp') diff --git a/indra/newview/llpanelmarketplaceoutbox.cpp b/indra/newview/llpanelmarketplaceoutbox.cpp index 9e1b28f168..c96fb22862 100644 --- a/indra/newview/llpanelmarketplaceoutbox.cpp +++ b/indra/newview/llpanelmarketplaceoutbox.cpp @@ -147,11 +147,11 @@ BOOL LLPanelMarketplaceOutbox::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL d if (!handled && mInventoryPanel->getRootFolder()) { handled = mInventoryPanel->getRootFolder()->handleDragAndDropFromChild(mask,drop,cargo_type,cargo_data,accept,tooltip_msg); - } - if (handled && mInventoryPanel->getRootFolder()) - { - mInventoryPanel->getRootFolder()->setDragAndDropThisFrame(); + if (handled) + { + mInventoryPanel->getRootFolder()->setDragAndDropThisFrame(); + } } return handled; -- cgit v1.2.3 From 5cf4d63a82e2b6c2546a2bb5ef13ef142fc07cb9 Mon Sep 17 00:00:00 2001 From: Leyla Farazha Date: Fri, 29 Jul 2011 17:06:40 -0700 Subject: attempting to do the outbox import --- indra/newview/llpanelmarketplaceoutbox.cpp | 43 ++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) (limited to 'indra/newview/llpanelmarketplaceoutbox.cpp') diff --git a/indra/newview/llpanelmarketplaceoutbox.cpp b/indra/newview/llpanelmarketplaceoutbox.cpp index c96fb22862..074fea546d 100644 --- a/indra/newview/llpanelmarketplaceoutbox.cpp +++ b/indra/newview/llpanelmarketplaceoutbox.cpp @@ -38,6 +38,9 @@ #include "llsidepanelinventory.h" #include "llsidetray.h" #include "lltimer.h" +#include "llviewernetwork.h" +#include "llagent.h" +#include "llviewermedia.h" #include "llfolderview.h" static LLRegisterPanelClassWrapper t_panel_marketplace_outbox("panel_marketplace_outbox"); @@ -190,10 +193,46 @@ void timeDelay(LLCoros::self& self, LLPanelMarketplaceOutbox* outboxPanel) gTimeDelayDebugFunc = ""; } + +class LLInventorySyncResponder : public LLHTTPClient::Responder +{ +public: + LLInventorySyncResponder() + : LLCurl::Responder() + { + } + + void completed(U32 status, const std::string& reason, const LLSD& content) + { + if (isGoodStatus(status)) + { + // Complete success + llinfos << "sync complete" << llendl; + } + else + { + llwarns << "sync failed" << llendl; + } + } +}; + void LLPanelMarketplaceOutbox::onSyncButtonClicked() { - // TODO: Actually trigger sync to marketplace - + std::string url = "http://pdp24.lindenlab.com/3000"; /*"https://marketplace.secondlife.com/"; + + if (!LLGridManager::getInstance()->isInProductionGrid()) + { + std::string gridLabel = LLGridManager::getInstance()->getGridLabel(); + url = llformat("https://marketplace.%s.lindenlab.com/", utf8str_tolower(gridLabel).c_str()); + } + */ + url += "api/1/users/"; + url += gAgent.getID().getString(); + url += "/inventory_import"; + + LLHTTPClient::get(url, new LLInventorySyncResponder(), LLViewerMedia::getHeaders()); + + mSyncInProgress = true; updateSyncButtonStatus(); -- cgit v1.2.3 From 45bf1debaa805b64ce30e3c0670a2e9f24d43e08 Mon Sep 17 00:00:00 2001 From: "leslie@leslie-HPz600.lindenlab.com" Date: Tue, 2 Aug 2011 13:12:39 -0700 Subject: * Fixed up outbox UI alignment to match inbox * Added outbox item count to outbox button title * Updated sync loading indicator to keep moving until http request complete * Updated outbox panel display to use user_status http get response * Removed inbox/outbox folder name hack from LLInventoryPanel --- indra/newview/llpanelmarketplaceoutbox.cpp | 76 ++++++++++++++++++++++++------ 1 file changed, 62 insertions(+), 14 deletions(-) (limited to 'indra/newview/llpanelmarketplaceoutbox.cpp') diff --git a/indra/newview/llpanelmarketplaceoutbox.cpp b/indra/newview/llpanelmarketplaceoutbox.cpp index 074fea546d..90c7f9728b 100644 --- a/indra/newview/llpanelmarketplaceoutbox.cpp +++ b/indra/newview/llpanelmarketplaceoutbox.cpp @@ -147,7 +147,7 @@ BOOL LLPanelMarketplaceOutbox::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL d { BOOL handled = LLPanel::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg); - if (!handled && mInventoryPanel->getRootFolder()) + if (!handled && mInventoryPanel && mInventoryPanel->getRootFolder()) { handled = mInventoryPanel->getRootFolder()->handleDragAndDropFromChild(mask,drop,cargo_type,cargo_data,accept,tooltip_msg); @@ -197,54 +197,65 @@ void timeDelay(LLCoros::self& self, LLPanelMarketplaceOutbox* outboxPanel) class LLInventorySyncResponder : public LLHTTPClient::Responder { public: - LLInventorySyncResponder() + LLInventorySyncResponder(LLPanelMarketplaceOutbox * outboxPanel) : LLCurl::Responder() + , mOutboxPanel(outboxPanel) { } void completed(U32 status, const std::string& reason, const LLSD& content) { + llinfos << "inventory_import complete status: " << status << llendl; + if (isGoodStatus(status)) { // Complete success - llinfos << "sync complete" << llendl; + llinfos << "success" << llendl; } else { - llwarns << "sync failed" << llendl; + llwarns << "failed" << llendl; } + + mOutboxPanel->onSyncComplete(); } + +private: + LLPanelMarketplaceOutbox * mOutboxPanel; }; void LLPanelMarketplaceOutbox::onSyncButtonClicked() { - std::string url = "http://pdp24.lindenlab.com/3000"; /*"https://marketplace.secondlife.com/"; + // Get the sync animation going + mSyncInProgress = true; + updateSyncButtonStatus(); + + // Make the url for the inventory import request + std::string url = "https://marketplace.secondlife.com/"; if (!LLGridManager::getInstance()->isInProductionGrid()) { std::string gridLabel = LLGridManager::getInstance()->getGridLabel(); url = llformat("https://marketplace.%s.lindenlab.com/", utf8str_tolower(gridLabel).c_str()); + + // TEMP for Jim's pdp + //url = "http://pdp24.lindenlab.com:3000/"; } - */ + url += "api/1/users/"; url += gAgent.getID().getString(); url += "/inventory_import"; - LLHTTPClient::get(url, new LLInventorySyncResponder(), LLViewerMedia::getHeaders()); - - - mSyncInProgress = true; - updateSyncButtonStatus(); + llinfos << "http get: " << url << llendl; + LLHTTPClient::get(url, new LLInventorySyncResponder(this), LLViewerMedia::getHeaders()); // Set a timer (for testing only) - - gTimeDelayDebugFunc = LLCoros::instance().launch("LLPanelMarketplaceOutbox timeDelay", boost::bind(&timeDelay, _1, this)); + //gTimeDelayDebugFunc = LLCoros::instance().launch("LLPanelMarketplaceOutbox timeDelay", boost::bind(&timeDelay, _1, this)); } void LLPanelMarketplaceOutbox::onSyncComplete() { mSyncInProgress = false; - updateSyncButtonStatus(); } @@ -267,3 +278,40 @@ void LLPanelMarketplaceOutbox::updateSyncButtonStatus() mSyncButton->setEnabled(!isOutboxEmpty()); } } + +U32 LLPanelMarketplaceOutbox::getTotalItemCount() const +{ + U32 item_count = 0; + + if (mInventoryPanel) + { + const LLFolderViewFolder * outbox_folder = mInventoryPanel->getRootFolder(); + + if (outbox_folder) + { + item_count += outbox_folder->getFoldersCount(); + } + } + + return item_count; +} + +void LLPanelMarketplaceOutbox::draw() +{ + U32 item_count = getTotalItemCount(); + + if (item_count > 0) + { + std::string item_count_str = llformat("%d", item_count); + + LLStringUtil::format_map_t args; + args["[NUM]"] = item_count_str; + getChild("outbox_btn")->setLabel(getString("OutboxLabelWithArg", args)); + } + else + { + getChild("outbox_btn")->setLabel(getString("OutboxLabelNoArg")); + } + + LLPanel::draw(); +} -- cgit v1.2.3 From db45317cae8cfa700f9003541f948afc9e238303 Mon Sep 17 00:00:00 2001 From: "leslie@leslie-HPz600.lindenlab.com" Date: Fri, 5 Aug 2011 11:12:27 -0700 Subject: EXP-863 FIX -- Add Outbox sync button that performs marketplace sync EXP-908 FIX -- Hide outbox when appropriate EXP-1035 FIX -- Allow user to remove items from outbox EXP-1000 FIX -- New icon can cover long names in Received Items Panel EXP-1001 FIX -- Newness is removed on next login if you log out or crash before opening inventory panel EXP-1008 UPDATE -- Extra space at bottom of Inventory panel when Inbox/outbox not displayed * Updated "New" tag to properly display over long names per Epic's design * "New" tags now compare vs last inbox collapse time rather than expansion time * Marketplace inventory panels now have their own layout stack Reviewed by Leyla --- indra/newview/llpanelmarketplaceoutbox.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'indra/newview/llpanelmarketplaceoutbox.cpp') diff --git a/indra/newview/llpanelmarketplaceoutbox.cpp b/indra/newview/llpanelmarketplaceoutbox.cpp index 90c7f9728b..d2f1282c8f 100644 --- a/indra/newview/llpanelmarketplaceoutbox.cpp +++ b/indra/newview/llpanelmarketplaceoutbox.cpp @@ -123,6 +123,8 @@ void LLPanelMarketplaceOutbox::setupInventoryPanel() LLUICtrlFactory::createFromFile("panel_outbox_inventory.xml", outbox_inventory_parent, LLInventoryPanel::child_registry_t::instance()); + + llassert(mInventoryPanel); // Reshape the inventory to the proper size LLRect inventory_placeholder_rect = outbox_inventory_placeholder->getRect(); -- cgit v1.2.3 From 18ee1f48f9f5b8559385b88f86ab8c9bccfcb3c8 Mon Sep 17 00:00:00 2001 From: Leyla Farazha Date: Fri, 12 Aug 2011 15:16:53 -0700 Subject: EXP-1069 Outbox sync should auto-delete empty folders --- indra/newview/llpanelmarketplaceoutbox.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'indra/newview/llpanelmarketplaceoutbox.cpp') diff --git a/indra/newview/llpanelmarketplaceoutbox.cpp b/indra/newview/llpanelmarketplaceoutbox.cpp index 88feb05114..913a62b897 100644 --- a/indra/newview/llpanelmarketplaceoutbox.cpp +++ b/indra/newview/llpanelmarketplaceoutbox.cpp @@ -42,6 +42,7 @@ #include "llagent.h" #include "llviewermedia.h" #include "llfolderview.h" +#include "llinventoryfunctions.h" static LLRegisterPanelClassWrapper t_panel_marketplace_outbox("panel_marketplace_outbox"); @@ -198,7 +199,13 @@ public: { // Complete success llinfos << "success" << llendl; - + LLSD imported_list = content["imported"]; + LLSD::array_const_iterator it = imported_list.beginArray(); + for ( ; it != imported_list.endArray(); ++it) + { + LLUUID imported_folder = (*it).asUUID(); + remove_category(&gInventory, imported_folder); + } } else { -- cgit v1.2.3 From 7b09592bf9968dfda5c4cedf4b55e0459e6bd764 Mon Sep 17 00:00:00 2001 From: Leslie Linden Date: Fri, 19 Aug 2011 16:20:29 -0700 Subject: EXP-840 FIX -- Create outbox panels to help the user get started on the marketplace and to indicate drag and drop targets. EXP-858 PROGRESS -- Outbox sync failure error handling EXP-908 FIX -- Hide outbox when appropriate EXP-1062 FIX -- Add modal dialog for outbox sync complete EXP-1096 FIX -- Extra space below Received Items panel for an account that does not have a Merchant Account setup, no outbox display EXP-1104 FIX -- User can activate Merchant Outbox synch button when outbox is empty * Added separate class for outbox view to support error tag rendering * Added confirmation for sync complete. * Added different outbox messages for empty outbox, non-merchant and error: merchant but no outbox * Progress on a bunch of other fronts. --- indra/newview/llpanelmarketplaceoutbox.cpp | 36 +++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 11 deletions(-) (limited to 'indra/newview/llpanelmarketplaceoutbox.cpp') diff --git a/indra/newview/llpanelmarketplaceoutbox.cpp b/indra/newview/llpanelmarketplaceoutbox.cpp index 913a62b897..221420985a 100644 --- a/indra/newview/llpanelmarketplaceoutbox.cpp +++ b/indra/newview/llpanelmarketplaceoutbox.cpp @@ -34,6 +34,7 @@ #include "lleventcoro.h" #include "llinventorypanel.h" #include "llloadingindicator.h" +#include "llnotificationsutil.h" #include "llpanelmarketplaceinbox.h" #include "llsidepanelinventory.h" #include "llsidetray.h" @@ -100,7 +101,7 @@ void LLPanelMarketplaceOutbox::onSelectionChange() LLInventoryPanel * LLPanelMarketplaceOutbox::setupInventoryPanel() { - LLView * outbox_inventory_placeholder = getChild("outbox_inventory_placeholder"); + LLView * outbox_inventory_placeholder = getChild("outbox_inventory_placeholder_panel"); LLView * outbox_inventory_parent = outbox_inventory_placeholder->getParent(); mInventoryPanel = @@ -150,9 +151,7 @@ BOOL LLPanelMarketplaceOutbox::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL d bool LLPanelMarketplaceOutbox::isOutboxEmpty() const { - // TODO: Check for contents of outbox - - return false; + return (getTotalItemCount() == 0); } bool LLPanelMarketplaceOutbox::isSyncInProgress() const @@ -176,7 +175,7 @@ void timeDelay(LLCoros::self& self, LLPanelMarketplaceOutbox* outboxPanel) waitForEventOn(self, "mainloop"); } - outboxPanel->onSyncComplete(); + outboxPanel->onSyncComplete(true, LLSD::emptyMap()); gTimeDelayDebugFunc = ""; } @@ -193,7 +192,7 @@ public: void completed(U32 status, const std::string& reason, const LLSD& content) { - llinfos << "inventory_import complete status: " << status << llendl; + llinfos << "inventory_import complete status: " << status << ", reason: " << reason << llendl; if (isGoodStatus(status)) { @@ -212,7 +211,7 @@ public: llwarns << "failed" << llendl; } - mOutboxPanel->onSyncComplete(); + mOutboxPanel->onSyncComplete(isGoodStatus(status), content); } private: @@ -248,10 +247,19 @@ void LLPanelMarketplaceOutbox::onSyncButtonClicked() //gTimeDelayDebugFunc = LLCoros::instance().launch("LLPanelMarketplaceOutbox timeDelay", boost::bind(&timeDelay, _1, this)); } -void LLPanelMarketplaceOutbox::onSyncComplete() +void LLPanelMarketplaceOutbox::onSyncComplete(bool goodStatus, const LLSD& content) { mSyncInProgress = false; updateSyncButtonStatus(); + + if (goodStatus) + { + LLNotificationsUtil::add("OutboxUploadComplete", LLSD::emptyMap(), LLSD::emptyMap()); + } + else + { + LLNotificationsUtil::add("OutboxUploadHadErrors", LLSD::emptyMap(), LLSD::emptyMap()); + } } void LLPanelMarketplaceOutbox::updateSyncButtonStatus() @@ -293,9 +301,10 @@ U32 LLPanelMarketplaceOutbox::getTotalItemCount() const void LLPanelMarketplaceOutbox::draw() { - U32 item_count = getTotalItemCount(); + const U32 item_count = getTotalItemCount(); + const bool not_empty = (item_count > 0); - if (item_count > 0) + if (not_empty) { std::string item_count_str = llformat("%d", item_count); @@ -307,6 +316,11 @@ void LLPanelMarketplaceOutbox::draw() { getChild("outbox_btn")->setLabel(getString("OutboxLabelNoArg")); } - + + if (!isSyncInProgress()) + { + mSyncButton->setEnabled(not_empty); + } + LLPanel::draw(); } -- cgit v1.2.3 From c2443b95d3cd9f0f26e5e8f5c2dbeb5f6c307447 Mon Sep 17 00:00:00 2001 From: "leslie@leslie-HPz600.lindenlab.com" Date: Fri, 26 Aug 2011 16:33:47 -0700 Subject: EXP-1126 FIX -- Cannot use arrow keys to scroll up and down in Inbox and Outbox EXP-1003 FIX -- Renaming a folder in Received Items panel resets the New flag for that folder EXP-1001 FIX -- Newness is removed on next login if you log out or crash before opening inventory panel EXP-857 FIX -- Add context menu entries as alternate path to populate outbox EXP-858 FIX -- Outbox sync failure error handling EXP-1158 FIX -- Viewer crash when deleting items from Outbox when some folders are open * Made inbox, outbox and inventory panels all legit tab stops for keyboard focus * Added mouse over indication on inventory panel primarily for increased clarity on outbox error messages * Disabled "Rename" option on inbox items * Added context menu option to copy/move an item to the merchant outbox * Context menu option to copy/move to outbox is visible and/or enabled/disabled when appropriate * "LastInventoryInboxCollapse" no longer written out as a setting when the panel is not visible * Fixed up collapse time check to not try to parse empty string on first load (deminishes text spam in log greatly) * Disabled double-click as a way to equip items in the inbox or outbox * Viewer code no longer removes items from the outbox after sync. We rely on the sim to do this now. * Basic outbox sync error handling now displays error messages as tooltips along with badge over item in outbox * Moved some scroll container default values out of code and into xml --- indra/newview/llpanelmarketplaceoutbox.cpp | 46 ++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 8 deletions(-) (limited to 'indra/newview/llpanelmarketplaceoutbox.cpp') diff --git a/indra/newview/llpanelmarketplaceoutbox.cpp b/indra/newview/llpanelmarketplaceoutbox.cpp index 221420985a..839369bffe 100644 --- a/indra/newview/llpanelmarketplaceoutbox.cpp +++ b/indra/newview/llpanelmarketplaceoutbox.cpp @@ -27,6 +27,7 @@ #include "llviewerprecompiledheaders.h" #include "llpanelmarketplaceoutbox.h" +#include "llpanelmarketplaceoutboxinventory.h" #include "llappviewer.h" #include "llbutton.h" @@ -36,6 +37,7 @@ #include "llloadingindicator.h" #include "llnotificationsutil.h" #include "llpanelmarketplaceinbox.h" +#include "llsdutil.h" #include "llsidepanelinventory.h" #include "llsidetray.h" #include "lltimer.h" @@ -198,13 +200,6 @@ public: { // Complete success llinfos << "success" << llendl; - LLSD imported_list = content["imported"]; - LLSD::array_const_iterator it = imported_list.beginArray(); - for ( ; it != imported_list.endArray(); ++it) - { - LLUUID imported_folder = (*it).asUUID(); - remove_category(&gInventory, imported_folder); - } } else { @@ -252,7 +247,9 @@ void LLPanelMarketplaceOutbox::onSyncComplete(bool goodStatus, const LLSD& conte mSyncInProgress = false; updateSyncButtonStatus(); - if (goodStatus) + const LLSD& errors_list = content["errors"]; + + if (goodStatus && (errors_list.size() == 0)) { LLNotificationsUtil::add("OutboxUploadComplete", LLSD::emptyMap(), LLSD::emptyMap()); } @@ -260,6 +257,39 @@ void LLPanelMarketplaceOutbox::onSyncComplete(bool goodStatus, const LLSD& conte { LLNotificationsUtil::add("OutboxUploadHadErrors", LLSD::emptyMap(), LLSD::emptyMap()); } + + llinfos << "Marketplace upload llsd:" << llendl; + llinfos << ll_pretty_print_sd(content) << llendl; + llinfos << llendl; + + const LLSD& imported_list = content["imported"]; + LLSD::array_const_iterator it = imported_list.beginArray(); + for ( ; it != imported_list.endArray(); ++it) + { + LLUUID imported_folder = (*it).asUUID(); + llinfos << "Successfully uploaded folder " << imported_folder.asString() << " to marketplace." << llendl; + } + + for (it = errors_list.beginArray(); it != errors_list.endArray(); ++it) + { + const LLSD& item_error_map = (*it); + + LLUUID error_folder = item_error_map["folder_id"].asUUID(); + const std::string& error_string = item_error_map["identifier"].asString(); + LLUUID error_item = item_error_map["item_id"].asUUID(); + const std::string& error_item_name = item_error_map["item_name"].asString(); + const std::string& error_message = item_error_map["message"].asString(); + + llinfos << "Error item " << error_folder.asString() << ", " << error_string << ", " + << error_item.asString() << ", " << error_item_name << ", " << error_message << llendl; + + LLFolderViewFolder * item_folder = mInventoryPanel->getRootFolder()->getFolderByID(error_folder); + LLOutboxFolderViewFolder * outbox_item_folder = dynamic_cast(item_folder); + + llassert(outbox_item_folder); + + outbox_item_folder->setErrorString(error_string); + } } void LLPanelMarketplaceOutbox::updateSyncButtonStatus() -- cgit v1.2.3