diff options
author | Nyx (Neal Orman) <nyx@lindenlab.com> | 2011-06-30 15:55:19 -0400 |
---|---|---|
committer | Nyx (Neal Orman) <nyx@lindenlab.com> | 2011-06-30 15:55:19 -0400 |
commit | 17060f4e92b12ab74a1b570cd9ee4d1543fb23d1 (patch) | |
tree | bd23d5f35279f6e5b7fa2da55631c22a0eb68d58 /indra | |
parent | e4b12b83e8721e0856af0305f6cee46cd6092024 (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.
Diffstat (limited to 'indra')
-rwxr-xr-x | indra/newview/llfloatermodelpreview.cpp | 2 | ||||
-rw-r--r-- | indra/newview/llfloatermodeluploadbase.h | 6 | ||||
-rw-r--r-- | indra/newview/llfloatermodelwizard.cpp | 26 | ||||
-rw-r--r-- | indra/newview/llfloatermodelwizard.h | 4 | ||||
-rwxr-xr-x | indra/newview/llmeshrepository.cpp | 23 | ||||
-rw-r--r-- | indra/newview/llmeshrepository.h | 7 | ||||
-rw-r--r-- | indra/newview/lluploadfloaterobservers.h | 18 |
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: |