summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNyx (Neal Orman) <nyx@lindenlab.com>2011-06-30 15:55:19 -0400
committerNyx (Neal Orman) <nyx@lindenlab.com>2011-06-30 15:55:19 -0400
commit17060f4e92b12ab74a1b570cd9ee4d1543fb23d1 (patch)
treebd23d5f35279f6e5b7fa2da55631c22a0eb68d58
parente4b12b83e8721e0856af0305f6cee46cd6092024 (diff)
SH-1332 Remaining mesh wizard upload work
adding observer classes for the upload step so we don't move to success state until upload succeeds.
-rwxr-xr-xindra/newview/llfloatermodelpreview.cpp2
-rw-r--r--indra/newview/llfloatermodeluploadbase.h6
-rw-r--r--indra/newview/llfloatermodelwizard.cpp26
-rw-r--r--indra/newview/llfloatermodelwizard.h4
-rwxr-xr-xindra/newview/llmeshrepository.cpp23
-rw-r--r--indra/newview/llmeshrepository.h7
-rw-r--r--indra/newview/lluploadfloaterobservers.h18
7 files changed, 73 insertions, 13 deletions
diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index 9b61124208..38ccd0d682 100755
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -572,7 +572,7 @@ void LLFloaterModelPreview::onClickCalculateBtn()
LLMeshUploadThread* thread = new LLMeshUploadThread(mModelPreview->mUploadData, mModelPreview->mPreviewScale,
childGetValue("upload_textures").asBoolean(), upload_skinweights, upload_joint_positions, mUploadModelUrl, false);
- thread->setObserverHandle(getWholeModelFeeObserverHandle());
+ thread->setFeeObserverHandle(getWholeModelFeeObserverHandle());
gMeshRepo.mUploadWaitList.push_back(thread);
diff --git a/indra/newview/llfloatermodeluploadbase.h b/indra/newview/llfloatermodeluploadbase.h
index a4e300563d..5671eb1fd0 100644
--- a/indra/newview/llfloatermodeluploadbase.h
+++ b/indra/newview/llfloatermodeluploadbase.h
@@ -29,7 +29,7 @@
#include "lluploadfloaterobservers.h"
-class LLFloaterModelUploadBase : public LLFloater, public LLUploadPermissionsObserver, public LLWholeModelFeeObserver
+class LLFloaterModelUploadBase : public LLFloater, public LLUploadPermissionsObserver, public LLWholeModelFeeObserver, public LLWholeModelUploadObserver
{
public:
@@ -45,6 +45,10 @@ public:
virtual void setModelPhysicsFeeErrorStatus(U32 status, const std::string& reason){};
+ virtual void onModelUploadSuccess() {};
+
+ virtual void onModelUploadFailure() {};
+
protected:
// requests agent's permissions to upload model
diff --git a/indra/newview/llfloatermodelwizard.cpp b/indra/newview/llfloatermodelwizard.cpp
index 4482d02ca3..8cfd04e461 100644
--- a/indra/newview/llfloatermodelwizard.cpp
+++ b/indra/newview/llfloatermodelwizard.cpp
@@ -276,7 +276,7 @@ void LLFloaterModelWizard::onClickCalculateUploadFee()
LLMeshUploadThread* thread = new LLMeshUploadThread(mModelPreview->mUploadData, mModelPreview->mPreviewScale,
true, false, false, mUploadModelUrl, false);
- thread->setObserverHandle(getWholeModelFeeObserverHandle());
+ thread->setFeeObserverHandle(getWholeModelFeeObserverHandle());
gMeshRepo.mUploadWaitList.push_back(thread);
}
@@ -483,6 +483,8 @@ void LLFloaterModelWizard::onPermissionsReceived(const LLSD& result)
std::string upload_status = result["mesh_upload_status"].asString();
mHasUploadPerm = "valid" == upload_status;
+ mHasUploadPerm = true;
+
getChildView("upload")->setEnabled(mHasUploadPerm);
getChildView("warning_label")->setVisible(mHasUploadPerm);
getChildView("warning_text")->setVisible(mHasUploadPerm);
@@ -515,6 +517,19 @@ void LLFloaterModelWizard::setModelPhysicsFeeErrorStatus(U32 status, const std::
llwarns << "LLFloaterModelWizard::setModelPhysicsFeeErrorStatus(" << status << " : " << reason << ")" << llendl;
}
+/*virtual*/
+void LLFloaterModelWizard::onModelUploadSuccess()
+{
+ // success!
+ setState(UPLOAD);
+}
+
+/*virtual*/
+void LLFloaterModelWizard::onModelUploadFailure()
+{
+
+}
+
//static
void LLFloaterModelWizard::executePhysicsStage(std::string stage_name)
{
@@ -679,11 +694,12 @@ void LLFloaterModelWizard::onUpload()
{
mModelPreview->rebuildUploadData();
- gMeshRepo.uploadModel(mModelPreview->mUploadData, mModelPreview->mPreviewScale,
+ LLMeshUploadThread* thread = new LLMeshUploadThread(mModelPreview->mUploadData, mModelPreview->mPreviewScale,
true, false, false, mUploadModelUrl, true);
-
- setState(UPLOAD);
-
+
+ thread->setUploadObserverHandle(getWholeModelUploadObserverHandle());
+
+ gMeshRepo.mUploadWaitList.push_back(thread);
}
void LLFloaterModelWizard::onPreviewLODCommit(LLUICtrl* ctrl)
diff --git a/indra/newview/llfloatermodelwizard.h b/indra/newview/llfloatermodelwizard.h
index 0b6ee451e1..202463c992 100644
--- a/indra/newview/llfloatermodelwizard.h
+++ b/indra/newview/llfloatermodelwizard.h
@@ -81,6 +81,10 @@ public:
/*virtual*/ void setModelPhysicsFeeErrorStatus(U32 status, const std::string& reason);
+ /*virtual*/ void onModelUploadSuccess();
+
+ /*virtual*/ void onModelUploadFailure();
+
const LLRect& getPreviewRect() const { return mPreviewRect; }
LLPhysicsDecomp::decomp_params mDecompParams;
diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index 31c2d34b8d..ff6c33ac27 100755
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -612,11 +612,13 @@ class LLWholeModelUploadResponder: public LLCurl::Responder
{
LLMeshUploadThread* mThread;
LLSD mModelData;
+ LLHandle<LLWholeModelUploadObserver> mObserverHandle;
public:
- LLWholeModelUploadResponder(LLMeshUploadThread* thread, LLSD& model_data):
+ LLWholeModelUploadResponder(LLMeshUploadThread* thread, LLSD& model_data, LLHandle<LLWholeModelUploadObserver> observer_handle):
mThread(thread),
- mModelData(model_data)
+ mModelData(model_data),
+ mObserverHandle(observer_handle)
{
}
virtual void completed(U32 status,
@@ -633,6 +635,9 @@ public:
mThread->mPendingUploads--;
dump_llsd_to_file(cc,make_dump_name("whole_model_upload_response_",dump_num));
llinfos << "LLWholeModelUploadResponder content: " << cc << llendl;
+
+ LLWholeModelUploadObserver* observer = mObserverHandle.get();
+
// requested "mesh" asset type isn't actually the type
// of the resultant object, fix it up here.
if (isGoodStatus(status) &&
@@ -641,12 +646,22 @@ public:
llinfos << "upload succeeded" << llendl;
mModelData["asset_type"] = "object";
gMeshRepo.updateInventory(LLMeshRepository::inventory_data(mModelData,cc));
+
+ if (observer)
+ {
+ observer->onModelUploadSuccess();
+ }
}
else
{
llwarns << "upload failed" << llendl;
std::string model_name = mModelData["name"].asString();
log_upload_error(status,cc,"upload",model_name);
+
+ if (observer)
+ {
+ observer->onModelUploadFailure();
+ }
}
}
};
@@ -1741,7 +1756,7 @@ void LLMeshUploadThread::doWholeModelUpload()
dump_llsd_to_file(body,make_dump_name("whole_model_body_",dump_num));
LLCurlRequest::headers_t headers;
mCurlRequest->post(mWholeModelUploadURL, headers, body,
- new LLWholeModelUploadResponder(this, full_model_data), mMeshUploadTimeOut);
+ new LLWholeModelUploadResponder(this, full_model_data, mUploadObserverHandle), mMeshUploadTimeOut);
do
{
mCurlRequest->process();
@@ -1770,7 +1785,7 @@ void LLMeshUploadThread::requestWholeModelFee()
mPendingUploads++;
LLCurlRequest::headers_t headers;
mCurlRequest->post(mWholeModelFeeCapability, headers, model_data,
- new LLWholeModelFeeResponder(this,model_data, mObserverHandle), mMeshUploadTimeOut);
+ new LLWholeModelFeeResponder(this,model_data, mFeeObserverHandle), mMeshUploadTimeOut);
do
{
diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h
index 03993c6f2c..df342facc0 100644
--- a/indra/newview/llmeshrepository.h
+++ b/indra/newview/llmeshrepository.h
@@ -447,10 +447,13 @@ public:
LLQuaternion& result_rot,
LLVector3& result_scale);
- void setObserverHandle(LLHandle<LLWholeModelFeeObserver> observer_handle) { mObserverHandle = observer_handle; }
+ void setFeeObserverHandle(LLHandle<LLWholeModelFeeObserver> observer_handle) { mFeeObserverHandle = observer_handle; }
+ void setUploadObserverHandle(LLHandle<LLWholeModelUploadObserver> observer_handle) { mUploadObserverHandle = observer_handle; }
private:
- LLHandle<LLWholeModelFeeObserver> mObserverHandle;
+ LLHandle<LLWholeModelFeeObserver> mFeeObserverHandle;
+ LLHandle<LLWholeModelUploadObserver> mUploadObserverHandle;
+
bool mDoUpload; // if FALSE only model data will be requested, otherwise the model will be uploaded
};
diff --git a/indra/newview/lluploadfloaterobservers.h b/indra/newview/lluploadfloaterobservers.h
index 23206549e7..9a38db837c 100644
--- a/indra/newview/lluploadfloaterobservers.h
+++ b/indra/newview/lluploadfloaterobservers.h
@@ -62,6 +62,24 @@ protected:
LLRootHandle<LLWholeModelFeeObserver> mWholeModelFeeObserverHandle;
};
+
+class LLWholeModelUploadObserver
+{
+public:
+ LLWholeModelUploadObserver() { mWholeModelUploadObserverHandle.bind(this); }
+ virtual ~LLWholeModelUploadObserver() {}
+
+ virtual void onModelUploadSuccess() = 0;
+
+ virtual void onModelUploadFailure() = 0;
+
+ LLHandle<LLWholeModelUploadObserver> getWholeModelUploadObserverHandle() const { return mWholeModelUploadObserverHandle; }
+
+protected:
+ LLRootHandle<LLWholeModelUploadObserver> mWholeModelUploadObserverHandle;
+};
+
+
class LLUploadModelPremissionsResponder : public LLHTTPClient::Responder
{
public: