Commits

VirLinden  committed aec47f1

SH-1491 WIP - whole model upload for fee request

  • Participants
  • Parent commits cb5ceaf

Comments (0)

Files changed (2)

File indra/newview/llmeshrepository.cpp

 #include "llworld.h"
 #include "material_codes.h"
 #include "pipeline.h"
+#include "llinventorymodel.h"
+#include "llfoldertype.h"
 
 #ifndef LL_WINDOWS
 #include "netdb.h"
 	}
 };
 
+class LLWholeModelFeeResponder: public LLCurl::Responder
+{
+	LLMeshUploadThread* mThread;
+public:
+	LLWholeModelFeeResponder(LLMeshUploadThread* thread):
+		mThread(thread)
+	{
+	}
+	virtual void completedRaw(U32 status, const std::string& reason,
+							  const LLChannelDescriptors& channels,
+							  const LLIOPipe::buffer_ptr_t& buffer)
+	{
+		assert_main_thread();
+		llinfos << "completed" << llendl;
+		mThread->mPendingUploads--;
+	}
+	
+};
+
 LLMeshRepoThread::LLMeshRepoThread()
 : LLThread("mesh repo", NULL) 
 { 
 	}
 }
 
+LLSD LLMeshUploadThread::wholeModelToLLSD(bool include_textures)
+{
+	// TODO where do textures go?
+	
+	LLSD result;
+
+	result["folder_id"] = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT);
+	result["asset_type"] = "mesh";
+	result["inventory_type"] = "object";
+	result["name"] = "your name here";
+	result["description"] = "your description here";
+
+	LLSD res;
+	res["mesh_list"] = LLSD::emptyArray();
+	S32 mesh_num = 0;
+	
+	for (instance_map::iterator iter = mInstance.begin(); iter != mInstance.end(); ++iter)
+	{
+		LLMeshUploadData data;
+		data.mBaseModel = iter->first;
+
+		LLModelInstance& instance = *(iter->second.begin());
+
+		for (S32 i = 0; i < 5; i++)
+		{
+			data.mModel[i] = instance.mLOD[i];
+		}
+
+		std::stringstream ostr;
+
+		LLModel::Decomposition& decomp =
+			data.mModel[LLModel::LOD_PHYSICS].notNull() ? 
+			data.mModel[LLModel::LOD_PHYSICS]->mPhysics : 
+			data.mBaseModel->mPhysics;
+
+		decomp.mBaseHull = mHullMap[data.mBaseModel];
+
+		LLModel::writeModel(
+			ostr,  
+			data.mModel[LLModel::LOD_PHYSICS],
+			data.mModel[LLModel::LOD_HIGH],
+			data.mModel[LLModel::LOD_MEDIUM],
+			data.mModel[LLModel::LOD_LOW],
+			data.mModel[LLModel::LOD_IMPOSTOR], 
+			decomp,
+			mUploadSkin,
+			mUploadJoints);
+
+		data.mAssetData = ostr.str();
+
+		LLSD mesh_entry;
+
+		// TODO - correct coords based on instance.mTransform.
+		mesh_entry["coords"]["x"] = 1.0;
+		mesh_entry["coords"]["y"] = 1.0;
+		mesh_entry["coords"]["z"] = 1.0;
+		mesh_entry["coords"]["rot_x"] = 1.0;
+		mesh_entry["coords"]["rot_y"] = 1.0;
+		mesh_entry["coords"]["rot_z"] = 1.0;
+		mesh_entry["mesh_data"] = ostr.str();
+
+		res["mesh_list"][mesh_num] = mesh_entry;
+		
+		mesh_num++;
+	}
+
+	result["asset_resources"] = res;
+
+	return result;
+}
+
 void LLMeshUploadThread::doWholeModelUpload()
 {
+	mCurlRequest = new LLCurlRequest();	
+
 	// Queue up models for hull generation (viewer-side)
 	for (instance_map::iterator iter = mInstance.begin(); iter != mInstance.end(); ++iter)
 	{
 
 	bool do_include_textures = false; // not needed for initial cost/validation check.
 	LLSD model_data = wholeModelToLLSD(do_include_textures);
-	
+
+	mPendingUploads++;
+	LLCurlRequest::headers_t headers;
+	mCurlRequest->post(mWholeModelUploadCapability, headers, model_data.asString(),
+					   new LLWholeModelFeeResponder(this));
+
 	// Currently a no-op.
 	mFinished = true;
 }

File indra/newview/llmeshrepository.h

 
 	void doWholeModelUpload();
 	void doIterativeUpload();
+
+	LLSD wholeModelToLLSD(bool include_textures);
 };
 
 class LLMeshRepository