From f8a7eda55bdd34eeb2fafed21d23d26cd25f924d Mon Sep 17 00:00:00 2001
From: Rider Linden <rider@lindenlab.com>
Date: Thu, 2 Jul 2015 09:17:48 -0700
Subject: [PATCH] Adjusting uploadinfo object for expansion. Commit is prelim
 to allow merge from selfless.

---
 indra/newview/llfloaterbvhpreview.cpp   |  28 +--
 indra/newview/llsnapshotlivepreview.cpp |   7 +-
 indra/newview/llviewerassetupload.cpp   | 147 +++++++++----
 indra/newview/llviewerassetupload.h     |   3 +-
 indra/newview/llviewermenufile.cpp      | 267 +++++++++---------------
 indra/newview/llviewermenufile.h        | 105 +++-------
 6 files changed, 249 insertions(+), 308 deletions(-)

diff --git a/indra/newview/llfloaterbvhpreview.cpp b/indra/newview/llfloaterbvhpreview.cpp
index edc1421588..39b5a40efc 100755
--- a/indra/newview/llfloaterbvhpreview.cpp
+++ b/indra/newview/llfloaterbvhpreview.cpp
@@ -993,29 +993,15 @@ void LLFloaterBvhPreview::onBtnOK(void* userdata)
 				std::string name = floaterp->getChild<LLUICtrl>("name_form")->getValue().asString();
 				std::string desc = floaterp->getChild<LLUICtrl>("description_form")->getValue().asString();
 				S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
-#if 1
-                NewResourceUploadInfo::ptr_t assetUpdloadInfo(new NewResourceUploadInfo(name, desc, 0,
+
+                NewResourceUploadInfo::ptr_t assetUpdloadInfo(new NewResourceUploadInfo(
+                    floaterp->mTransactionID, LLAssetType::AT_ANIMATION,
+                    name, desc, 0,
                     LLFolderType::FT_NONE, LLInventoryType::IT_ANIMATION,
                     LLFloaterPerms::getNextOwnerPerms("Uploads"), LLFloaterPerms::getGroupPerms("Uploads"), LLFloaterPerms::getEveryonePerms("Uploads"),
-                    name, expected_upload_cost));
-
-                upload_new_resource(floaterp->mTransactionID, LLAssetType::AT_ANIMATION, 
-                        assetUpdloadInfo);
-#else
-                LLAssetStorage::LLStoreAssetCallback callback = NULL;
-                void *userdata = NULL;
-
-                upload_new_resource(floaterp->mTransactionID, // tid
-						    LLAssetType::AT_ANIMATION,
-						    name,
-						    desc,
-						    0,
-						    LLFolderType::FT_NONE,
-						    LLInventoryType::IT_ANIMATION,
-						    LLFloaterPerms::getNextOwnerPerms("Uploads"), LLFloaterPerms::getGroupPerms("Uploads"), LLFloaterPerms::getEveryonePerms("Uploads"),
-						    name,
-						    callback, expected_upload_cost, userdata);
-#endif
+                    expected_upload_cost));
+
+                upload_new_resource(assetUpdloadInfo);
 			}
 			else
 			{
diff --git a/indra/newview/llsnapshotlivepreview.cpp b/indra/newview/llsnapshotlivepreview.cpp
index bbf560f3fa..bbb5db4a0a 100644
--- a/indra/newview/llsnapshotlivepreview.cpp
+++ b/indra/newview/llsnapshotlivepreview.cpp
@@ -1009,12 +1009,13 @@ void LLSnapshotLivePreview::saveTexture()
         std::string name = "Snapshot: " + pos_string;
         std::string desc = "Taken by " + who_took_it + " at " + pos_string;
 
-        NewResourceUploadInfo::ptr_t assetUploadInfo(new NewResourceUploadInfo(name, desc, 0,
+        NewResourceUploadInfo::ptr_t assetUploadInfo(new NewResourceUploadInfo(
+            tid, LLAssetType::AT_TEXTURE, name, desc, 0,
             LLFolderType::FT_SNAPSHOT_CATEGORY, LLInventoryType::IT_SNAPSHOT,
             PERM_ALL, LLFloaterPerms::getGroupPerms("Uploads"), LLFloaterPerms::getEveryonePerms("Uploads"),
-            name, expected_upload_cost));
+            expected_upload_cost));
 
-        upload_new_resource(tid, LLAssetType::AT_TEXTURE, assetUploadInfo);
+        upload_new_resource(assetUploadInfo);
 
 #else
         LLAssetStorage::LLStoreAssetCallback callback = NULL;
diff --git a/indra/newview/llviewerassetupload.cpp b/indra/newview/llviewerassetupload.cpp
index 3f21cf2b7e..e2394e20d5 100644
--- a/indra/newview/llviewerassetupload.cpp
+++ b/indra/newview/llviewerassetupload.cpp
@@ -35,7 +35,14 @@
 #include "lluuid.h"
 #include "llvorbisencode.h"
 #include "lluploaddialog.h"
+#include "llpreviewscript.h"
+#include "llnotificationsutil.h"
 #include "lleconomy.h"
+#include "llagent.h"
+#include "llfloaterreg.h"
+#include "llstatusbar.h"
+#include "llinventorypanel.h"
+#include "llsdutil.h"
 
 //=========================================================================
 /*static*/
@@ -44,35 +51,49 @@ void LLViewerAssetUpload::AssetInventoryUploadCoproc(LLCoros::self &self, LLCore
 {
     LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest);
 
-    uploadInfo->prepareUpload();
+    LLSD result = uploadInfo->prepareUpload();
     uploadInfo->logPreparedUpload();
 
+    if (result.has("error"))
+    {
+        HandleUploadError(LLCore::HttpStatus(499), result, uploadInfo);
+        return;
+    }
+
+    //self.yield();
+
     std::string uploadMessage = "Uploading...\n\n";
     uploadMessage.append(uploadInfo->getDisplayName());
     LLUploadDialog::modalUploadDialog(uploadMessage);
 
     LLSD body = uploadInfo->generatePostBody();
 
-    LLSD result = httpAdapter->postAndYield(self, httpRequest, url, body);
+    result = httpAdapter->postAndYield(self, httpRequest, url, body);
 
     LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS];
     LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults);
 
-    if (!status)
+    if ((!status) || (result.has("error")))
     {
-
+        HandleUploadError(status, result, uploadInfo);
+        LLUploadDialog::modalUploadFinished();
+        return;
     }
 
     std::string uploader = result["uploader"].asString();
 
     result = httpAdapter->postFileAndYield(self, httpRequest, uploader, uploadInfo->getAssetId(), uploadInfo->getAssetType());
+    httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS];
+    status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults);
 
     if (!status)
     {
-
+        HandleUploadError(status, result, uploadInfo);
+        LLUploadDialog::modalUploadFinished();
+        return;
     }
 
-    S32 expected_upload_cost = 0;
+    S32 uploadPrice = 0;
 
     // Update L$ and ownership credit information
     // since it probably changed on the server
@@ -81,58 +102,104 @@ void LLViewerAssetUpload::AssetInventoryUploadCoproc(LLCoros::self &self, LLCore
         uploadInfo->getAssetType() == LLAssetType::AT_ANIMATION ||
         uploadInfo->getAssetType() == LLAssetType::AT_MESH)
     {
-        expected_upload_cost = 
-            LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
+        uploadPrice = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
     }
 
-    on_new_single_inventory_upload_complete(
-        uploadInfo->getAssetType(),
-        uploadInfo->getInventoryType(),
-        uploadInfo->getAssetTypeString(), // note the paramert calls for inv_type string...
-        uploadInfo->getFolderId(),
-        uploadInfo->getName(),
-        uploadInfo->getDescription(),
-        result,
-        expected_upload_cost);
-
-#if 0
-
-    LLSD initalBody = generate_new_resource_upload_capability_body();
-
+    bool success = false;
 
+    if (uploadPrice > 0)
+    {
+        // this upload costed us L$, update our balance
+        // and display something saying that it cost L$
+        LLStatusBar::sendMoneyBalanceRequest();
 
-    LLSD result = httpAdapter->postAndYield(self, httpRequest, url, initalBody);
+        LLSD args;
+        args["AMOUNT"] = llformat("%d", uploadPrice);
+        LLNotificationsUtil::add("UploadPayment", args);
+    }
 
-    LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS];
-    LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults);
+    LLUUID serverInventoryItem = uploadInfo->finishUpload(result);
 
-    if (!status)
+    if (serverInventoryItem.notNull())
     {
-
+        success = true;
+
+        // Show the preview panel for textures and sounds to let
+        // user know that the image (or snapshot) arrived intact.
+        LLInventoryPanel* panel = LLInventoryPanel::getActiveInventoryPanel();
+        if (panel)
+        {
+            LLFocusableElement* focus = gFocusMgr.getKeyboardFocus();
+            panel->setSelection(serverInventoryItem, TAKE_FOCUS_NO);
+
+            // restore keyboard focus
+            gFocusMgr.setKeyboardFocus(focus);
+        }
+    }
+    else
+    {
+        LL_WARNS() << "Can't find a folder to put it in" << LL_ENDL;
     }
 
-    std::string state = result["state"].asString();
+    // remove the "Uploading..." message
+    LLUploadDialog::modalUploadFinished();
 
-    if (state == "upload")
+    // Let the Snapshot floater know we have finished uploading a snapshot to inventory.
+    LLFloater* floater_snapshot = LLFloaterReg::findInstance("snapshot");
+    if (uploadInfo->getAssetType() == LLAssetType::AT_TEXTURE && floater_snapshot)
     {
-//        Upload the file...
-        result = httpAdapter->postFileAndYield(self, httpRequest, url, initalBody);
+        floater_snapshot->notify(LLSD().with("set-finished", LLSD().with("ok", success).with("msg", "inventory")));
+    }
+}
 
-        httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS];
-        status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults);
+//=========================================================================
+/*static*/
+void LLViewerAssetUpload::HandleUploadError(LLCore::HttpStatus status, LLSD &result, NewResourceUploadInfo::ptr_t &uploadInfo)
+{
+    std::string reason;
+    std::string label("CannotUploadReason");
 
-        state = result["state"].asString();
+    LL_WARNS() << ll_pretty_print_sd(result) << LL_ENDL;
+
+    if (result.has("label"))
+    {
+        label = result["label"];
     }
 
-    if (state == "complete")
+    if (result.has("message"))
     {
-        // done with the upload.
+        reason = result["message"];
     }
     else
     {
-        // an error occurred
+        if (status.getType() == 499)
+        {
+            reason = "The server is experiencing unexpected difficulties.";
+        }
+        else
+        {
+            reason = "Error in upload request.  Please visit "
+                "http://secondlife.com/support for help fixing this problem.";
+        }
     }
-#endif
-}
 
-//=========================================================================
+    LLSD args;
+    args["FILE"] = uploadInfo->getDisplayName();
+    args["REASON"] = reason;
+
+    LLNotificationsUtil::add(label, args);
+
+    // unfreeze script preview
+    if (uploadInfo->getAssetType() == LLAssetType::AT_LSL_TEXT)
+    {
+        LLPreviewLSL* preview = LLFloaterReg::findTypedInstance<LLPreviewLSL>("preview_script", 
+            uploadInfo->getItemId());
+        if (preview)
+        {
+            LLSD errors;
+            errors.append(LLTrans::getString("UploadFailed") + reason);
+            preview->callbackLSLCompileFailed(errors);
+        }
+    }
+
+}
diff --git a/indra/newview/llviewerassetupload.h b/indra/newview/llviewerassetupload.h
index c80a7617e1..ad48be67a6 100644
--- a/indra/newview/llviewerassetupload.h
+++ b/indra/newview/llviewerassetupload.h
@@ -44,7 +44,8 @@ public:
     static void AssetInventoryUploadCoproc(LLCoros::self &self, LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t &httpAdapter, const LLUUID &id,
         std::string url, NewResourceUploadInfo::ptr_t uploadInfo);
 
-
+private:
+    static void HandleUploadError(LLCore::HttpStatus status, LLSD &result, NewResourceUploadInfo::ptr_t &uploadInfo);
 };
 
 #endif // !VIEWER_ASSET_UPLOAD_H
diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp
index 7bcf241d5e..4772dd144b 100755
--- a/indra/newview/llviewermenufile.cpp
+++ b/indra/newview/llviewermenufile.cpp
@@ -85,8 +85,9 @@ class LLFileEnableUpload : public view_listener_t
 {
 	bool handleEvent(const LLSD& userdata)
 	{
-		bool new_value = gStatusBar && LLGlobalEconomy::Singleton::getInstance() && (gStatusBar->getBalance() >= LLGlobalEconomy::Singleton::getInstance()->getPriceUpload());
-		return new_value;
+        return true;
+// 		bool new_value = gStatusBar && LLGlobalEconomy::Singleton::getInstance() && (gStatusBar->getBalance() >= LLGlobalEconomy::Singleton::getInstance()->getPriceUpload());
+// 		return new_value;
 	}
 };
 
@@ -757,38 +758,15 @@ LLUUID upload_new_resource(
 
 	if (!error)
 	{
-		std::string t_disp_name = display_name;
-		if (t_disp_name.empty())
-		{
-			t_disp_name = src_filename;
-		}
-
-#if 1
         NewResourceUploadInfo::ptr_t uploadInfo(new NewResourceUploadInfo(
+            tid, asset_type,
             name, desc, compression_info,
             destination_folder_type, inv_type,
             next_owner_perms, group_perms, everyone_perms,
-            display_name, expected_upload_cost));
+            expected_upload_cost));
 
-        upload_new_resource(tid, asset_type, uploadInfo, 
+        upload_new_resource(uploadInfo, 
                 callback, userdata);
-#else
-		upload_new_resource(
-			tid,
-			asset_type,
-			name,
-			desc,
-			compression_info, // tid
-			destination_folder_type,
-			inv_type,
-			next_owner_perms,
-			group_perms,
-			everyone_perms,
-			display_name,
-			callback,
-			expected_upload_cost,
-			userdata);
-#endif
 	}
 	else
 	{
@@ -933,63 +911,7 @@ void upload_done_callback(
 	}
 }
 
-#if 0
-static LLAssetID upload_new_resource_prep(
-	const LLTransactionID& tid,
-	LLAssetType::EType asset_type,
-	LLInventoryType::EType& inventory_type,
-	std::string& name,
-	const std::string& display_name,
-	std::string& description)
-{
-	LLAssetID uuid = generate_asset_id_for_new_upload(tid);
-
-	increase_new_upload_stats(asset_type);
-
-	assign_defaults_and_show_upload_message(
-		asset_type,
-		inventory_type,
-		name,
-		display_name,
-		description);
-
-	return uuid;
-}
-#endif
-
-#if 0
-LLSD generate_new_resource_upload_capability_body(
-	LLAssetType::EType asset_type,
-	const std::string& name,
-	const std::string& desc,
-	LLFolderType::EType destination_folder_type,
-	LLInventoryType::EType inv_type,
-	U32 next_owner_perms,
-	U32 group_perms,
-	U32 everyone_perms)
-{
-	LLSD body;
-
-	body["folder_id"] = gInventory.findCategoryUUIDForType(
-		(destination_folder_type == LLFolderType::FT_NONE) ?
-		(LLFolderType::EType) asset_type :
-		destination_folder_type);
-
-	body["asset_type"] = LLAssetType::lookup(asset_type);
-	body["inventory_type"] = LLInventoryType::lookup(inv_type);
-	body["name"] = name;
-	body["description"] = desc;
-	body["next_owner_mask"] = LLSD::Integer(next_owner_perms);
-	body["group_mask"] = LLSD::Integer(group_perms);
-	body["everyone_mask"] = LLSD::Integer(everyone_perms);
-
-	return body;
-}
-#endif
-
 void upload_new_resource(
-    const LLTransactionID &tid,
-    LLAssetType::EType assetType,
     NewResourceUploadInfo::ptr_t &uploadInfo,
     LLAssetStorage::LLStoreAssetCallback callback,
     void *userdata)
@@ -999,8 +921,8 @@ void upload_new_resource(
 		return ;
 	}
 
-    uploadInfo->setAssetType(assetType);
-    uploadInfo->setTransactionId(tid);
+//     uploadInfo->setAssetType(assetType);
+//     uploadInfo->setTransactionId(tid);
 
 
 	std::string url = gAgent.getRegion()->getCapability("NewFileAgentInventory");
@@ -1010,19 +932,6 @@ void upload_new_resource(
         LLCoprocedureManager::CoProcedure_t proc = boost::bind(&LLViewerAssetUpload::AssetInventoryUploadCoproc, _1, _2, _3, url, uploadInfo);
 
         LLCoprocedureManager::getInstance()->enqueueCoprocedure("LLViewerAssetUpload::AssetInventoryUploadCoproc", proc);
-//		LL_INFOS() << "New Agent Inventory via capability" << LL_ENDL;
-//         uploadInfo->prepareUpload();
-//         uploadInfo->logPreparedUpload();
-// 
-//         LLSD body = uploadInfo->generatePostBody();
-// 
-// 		LLHTTPClient::post(
-// 			url,
-// 			body,
-// 			new LLNewAgentInventoryResponder(
-// 				body,
-// 				uploadInfo->getAssetId(),
-// 				assetType));
 	}
 	else
 	{
@@ -1032,9 +941,9 @@ void upload_new_resource(
 		LL_INFOS() << "NewAgentInventory capability not found, new agent inventory via asset system." << LL_ENDL;
 		// check for adequate funds
 		// TODO: do this check on the sim
-		if (LLAssetType::AT_SOUND == assetType ||
-			LLAssetType::AT_TEXTURE == assetType ||
-			LLAssetType::AT_ANIMATION == assetType)
+		if (LLAssetType::AT_SOUND == uploadInfo->getAssetType() ||
+            LLAssetType::AT_TEXTURE == uploadInfo->getAssetType() ||
+            LLAssetType::AT_ANIMATION == uploadInfo->getAssetType())
 		{
 			S32 balance = gStatusBar->getBalance();
 			if (balance < uploadInfo->getExpectedUploadCost())
@@ -1049,9 +958,9 @@ void upload_new_resource(
 		}
 
 		LLResourceData* data = new LLResourceData;
-		data->mAssetInfo.mTransactionID = tid;
+		data->mAssetInfo.mTransactionID = uploadInfo->getTransactionId();
 		data->mAssetInfo.mUuid = uploadInfo->getAssetId();
-		data->mAssetInfo.mType = assetType;
+        data->mAssetInfo.mType = uploadInfo->getAssetType();
 		data->mAssetInfo.mCreatorID = gAgentID;
 		data->mInventoryType = uploadInfo->getInventoryType();
 		data->mNextOwnerPerm = uploadInfo->getNextOwnerPerms();
@@ -1075,68 +984,6 @@ void upload_new_resource(
 	}
 }
 
-#if 0
-LLAssetID generate_asset_id_for_new_upload(const LLTransactionID& tid)
-{
-	if ( gDisconnected )
-	{	
-		LLAssetID rv;
-
-		rv.setNull();
-		return rv;
-	}
-
-	LLAssetID uuid = tid.makeAssetID(gAgent.getSecureSessionID());
-
-	return uuid;
-}
-
-void increase_new_upload_stats(LLAssetType::EType asset_type)
-{
-	if ( LLAssetType::AT_SOUND == asset_type )
-	{
-		add(LLStatViewer::UPLOAD_SOUND, 1);
-	}
-	else if ( LLAssetType::AT_TEXTURE == asset_type )
-	{
-		add(LLStatViewer::UPLOAD_TEXTURE, 1);
-	}
-	else if ( LLAssetType::AT_ANIMATION == asset_type )
-	{
-		add(LLStatViewer::ANIMATION_UPLOADS, 1);
-	}
-}
-
-void assign_defaults_and_show_upload_message(
-	LLAssetType::EType asset_type,
-	LLInventoryType::EType& inventory_type,
-	std::string& name,
-	const std::string& display_name,
-	std::string& description)
-{
-	if ( LLInventoryType::IT_NONE == inventory_type )
-	{
-		inventory_type = LLInventoryType::defaultForAssetType(asset_type);
-	}
-	LLStringUtil::stripNonprintable(name);
-	LLStringUtil::stripNonprintable(description);
-
-	if ( name.empty() )
-	{
-		name = "(No Name)";
-	}
-	if ( description.empty() )
-	{
-		description = "(No Description)";
-	}
-
-	// At this point, we're ready for the upload.
-	std::string upload_message = "Uploading...\n\n";
-	upload_message.append(display_name);
-	LLUploadDialog::modalUploadDialog(upload_message);
-}
-#endif
-
 
 void init_menu_file()
 {
@@ -1160,14 +1007,14 @@ void init_menu_file()
 	// "File.SaveTexture" moved to llpanelmaininventory so that it can be properly handled.
 }
 
-LLAssetID NewResourceUploadInfo::prepareUpload()
+LLSD NewResourceUploadInfo::prepareUpload()
 {
-    LLAssetID uuid = generateNewAssetId();
+    generateNewAssetId();
 
     incrementUploadStats();
     assignDefaults();
 
-    return uuid;
+    return LLSD().with("success", LLSD::Boolean(true));
 }
 
 std::string NewResourceUploadInfo::getAssetTypeString() const
@@ -1209,6 +1056,84 @@ void NewResourceUploadInfo::logPreparedUpload()
         "Asset Type: " << LLAssetType::lookup(mAssetType) << LL_ENDL;
 }
 
+LLUUID NewResourceUploadInfo::finishUpload(LLSD &result)
+{
+    if (getFolderId().isNull())
+    {
+        return LLUUID::null;
+    }
+
+    U32 permsEveryone = PERM_NONE;
+    U32 permsGroup = PERM_NONE;
+    U32 permsNextOwner = PERM_ALL;
+
+    if (result.has("new_next_owner_mask"))
+    {
+        // The server provided creation perms so use them.
+        // Do not assume we got the perms we asked for in
+        // since the server may not have granted them all.
+        permsEveryone = result["new_everyone_mask"].asInteger();
+        permsGroup = result["new_group_mask"].asInteger();
+        permsNextOwner = result["new_next_owner_mask"].asInteger();
+    }
+    else
+    {
+        // The server doesn't provide creation perms
+        // so use old assumption-based perms.
+        if (getAssetTypeString() != "snapshot")
+        {
+            permsNextOwner = PERM_MOVE | PERM_TRANSFER;
+        }
+    }
+
+    LLPermissions new_perms;
+    new_perms.init(
+        gAgent.getID(),
+        gAgent.getID(),
+        LLUUID::null,
+        LLUUID::null);
+
+    new_perms.initMasks(
+        PERM_ALL,
+        PERM_ALL,
+        permsEveryone,
+        permsGroup,
+        permsNextOwner);
+
+    U32 flagsInventoryItem = 0;
+    if (result.has("inventory_flags"))
+    {
+        flagsInventoryItem = static_cast<U32>(result["inventory_flags"].asInteger());
+        if (flagsInventoryItem != 0)
+        {
+            LL_INFOS() << "inventory_item_flags " << flagsInventoryItem << LL_ENDL;
+        }
+    }
+    S32 creationDate = time_corrected();
+
+    LLUUID serverInventoryItem = result["new_inventory_item"].asUUID();
+    LLUUID serverAssetId = result["new_asset"].asUUID();
+
+    LLPointer<LLViewerInventoryItem> item = new LLViewerInventoryItem(
+        serverInventoryItem,
+        getFolderId(),
+        new_perms,
+        serverAssetId,
+        getAssetType(),
+        getInventoryType(),
+        getName(),
+        getDescription(),
+        LLSaleInfo::DEFAULT,
+        flagsInventoryItem,
+        creationDate);
+
+    gInventory.updateItem(item);
+    gInventory.notifyObservers();
+
+    return serverInventoryItem;
+}
+
+
 LLAssetID NewResourceUploadInfo::generateNewAssetId()
 {
     if (gDisconnected)
@@ -1263,3 +1188,7 @@ void NewResourceUploadInfo::assignDefaults()
 
 }
 
+std::string NewResourceUploadInfo::getDisplayName() const
+{ 
+    return (mName.empty()) ? mAssetId.asString() : mName; 
+};
diff --git a/indra/newview/llviewermenufile.h b/indra/newview/llviewermenufile.h
index 297895cbf0..9bc4d5b041 100755
--- a/indra/newview/llviewermenufile.h
+++ b/indra/newview/llviewermenufile.h
@@ -39,13 +39,15 @@ class LLTransactionID;
 
 void init_menu_file();
 
-#if 1
 class NewResourceUploadInfo
 {
 public:
     typedef boost::shared_ptr<NewResourceUploadInfo> ptr_t;
 
-    NewResourceUploadInfo(std::string name, 
+    NewResourceUploadInfo(
+        LLTransactionID transactId,
+        LLAssetType::EType assetType,
+        std::string name, 
         std::string description, 
         S32 compressionInfo,
         LLFolderType::EType destinationType,
@@ -53,48 +55,53 @@ public:
         U32 nextOWnerPerms, 
         U32 groupPerms, 
         U32 everyonePerms, 
-        std::string displayName,
         S32 expectedCost) :
+            mTransactionId(transactId),
+            mAssetType(assetType),
             mName(name),
             mDescription(description),
-            mDisplayName(displayName),
             mCompressionInfo(compressionInfo),
+            mDestinationFolderType(destinationType),
+            mInventoryType(inventoryType),
             mNextOwnerPerms(nextOWnerPerms),
             mGroupPerms(groupPerms),
             mEveryonePerms(everyonePerms),
             mExpectedUploadCost(expectedCost),
-            mInventoryType(inventoryType),
-            mDestinationFolderType(destinationType)
+            mFolderId(LLUUID::null),
+            mItemId(LLUUID::null),
+            mAssetId(LLAssetID::null)
     { }
 
     virtual ~NewResourceUploadInfo()
     { }
 
-    virtual LLAssetID   prepareUpload();
+    virtual LLSD        prepareUpload();
     virtual LLSD        generatePostBody();
     virtual void        logPreparedUpload();
+    virtual LLUUID      finishUpload(LLSD &result);
+
+    //void                setAssetType(LLAssetType::EType assetType) { mAssetType = assetType; }
+    //void                setTransactionId(LLTransactionID transactionId) { mTransactionId = transactionId; }
 
-    void                setAssetType(LLAssetType::EType assetType) { mAssetType = assetType; }
+    LLTransactionID     getTransactionId() const { return mTransactionId; }
     LLAssetType::EType  getAssetType() const { return mAssetType; }
     std::string         getAssetTypeString() const;
-    void                setTransactionId(LLTransactionID transactionId) { mTransactionId = transactionId; }
-    LLTransactionID     getTransactionId() const { return mTransactionId; }
-    LLUUID              getFolderId() const { return mFolderId; }
-
-    LLAssetID           getAssetId() const { return mAssetId; }
-
     std::string         getName() const { return mName; };
     std::string         getDescription() const { return mDescription; };
-    std::string         getDisplayName() const { return mDisplayName; };
     S32                 getCompressionInfo() const { return mCompressionInfo; };
+    LLFolderType::EType getDestinationFolderType() const { return mDestinationFolderType; };
+    LLInventoryType::EType  getInventoryType() const { return mInventoryType; };
+    std::string         getInventoryTypeString() const;
     U32                 getNextOwnerPerms() const { return mNextOwnerPerms; };
     U32                 getGroupPerms() const { return mGroupPerms; };
     U32                 getEveryonePerms() const { return mEveryonePerms; };
     S32                 getExpectedUploadCost() const { return mExpectedUploadCost; };
-    LLInventoryType::EType  getInventoryType() const { return mInventoryType; };
-    std::string         getInventoryTypeString() const;
-        
-    LLFolderType::EType     getDestinationFolderType() const { return mDestinationFolderType; };
+
+    std::string         getDisplayName() const;
+
+    LLUUID              getFolderId() const { return mFolderId; }
+    LLUUID              getItemId() const { return mItemId; }
+    LLAssetID           getAssetId() const { return mAssetId; }
 
 protected:
     LLAssetID           generateNewAssetId();
@@ -102,22 +109,21 @@ protected:
     virtual void        assignDefaults();
 
 private:
+    LLTransactionID     mTransactionId;
     LLAssetType::EType  mAssetType;
     std::string         mName;
     std::string         mDescription;
-    std::string         mDisplayName;
     S32                 mCompressionInfo;
+    LLFolderType::EType mDestinationFolderType;
+    LLInventoryType::EType mInventoryType;
     U32                 mNextOwnerPerms;
     U32                 mGroupPerms;
     U32                 mEveryonePerms;
     S32                 mExpectedUploadCost;
-    LLUUID              mFolderId;
-
-    LLInventoryType::EType mInventoryType;
-    LLFolderType::EType    mDestinationFolderType;
 
+    LLUUID              mFolderId;
+    LLUUID              mItemId;
     LLAssetID           mAssetId;
-    LLTransactionID     mTransactionId;
 };
 
 
@@ -137,48 +143,11 @@ LLUUID upload_new_resource(
     void *userdata);
 
 void upload_new_resource(
-    const LLTransactionID &tid, 
-    LLAssetType::EType type,
     NewResourceUploadInfo::ptr_t &uploadInfo,
     LLAssetStorage::LLStoreAssetCallback callback = NULL,
     void *userdata = NULL);
 
 
-#else
-LLUUID upload_new_resource(
-    const std::string& src_filename, 
-    std::string name,
-    std::string desc, 
-    S32 compression_info,
-    LLFolderType::EType destination_folder_type,
-    LLInventoryType::EType inv_type,
-    U32 next_owner_perms,
-    U32 group_perms,
-    U32 everyone_perms,
-    const std::string& display_name,
-    LLAssetStorage::LLStoreAssetCallback callback,
-    S32 expected_upload_cost,
-    void *userdata);
-
-void upload_new_resource(
-	const LLTransactionID &tid, 
-	LLAssetType::EType type,
-	std::string name,
-	std::string desc, 
-	S32 compression_info,
-	LLFolderType::EType destination_folder_type,
-	LLInventoryType::EType inv_type,
-	U32 next_owner_perms,
-	U32 group_perms,
-	U32 everyone_perms,
-	const std::string& display_name,
-	LLAssetStorage::LLStoreAssetCallback callback,
-	S32 expected_upload_cost,
-	void *userdata);
-
-LLAssetID generate_asset_id_for_new_upload(const LLTransactionID& tid);
-void increase_new_upload_stats(LLAssetType::EType asset_type);
-#endif
 void assign_defaults_and_show_upload_message(
 	LLAssetType::EType asset_type,
 	LLInventoryType::EType& inventory_type,
@@ -186,18 +155,6 @@ void assign_defaults_and_show_upload_message(
 	const std::string& display_name,
 	std::string& description);
 
-#if 0
-LLSD generate_new_resource_upload_capability_body(
-	LLAssetType::EType asset_type,
-	const std::string& name,
-	const std::string& desc,
-	LLFolderType::EType destination_folder_type,
-	LLInventoryType::EType inv_type,
-	U32 next_owner_perms,
-	U32 group_perms,
-	U32 everyone_perms);
-#endif
-
 void on_new_single_inventory_upload_complete(
 	LLAssetType::EType asset_type,
 	LLInventoryType::EType inventory_type,
-- 
GitLab