SH-1491 WIP - whole model upload for fee request

meow-7.2.2
Brad Payne (Vir Linden) 2011-05-09 11:23:15 -04:00
parent 9b0f5c815f
commit 369b34443d
2 changed files with 102 additions and 1 deletions

View File

@ -58,6 +58,8 @@
#include "llworld.h"
#include "material_codes.h"
#include "pipeline.h"
#include "llinventorymodel.h"
#include "llfoldertype.h"
#ifndef LL_WINDOWS
#include "netdb.h"
@ -478,6 +480,25 @@ public:
}
};
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)
{
@ -1341,8 +1362,81 @@ void LLMeshUploadThread::run()
}
}
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)
{
@ -1388,7 +1482,12 @@ void LLMeshUploadThread::doWholeModelUpload()
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;
}

View File

@ -424,6 +424,8 @@ public:
void doWholeModelUpload();
void doIterativeUpload();
LLSD wholeModelToLLSD(bool include_textures);
};
class LLMeshRepository