diff options
| -rw-r--r-- | indra/newview/llviewermenufile.cpp | 130 | 
1 files changed, 67 insertions, 63 deletions
diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 6bad8843fd..84b270f8cc 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -796,84 +796,88 @@ void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt  	//LLAssetType::EType pref_loc = data->mPreferredLocation;  	BOOL is_balance_sufficient = TRUE; -	if(result >= 0) +	if(data)  	{ -		LLFolderType::EType dest_loc = (data->mPreferredLocation == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(data->mAssetInfo.mType) : data->mPreferredLocation; - -		if (LLAssetType::AT_SOUND == data->mAssetInfo.mType || -			LLAssetType::AT_TEXTURE == data->mAssetInfo.mType || -			LLAssetType::AT_ANIMATION == data->mAssetInfo.mType) +		if (result >= 0)  		{ -			// Charge the user for the upload. -			LLViewerRegion* region = gAgent.getRegion(); - -			if(!(can_afford_transaction(expected_upload_cost))) -			{ -				LLFloaterBuyCurrency::buyCurrency( -					llformat(LLTrans::getString("UploadingCosts").c_str(), -							 data->mAssetInfo.getName().c_str()), -					         expected_upload_cost); -				is_balance_sufficient = FALSE; -			} -			else if(region) +			LLFolderType::EType dest_loc = (data->mPreferredLocation == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(data->mAssetInfo.mType) : data->mPreferredLocation; +			 +			if (LLAssetType::AT_SOUND == data->mAssetInfo.mType || +			    LLAssetType::AT_TEXTURE == data->mAssetInfo.mType || +			    LLAssetType::AT_ANIMATION == data->mAssetInfo.mType)  			{ -				// Charge user for upload -				gStatusBar->debitBalance(expected_upload_cost); +				// Charge the user for the upload. +				LLViewerRegion* region = gAgent.getRegion(); -				LLMessageSystem* msg = gMessageSystem; -				msg->newMessageFast(_PREHASH_MoneyTransferRequest); -				msg->nextBlockFast(_PREHASH_AgentData); -				msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); -				msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); -				msg->nextBlockFast(_PREHASH_MoneyData); -				msg->addUUIDFast(_PREHASH_SourceID, gAgent.getID()); -				msg->addUUIDFast(_PREHASH_DestID, LLUUID::null); -				msg->addU8("Flags", 0); -				// we tell the sim how much we were expecting to pay so it -				// can respond to any discrepancy -				msg->addS32Fast(_PREHASH_Amount, expected_upload_cost); -				msg->addU8Fast(_PREHASH_AggregatePermNextOwner, (U8)LLAggregatePermissions::AP_EMPTY); -				msg->addU8Fast(_PREHASH_AggregatePermInventory, (U8)LLAggregatePermissions::AP_EMPTY); -				msg->addS32Fast(_PREHASH_TransactionType, TRANS_UPLOAD_CHARGE); -				msg->addStringFast(_PREHASH_Description, NULL); -				msg->sendReliable(region->getHost()); +				if(!(can_afford_transaction(expected_upload_cost))) +				{ +					LLFloaterBuyCurrency::buyCurrency( +									  llformat(LLTrans::getString("UploadingCosts").c_str(), +										   data->mAssetInfo.getName().c_str()), +									  expected_upload_cost); +					is_balance_sufficient = FALSE; +				} +				else if(region) +				{ +					// Charge user for upload +					gStatusBar->debitBalance(expected_upload_cost); +					 +					LLMessageSystem* msg = gMessageSystem; +					msg->newMessageFast(_PREHASH_MoneyTransferRequest); +					msg->nextBlockFast(_PREHASH_AgentData); +					msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); +					msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); +					msg->nextBlockFast(_PREHASH_MoneyData); +					msg->addUUIDFast(_PREHASH_SourceID, gAgent.getID()); +					msg->addUUIDFast(_PREHASH_DestID, LLUUID::null); +					msg->addU8("Flags", 0); +					// we tell the sim how much we were expecting to pay so it +					// can respond to any discrepancy +					msg->addS32Fast(_PREHASH_Amount, expected_upload_cost); +					msg->addU8Fast(_PREHASH_AggregatePermNextOwner, (U8)LLAggregatePermissions::AP_EMPTY); +					msg->addU8Fast(_PREHASH_AggregatePermInventory, (U8)LLAggregatePermissions::AP_EMPTY); +					msg->addS32Fast(_PREHASH_TransactionType, TRANS_UPLOAD_CHARGE); +					msg->addStringFast(_PREHASH_Description, NULL); +					msg->sendReliable(region->getHost()); +				}  			} -		} -		if(is_balance_sufficient) -		{ -			// Actually add the upload to inventory -			llinfos << "Adding " << uuid << " to inventory." << llendl; -			const LLUUID folder_id = gInventory.findCategoryUUIDForType(dest_loc); -			if(folder_id.notNull()) +			if(is_balance_sufficient)  			{ -				U32 next_owner_perms = data->mNextOwnerPerm; -				if(PERM_NONE == next_owner_perms) +				// Actually add the upload to inventory +				llinfos << "Adding " << uuid << " to inventory." << llendl; +				const LLUUID folder_id = gInventory.findCategoryUUIDForType(dest_loc); +				if(folder_id.notNull())  				{ -					next_owner_perms = PERM_MOVE | PERM_TRANSFER; +					U32 next_owner_perms = data->mNextOwnerPerm; +					if(PERM_NONE == next_owner_perms) +					{ +						next_owner_perms = PERM_MOVE | PERM_TRANSFER; +					} +					create_inventory_item(gAgent.getID(), gAgent.getSessionID(), +							      folder_id, data->mAssetInfo.mTransactionID, data->mAssetInfo.getName(), +							      data->mAssetInfo.getDescription(), data->mAssetInfo.mType, +							      data->mInventoryType, NOT_WEARABLE, next_owner_perms, +							      LLPointer<LLInventoryCallback>(NULL)); +				} +				else +				{ +					llwarns << "Can't find a folder to put it in" << llendl;  				} -				create_inventory_item(gAgent.getID(), gAgent.getSessionID(), -					folder_id, data->mAssetInfo.mTransactionID, data->mAssetInfo.getName(), -					data->mAssetInfo.getDescription(), data->mAssetInfo.mType, -					data->mInventoryType, NOT_WEARABLE, next_owner_perms, -					LLPointer<LLInventoryCallback>(NULL)); -			} -			else -			{ -				llwarns << "Can't find a folder to put it in" << llendl;  			}  		} -	} -	else // 	if(result >= 0) -	{ -		LLSD args; -		args["FILE"] = LLInventoryType::lookupHumanReadable(data->mInventoryType); -		args["REASON"] = std::string(LLAssetStorage::getErrorString(result)); -		LLNotificationsUtil::add("CannotUploadReason", args); +		else // 	if(result >= 0) +		{ +			LLSD args; +			args["FILE"] = LLInventoryType::lookupHumanReadable(data->mInventoryType); +			args["REASON"] = std::string(LLAssetStorage::getErrorString(result)); +			LLNotificationsUtil::add("CannotUploadReason", args); +		}  	}  	LLUploadDialog::modalUploadFinished();  	delete data; +	data = NULL;  	// *NOTE: This is a pretty big hack. What this does is check the  	// file picker if there are any more pending uploads. If so,  | 
