diff options
Diffstat (limited to 'indra')
| -rwxr-xr-x | indra/llcommon/llfoldertype.cpp | 5 | ||||
| -rwxr-xr-x | indra/newview/app_settings/settings.xml | 11 | ||||
| -rwxr-xr-x | indra/newview/llfloateroutbox.cpp | 116 | ||||
| -rwxr-xr-x | indra/newview/llfloateroutbox.h | 3 | ||||
| -rwxr-xr-x | indra/newview/llinventorypanel.cpp | 7 | ||||
| -rwxr-xr-x | indra/newview/llmarketplacefunctions.cpp | 81 | ||||
| -rwxr-xr-x | indra/newview/llmarketplacefunctions.h | 19 | ||||
| -rw-r--r-- | indra/newview/llviewerfoldertype.cpp | 8 | ||||
| -rwxr-xr-x | indra/newview/skins/default/xui/en/notifications.xml | 4 | ||||
| -rwxr-xr-x | indra/newview/skins/default/xui/en/strings.xml | 10 | 
10 files changed, 196 insertions, 68 deletions
| diff --git a/indra/llcommon/llfoldertype.cpp b/indra/llcommon/llfoldertype.cpp index f6d0f5bce8..9c38349cf7 100755 --- a/indra/llcommon/llfoldertype.cpp +++ b/indra/llcommon/llfoldertype.cpp @@ -92,8 +92,9 @@ LLFolderDictionary::LLFolderDictionary()  	addEntry(LLFolderType::FT_MESH, 				new FolderEntry("mesh",	TRUE)); -	addEntry(LLFolderType::FT_INBOX, 				new FolderEntry("inbox",	TRUE)); -	addEntry(LLFolderType::FT_OUTBOX, 				new FolderEntry("outbox",	TRUE)); +	addEntry(LLFolderType::FT_INBOX, 				new FolderEntry("inbox",	FALSE)); +	addEntry(LLFolderType::FT_OUTBOX, 				new FolderEntry("outbox",	FALSE)); +	  	addEntry(LLFolderType::FT_BASIC_ROOT,			new FolderEntry("basic_rt", TRUE));  	addEntry(LLFolderType::FT_NONE, 				new FolderEntry("-1",		FALSE)); diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index eeed12499d..6c9470b118 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -4655,6 +4655,17 @@  		<key>Value</key>  		<integer>0</integer>  	</map> +	<key>InventoryOutboxMakeVisible</key> +	<map> +		<key>Comment</key> +		<string>Enable making the Merchant Outbox and Inbox visible in the inventory for debug purposes.</string> +		<key>Persist</key> +		<integer>1</integer> +		<key>Type</key> +		<string>Boolean</string> +		<key>Value</key> +		<integer>0</integer> +	</map>      <key>InventoryOutboxMaxFolderCount</key>      <map>        <key>Comment</key> diff --git a/indra/newview/llfloateroutbox.cpp b/indra/newview/llfloateroutbox.cpp index 29a3e6ac3a..4bd0574fc1 100755 --- a/indra/newview/llfloateroutbox.cpp +++ b/indra/newview/llfloateroutbox.cpp @@ -95,7 +95,7 @@ public:  			if (added_category_type == LLFolderType::FT_OUTBOX)  			{ -				mOutboxFloater->setupOutbox(added_category->getUUID()); +				mOutboxFloater->initializeMarketPlace();  			}  		}  	} @@ -157,6 +157,10 @@ BOOL LLFloaterOutbox::postBuild()  	LLFocusableElement::setFocusReceivedCallback(boost::bind(&LLFloaterOutbox::onFocusReceived, this)); +	// Observe category creation to catch outbox creation (moot if already existing) +	mCategoryAddedObserver = new LLOutboxAddedObserver(this); +	gInventory.addObserver(mCategoryAddedObserver); +	  	return TRUE;  } @@ -173,33 +177,25 @@ void LLFloaterOutbox::onClose(bool app_quitting)  void LLFloaterOutbox::onOpen(const LLSD& key)  {  	// -	// Look for an outbox and set up the inventory API +	// Initialize the Market Place or go update the outbox  	// -	 -	if (mOutboxId.isNull()) +	if (LLMarketplaceInventoryImporter::getInstance()->getMarketPlaceStatus() == MarketplaceStatusCodes::MARKET_PLACE_NOT_INITIALIZED)  	{ -		const bool do_not_create_folder = false; -		 -		const LLUUID outbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, do_not_create_folder); -		 -		if (outbox_id.isNull()) -		{ -			// Observe category creation to catch outbox creation -			mCategoryAddedObserver = new LLOutboxAddedObserver(this); -			gInventory.addObserver(mCategoryAddedObserver); -		} -		else -		{ -			setupOutbox(outbox_id); -		} +		initializeMarketPlace(); +	} +	else  +	{ +		setupOutbox();  	} +	// +	// Update the floater view +	//  	updateView();  	//  	// Trigger fetch of outbox contents  	// -	  	fetchOutboxContents();  } @@ -216,14 +212,23 @@ void LLFloaterOutbox::fetchOutboxContents()  	}  } -void LLFloaterOutbox::setupOutbox(const LLUUID& outboxId) +void LLFloaterOutbox::setupOutbox()  { -	llassert(outboxId.notNull()); -	llassert(mOutboxId.isNull()); -	llassert(mCategoriesObserver == NULL); -	 -	mOutboxId = outboxId; -	 +	if (LLMarketplaceInventoryImporter::getInstance()->getMarketPlaceStatus() != MarketplaceStatusCodes::MARKET_PLACE_MERCHANT) +	{ +		// If we are *not* a merchant or we have no market place connection established yet, do nothing +		return; +	} +		 +	// We are a merchant. Get the outbox, create it if needs be. +	mOutboxId = gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, true); +	if (mOutboxId.isNull()) +	{ +		// We should never get there unless the inventory fails badly +		llerrs << "Inventory problem: failure to create the outbox for a merchant!" << llendl; +		return; +	} +  	// No longer need to observe new category creation  	if (mCategoryAddedObserver && gInventory.containsObserver(mCategoryAddedObserver))  	{ @@ -231,22 +236,24 @@ void LLFloaterOutbox::setupOutbox(const LLUUID& outboxId)  		delete mCategoryAddedObserver;  		mCategoryAddedObserver = NULL;  	} +	llassert(!mCategoryAddedObserver);  	// Create observer for outbox modifications -	mCategoriesObserver = new LLInventoryCategoriesObserver(); -	gInventory.addObserver(mCategoriesObserver); -	 -	mCategoriesObserver->addCategory(mOutboxId, boost::bind(&LLFloaterOutbox::onOutboxChanged, this)); +	if (mCategoriesObserver == NULL) +	{ +		mCategoriesObserver = new LLInventoryCategoriesObserver(); +		gInventory.addObserver(mCategoriesObserver); +		mCategoriesObserver->addCategory(mOutboxId, boost::bind(&LLFloaterOutbox::onOutboxChanged, this)); +	} +	llassert(mCategoriesObserver);  	//  	// Set up the outbox inventory view  	// -	 -	mOutboxInventoryPanel =  -		LLUICtrlFactory::createFromFile<LLInventoryPanel>("panel_outbox_inventory.xml", -														  mInventoryPlaceholder->getParent(), -														  LLInventoryPanel::child_registry_t::instance()); -	 +	if (mOutboxInventoryPanel == NULL) +	{ +		mOutboxInventoryPanel = LLUICtrlFactory::createFromFile<LLInventoryPanel>("panel_outbox_inventory.xml", mInventoryPlaceholder->getParent(), LLInventoryPanel::child_registry_t::instance()); +	}	  	llassert(mOutboxInventoryPanel);  	// Reshape the inventory to the proper size @@ -258,8 +265,12 @@ void LLFloaterOutbox::setupOutbox(const LLUUID& outboxId)  	mOutboxInventoryPanel->getFolderViewModel()->setSorter(LLInventoryFilter::SO_FOLDERS_BY_NAME);	  	mOutboxInventoryPanel->getFilter().markDefault(); +	// Get the content of the outbox  	fetchOutboxContents(); -	 +} + +void LLFloaterOutbox::initializeMarketPlace() +{  	//  	// Initialize the marketplace import API  	// @@ -332,6 +343,7 @@ void LLFloaterOutbox::updateView()  	{  		mOutboxInventoryPanel->setVisible(TRUE);  		mInventoryPlaceholder->setVisible(FALSE); +		mOutboxTopLevelDropZone->setVisible(TRUE);  	}  	else  	{ @@ -339,6 +351,9 @@ void LLFloaterOutbox::updateView()  		{  			mOutboxInventoryPanel->setVisible(FALSE);  		} +		 +		// Show the drop zone if there is an outbox folder +		mOutboxTopLevelDropZone->setVisible(mOutboxId.notNull());  		mInventoryPlaceholder->setVisible(TRUE); @@ -347,19 +362,36 @@ void LLFloaterOutbox::updateView()  		std::string outbox_tooltip;  		const LLSD& subs = getMarketplaceStringSubstitutions(); +		U32 mkt_status = LLMarketplaceInventoryImporter::getInstance()->getMarketPlaceStatus();  		if (mOutboxId.notNull())  		{ +			// "Outbox is empty!" message strings  			outbox_text = LLTrans::getString("InventoryOutboxNoItems", subs);  			outbox_title = LLTrans::getString("InventoryOutboxNoItemsTitle");  			outbox_tooltip = LLTrans::getString("InventoryOutboxNoItemsTooltip");  		} -		else +		else if (mkt_status <= MarketplaceStatusCodes::MARKET_PLACE_INITIALIZING)  		{ +			// "Initializing!" message strings +			outbox_text = LLTrans::getString("InventoryOutboxInitializing", subs); +			outbox_title = LLTrans::getString("InventoryOutboxInitializingTitle"); +			outbox_tooltip = LLTrans::getString("InventoryOutboxInitializingTooltip"); +		} +		else if (mkt_status == MarketplaceStatusCodes::MARKET_PLACE_NOT_MERCHANT) +		{ +			// "Not a merchant!" message strings  			outbox_text = LLTrans::getString("InventoryOutboxNotMerchant", subs);  			outbox_title = LLTrans::getString("InventoryOutboxNotMerchantTitle");  			outbox_tooltip = LLTrans::getString("InventoryOutboxNotMerchantTooltip");  		} +		else +		{ +			// "Errors!" message strings +			outbox_text = LLTrans::getString("InventoryOutboxError", subs); +			outbox_title = LLTrans::getString("InventoryOutboxErrorTitle"); +			outbox_tooltip = LLTrans::getString("InventoryOutboxErrorTooltip"); +		}  		mInventoryText->setValue(outbox_text);  		mInventoryTitle->setValue(outbox_title); @@ -486,6 +518,11 @@ void LLFloaterOutbox::importReportResults(U32 status, const LLSD& content)  void LLFloaterOutbox::importStatusChanged(bool inProgress)  { +	if (mOutboxId.isNull() && (LLMarketplaceInventoryImporter::getInstance()->getMarketPlaceStatus() == MarketplaceStatusCodes::MARKET_PLACE_MERCHANT)) +	{ +		setupOutbox(); +	} +	  	if (inProgress)  	{  		if (mImportBusy) @@ -503,6 +540,7 @@ void LLFloaterOutbox::importStatusChanged(bool inProgress)  	}  	else  	{ +		setStatusString("");  		mImportBusy = false;  		mImportButton->setEnabled(mOutboxItemCount > 0);  		mInventoryImportInProgress->setVisible(false); @@ -513,7 +551,7 @@ void LLFloaterOutbox::importStatusChanged(bool inProgress)  void LLFloaterOutbox::initializationReportError(U32 status, const LLSD& content)  { -	if (status != MarketplaceErrorCodes::IMPORT_DONE) +	if (status >= MarketplaceErrorCodes::IMPORT_BAD_REQUEST)  	{  		char status_string[16];  		sprintf(status_string, "%d", status); diff --git a/indra/newview/llfloateroutbox.h b/indra/newview/llfloateroutbox.h index a91d8c1139..8a32632a1b 100755 --- a/indra/newview/llfloateroutbox.h +++ b/indra/newview/llfloateroutbox.h @@ -54,7 +54,7 @@ public:  	LLFloaterOutbox(const LLSD& key);  	~LLFloaterOutbox(); -	void setupOutbox(const LLUUID& outboxId); +	void initializeMarketPlace();  	// virtuals  	BOOL postBuild(); @@ -70,6 +70,7 @@ public:  	void onMouseLeave(S32 x, S32 y, MASK mask);  protected: +	void setupOutbox();  	void fetchOutboxContents();  	void importReportResults(U32 status, const LLSD& content); diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index e5b9e11d48..f2c5f0aa55 100755 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -259,8 +259,11 @@ void LLInventoryPanel::initFromParams(const LLInventoryPanel::Params& params)  	}  	// hide inbox -	getFilter().setFilterCategoryTypes(getFilter().getFilterCategoryTypes() & ~(1ULL << LLFolderType::FT_INBOX)); -	getFilter().setFilterCategoryTypes(getFilter().getFilterCategoryTypes() & ~(1ULL << LLFolderType::FT_OUTBOX)); +	if (!gSavedSettings.getBOOL("InventoryOutboxMakeVisible")) +	{ +		getFilter().setFilterCategoryTypes(getFilter().getFilterCategoryTypes() & ~(1ULL << LLFolderType::FT_INBOX)); +		getFilter().setFilterCategoryTypes(getFilter().getFilterCategoryTypes() & ~(1ULL << LLFolderType::FT_OUTBOX)); +	}  	// set the filter for the empty folder if the debug setting is on  	if (gSavedSettings.getBOOL("DebugHideEmptySystemFolders")) diff --git a/indra/newview/llmarketplacefunctions.cpp b/indra/newview/llmarketplacefunctions.cpp index 0b009b68f7..835615723a 100755 --- a/indra/newview/llmarketplacefunctions.cpp +++ b/indra/newview/llmarketplacefunctions.cpp @@ -30,6 +30,7 @@  #include "llagent.h"  #include "llhttpclient.h" +#include "llsdserialize.h"  #include "lltimer.h"  #include "lltrans.h"  #include "llviewercontrol.h" @@ -135,19 +136,25 @@ namespace LLMarketplaceImport  				llinfos << " SLM POST status: " << status << llendl;  				llinfos << " SLM POST reason: " << reason << llendl;  				llinfos << " SLM POST content: " << content.asString() << llendl; -  				llinfos << " SLM POST timer: " << slmPostTimer.getElapsedTimeF32() << llendl;  			} -			if ((status == MarketplaceErrorCodes::IMPORT_REDIRECT) || -				(status == MarketplaceErrorCodes::IMPORT_AUTHENTICATION_ERROR) || -				(status == MarketplaceErrorCodes::IMPORT_JOB_TIMEOUT)) +			// MAINT-2301 : we determined we can safely ignore that error in that context +			if (status == MarketplaceErrorCodes::IMPORT_JOB_TIMEOUT)  			{  				if (gSavedSettings.getBOOL("InventoryOutboxLogging"))  				{ -					llinfos << " SLM POST clearing marketplace cookie due to authentication failure or timeout" << llendl; +					llinfos << " SLM POST : Ignoring time out status and treating it as success" << llendl; +				} +				status = MarketplaceErrorCodes::IMPORT_DONE; +			} +			 +			if (status >= MarketplaceErrorCodes::IMPORT_BAD_REQUEST) +			{ +				if (gSavedSettings.getBOOL("InventoryOutboxLogging")) +				{ +					llinfos << " SLM POST clearing marketplace cookie due to client or server error" << llendl;  				} -  				sMarketplaceCookie.clear();  			} @@ -182,20 +189,23 @@ namespace LLMarketplaceImport  				llinfos << " SLM GET status: " << status << llendl;  				llinfos << " SLM GET reason: " << reason << llendl;  				llinfos << " SLM GET content: " << content.asString() << llendl; -  				llinfos << " SLM GET timer: " << slmGetTimer.getElapsedTimeF32() << llendl;  			} -			if ((status == MarketplaceErrorCodes::IMPORT_AUTHENTICATION_ERROR) || -				(status == MarketplaceErrorCodes::IMPORT_JOB_TIMEOUT)) +            // MAINT-2452 : Do not clear the cookie on IMPORT_DONE_WITH_ERRORS +			if ((status >= MarketplaceErrorCodes::IMPORT_BAD_REQUEST) && +                (status != MarketplaceErrorCodes::IMPORT_DONE_WITH_ERRORS))  			{  				if (gSavedSettings.getBOOL("InventoryOutboxLogging"))  				{ -					llinfos << " SLM GET clearing marketplace cookie due to authentication failure or timeout" << llendl; +					llinfos << " SLM GET clearing marketplace cookie due to client or server error" << llendl;  				} -  				sMarketplaceCookie.clear();  			} +            else if (gSavedSettings.getBOOL("InventoryOutboxLogging") && (status == MarketplaceErrorCodes::IMPORT_DONE_WITH_ERRORS)) +            { +                llinfos << " SLM GET : Got IMPORT_DONE_WITH_ERRORS, marketplace cookie not cleared." << llendl; +            }  			sImportInProgress = (status == MarketplaceErrorCodes::IMPORT_PROCESSING);  			sImportGetPending = false; @@ -256,7 +266,12 @@ namespace LLMarketplaceImport  		if (gSavedSettings.getBOOL("InventoryOutboxLogging"))  		{ -			llinfos << " SLM GET: " << url << llendl; +            llinfos << " SLM GET: establishMarketplaceSessionCookie, LLHTTPClient::get, url = " << url << llendl; +            LLSD headers = LLViewerMedia::getHeaders(); +            std::stringstream str; +            LLSDSerialize::toPrettyXML(headers, str); +            llinfos << " SLM GET: headers " << llendl; +            llinfos << str.str() << llendl;  		}  		slmGetTimer.start(); @@ -287,7 +302,11 @@ namespace LLMarketplaceImport  		if (gSavedSettings.getBOOL("InventoryOutboxLogging"))  		{ -			llinfos << " SLM GET: " << url << llendl; +            llinfos << " SLM GET: pollStatus, LLHTTPClient::get, url = " << url << llendl; +            std::stringstream str; +            LLSDSerialize::toPrettyXML(headers, str); +            llinfos << " SLM GET: headers " << llendl; +            llinfos << str.str() << llendl;  		}  		slmGetTimer.start(); @@ -321,11 +340,15 @@ namespace LLMarketplaceImport  		if (gSavedSettings.getBOOL("InventoryOutboxLogging"))  		{ -			llinfos << " SLM POST: " << url << llendl; +            llinfos << " SLM POST: triggerImport, LLHTTPClient::post, url = " << url << llendl; +            std::stringstream str; +            LLSDSerialize::toPrettyXML(headers, str); +            llinfos << " SLM POST: headers " << llendl; +            llinfos << str.str() << llendl;  		}  		slmPostTimer.start(); -		LLHTTPClient::post(url, LLSD(), new LLImportPostResponder(), headers); +        LLHTTPClient::post(url, LLSD(), new LLImportPostResponder(), headers);  		return true;  	} @@ -356,6 +379,7 @@ LLMarketplaceInventoryImporter::LLMarketplaceInventoryImporter()  	: mAutoTriggerImport(false)  	, mImportInProgress(false)  	, mInitialized(false) +	, mMarketPlaceStatus(MarketplaceStatusCodes::MARKET_PLACE_NOT_INITIALIZED)  	, mErrorInitSignal(NULL)  	, mStatusChangedSignal(NULL)  	, mStatusReportSignal(NULL) @@ -398,16 +422,20 @@ void LLMarketplaceInventoryImporter::initialize()  	if (!LLMarketplaceImport::hasSessionCookie())  	{ +		mMarketPlaceStatus = MarketplaceStatusCodes::MARKET_PLACE_INITIALIZING;  		LLMarketplaceImport::establishMarketplaceSessionCookie();  	} +	else +	{ +		mMarketPlaceStatus = MarketplaceStatusCodes::MARKET_PLACE_MERCHANT; +	}  }  void LLMarketplaceInventoryImporter::reinitializeAndTriggerImport()  {  	mInitialized = false; - +	mMarketPlaceStatus = MarketplaceStatusCodes::MARKET_PLACE_NOT_INITIALIZED;  	initialize(); -  	mAutoTriggerImport = true;  } @@ -459,17 +487,30 @@ void LLMarketplaceInventoryImporter::updateImport()  				if (mInitialized)  				{ +					mMarketPlaceStatus = MarketplaceStatusCodes::MARKET_PLACE_MERCHANT;  					// Follow up with auto trigger of import  					if (mAutoTriggerImport)  					{  						mAutoTriggerImport = false; -  						mImportInProgress = triggerImport();  					}  				} -				else if (mErrorInitSignal) +				else  				{ -					(*mErrorInitSignal)(LLMarketplaceImport::getResultStatus(), LLMarketplaceImport::getResults()); +					U32 status = LLMarketplaceImport::getResultStatus(); +					if ((status == MarketplaceErrorCodes::IMPORT_FORBIDDEN) || +						(status == MarketplaceErrorCodes::IMPORT_AUTHENTICATION_ERROR)) +					{ +						mMarketPlaceStatus = MarketplaceStatusCodes::MARKET_PLACE_NOT_MERCHANT; +					} +					else  +					{ +						mMarketPlaceStatus = MarketplaceStatusCodes::MARKET_PLACE_CONNECTION_FAILURE; +					} +					if (mErrorInitSignal && (mMarketPlaceStatus == MarketplaceStatusCodes::MARKET_PLACE_CONNECTION_FAILURE)) +					{ +						(*mErrorInitSignal)(LLMarketplaceImport::getResultStatus(), LLMarketplaceImport::getResults()); +					}  				}  			}  		} diff --git a/indra/newview/llmarketplacefunctions.h b/indra/newview/llmarketplacefunctions.h index 4b8f7a1ac7..7f645e2fe2 100755 --- a/indra/newview/llmarketplacefunctions.h +++ b/indra/newview/llmarketplacefunctions.h @@ -47,10 +47,27 @@ namespace MarketplaceErrorCodes  		IMPORT_DONE = 200,  		IMPORT_PROCESSING = 202,  		IMPORT_REDIRECT = 302, +		IMPORT_BAD_REQUEST = 400,  		IMPORT_AUTHENTICATION_ERROR = 401, +		IMPORT_FORBIDDEN = 403, +		IMPORT_NOT_FOUND = 404,  		IMPORT_DONE_WITH_ERRORS = 409,  		IMPORT_JOB_FAILED = 410,  		IMPORT_JOB_TIMEOUT = 499, +		IMPORT_SERVER_SITE_DOWN = 500, +		IMPORT_SERVER_API_DISABLED = 503, +	}; +} + +namespace MarketplaceStatusCodes +{ +	enum sCode +	{ +		MARKET_PLACE_NOT_INITIALIZED = 0, +		MARKET_PLACE_INITIALIZING = 1, +		MARKET_PLACE_CONNECTION_FAILURE = 2, +		MARKET_PLACE_MERCHANT = 3, +		MARKET_PLACE_NOT_MERCHANT = 4,  	};  } @@ -73,6 +90,7 @@ public:  	void initialize();  	bool triggerImport();  	bool isImportInProgress() const { return mImportInProgress; } +	U32 getMarketPlaceStatus() const { return mMarketPlaceStatus; }  protected:  	void reinitializeAndTriggerImport(); @@ -82,6 +100,7 @@ private:  	bool mAutoTriggerImport;  	bool mImportInProgress;  	bool mInitialized; +	U32  mMarketPlaceStatus;  	status_report_signal_t *	mErrorInitSignal;  	status_changed_signal_t *	mStatusChangedSignal; diff --git a/indra/newview/llviewerfoldertype.cpp b/indra/newview/llviewerfoldertype.cpp index a179b61cff..991f6b40e6 100644 --- a/indra/newview/llviewerfoldertype.cpp +++ b/indra/newview/llviewerfoldertype.cpp @@ -30,6 +30,9 @@  #include "lldictionary.h"  #include "llmemory.h"  #include "llvisualparam.h" +#include "llcontrol.h" + +extern LLControlGroup gSavedSettings;  static const std::string empty_string; @@ -132,8 +135,9 @@ LLViewerFolderDictionary::LLViewerFolderDictionary()  	addEntry(LLFolderType::FT_MY_OUTFITS, 			new ViewerFolderEntry("My Outfits",				"Inv_SysOpen",			"Inv_SysClosed",		TRUE,      true));  	addEntry(LLFolderType::FT_MESH, 				new ViewerFolderEntry("Meshes",					"Inv_SysOpen",			"Inv_SysClosed",		FALSE,     true)); -	addEntry(LLFolderType::FT_INBOX, 				new ViewerFolderEntry("Inbox",					"Inv_SysOpen",			"Inv_SysClosed",		FALSE,     true)); -	addEntry(LLFolderType::FT_OUTBOX, 				new ViewerFolderEntry("Outbox",					"Inv_SysOpen",			"Inv_SysClosed",		FALSE,     true)); +	bool boxes_invisible = !gSavedSettings.getBOOL("InventoryOutboxMakeVisible"); +	addEntry(LLFolderType::FT_INBOX, 				new ViewerFolderEntry("Inbox",					"Inv_SysOpen",			"Inv_SysClosed",		FALSE,     boxes_invisible)); +	addEntry(LLFolderType::FT_OUTBOX, 				new ViewerFolderEntry("Merchant Outbox",		"Inv_SysOpen",			"Inv_SysClosed",		FALSE,     boxes_invisible));  	addEntry(LLFolderType::FT_BASIC_ROOT, 			new ViewerFolderEntry("Basic Root",				"Inv_SysOpen",			"Inv_SysClosed",		FALSE,     true)); diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 69b7fe5a75..0b090ec2bc 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -271,7 +271,7 @@ See the [[MARKETPLACE_IMPORTS_URL] error log] for more information.     icon="OutboxStatus_Error"     name="OutboxImportFailed"     type="outbox"> -Transfer failed +Transfer failed with error '[ERROR_CODE]'  No folders were sent to the Marketplace because of a system or network error.  Try again later. @@ -284,7 +284,7 @@ No folders were sent to the Marketplace because of a system or network error.  T     icon="OutboxStatus_Error"     name="OutboxInitFailed"     type="outbox"> -Marketplace initialization failed +Marketplace initialization failed with error '[ERROR_CODE]'  Initialization with the Marketplace failed because of a system or network error.  Try again later. diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 1c46cec479..1507538501 100755 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2199,6 +2199,16 @@ If you'd like to become a merchant, you'll need to [[MARKETPLACE_CREATE_STORE_UR  	<string name="InventoryOutboxNoItems">  Drag folders to this area and click "Send to Marketplace" to list them for sale on the [[MARKETPLACE_DASHBOARD_URL] Marketplace].  	</string> +	<string name="InventoryOutboxInitializingTitle">Initializing Marketplace.</string> +	<string name="InventoryOutboxInitializingTooltip"></string> +	<string name="InventoryOutboxInitializing"> +We are accessing your account on the [[MARKETPLACE_CREATE_STORE_URL] Marketplace store]. +	</string> +	<string name="InventoryOutboxErrorTitle">Marketplace Errors.</string> +	<string name="InventoryOutboxErrorTooltip"></string> +	<string name="InventoryOutboxError"> +The [[MARKETPLACE_CREATE_STORE_URL] Marketplace store] is returning errors. +	</string>  	<string name="Marketplace Error None">No errors</string>  	<string name="Marketplace Error Not Merchant">Error: Before sending items to the Marketplace you will need to set yourself up as a merchant (free of charge).</string> | 
