summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/newview/llfloatermodelpreview.cpp24
-rw-r--r--indra/newview/llfloatermodelpreview.h2
-rwxr-xr-xindra/newview/llmeshrepository.cpp54
3 files changed, 45 insertions, 35 deletions
diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index aa608ea67c..ab6753b4be 100644
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -1901,11 +1901,19 @@ bool LLModelLoader::doLoadModel()
{
llwarns << "document has no visual_scene" << llendl;
setLoadState( ERROR_PARSING );
- return false;
+ return true;
}
+
setLoadState( DONE );
- processElement(scene);
+ bool badElement = false;
+
+ processElement( scene, badElement );
+
+ if ( badElement )
+ {
+ setLoadState( ERROR_PARSING );
+ }
return true;
}
@@ -2490,7 +2498,7 @@ daeElement* LLModelLoader::getChildFromElement( daeElement* pElement, std::strin
return NULL;
}
-void LLModelLoader::processElement(daeElement* element)
+void LLModelLoader::processElement( daeElement* element, bool& badElement )
{
LLMatrix4 saved_transform = mTransform;
@@ -2590,6 +2598,12 @@ void LLModelLoader::processElement(daeElement* element)
}
}
}
+ else
+ {
+ llinfos<<"Unable to resolve geometry URL."<<llendl;
+ badElement = true;
+ }
+
}
domInstance_node* instance_node = daeSafeCast<domInstance_node>(element);
@@ -2598,7 +2612,7 @@ void LLModelLoader::processElement(daeElement* element)
daeElement* instance = instance_node->getUrl().getElement();
if (instance)
{
- processElement(instance);
+ processElement(instance,badElement);
}
}
@@ -2606,7 +2620,7 @@ void LLModelLoader::processElement(daeElement* element)
daeTArray< daeSmartRef<daeElement> > children = element->getChildren();
for (S32 i = 0; i < children.getCount(); i++)
{
- processElement(children[i]);
+ processElement(children[i],badElement);
}
domNode* node = daeSafeCast<domNode>(element);
diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h
index dcc2fc8898..ccd6fef953 100644
--- a/indra/newview/llfloatermodelpreview.h
+++ b/indra/newview/llfloatermodelpreview.h
@@ -108,7 +108,7 @@ public:
void loadModelCallback();
void loadTextures() ; //called in the main thread.
- void processElement(daeElement* element);
+ void processElement(daeElement* element, bool& badElement);
std::vector<LLImportMaterial> getMaterials(LLModel* model, domInstance_geometry* instance_geo);
LLImportMaterial profileToMaterial(domProfile_COMMON* material);
std::string getElementLabel(daeElement *element);
diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index f8ffb16adb..5bb5aa1f7c 100755
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -468,38 +468,36 @@ public:
};
-void log_upload_error(const LLSD& content,std::string stage)
+void log_upload_error(S32 status, const LLSD& content,std::string stage)
{
+ llwarns << "stage: " << stage << " http status: " << status << llendl;
if (content.has("error"))
{
const LLSD& err = content["error"];
- llwarns << "mesh upload failed, stage " << stage
- << " message " << err["message"].asString() << " id " << err["identifier"].asString()
- << llendl;
-
- if (content.has("errors"))
- {
- const LLSD& err_list = content["errors"];
+ llwarns << "err: " << err << llendl;
+ llwarns << "mesh upload failed, stage '" << stage
+ << "' error '" << err["error"].asString()
+ << "', message '" << err["message"].asString()
+ << "', id '" << err["identifier"].asString()
+ << "'" << llendl;
+ if (err.has("errors"))
+ {
+ S32 error_num = 0;
+ const LLSD& err_list = err["errors"];
for (LLSD::array_const_iterator it = err_list.beginArray();
it != err_list.endArray();
++it)
{
const LLSD& err_entry = *it;
- std::string index_info;
- std::string texture_index_str = err_entry["TextureIndex"].asString();
- if (!texture_index_str.empty())
+ llwarns << "error[" << error_num << "]:" << llendl;
+ for (LLSD::map_const_iterator map_it = err_entry.beginMap();
+ map_it != err_entry.endMap();
+ ++map_it)
{
- index_info += " texture_index: " + texture_index_str;
+ llwarns << "\t" << map_it->first << ": "
+ << map_it->second << llendl;
}
- std::string mesh_index_str = err_entry["MeshIndex"].asString();
- if (!mesh_index_str.empty())
- {
- index_info += " mesh_index: " + mesh_index_str;
- }
- llwarns << "mesh err code " << err_entry["error"].asString()
- << " message " << err_entry["message"]
- << index_info
- << llendl;
+ error_num++;
}
}
}
@@ -507,8 +505,6 @@ void log_upload_error(const LLSD& content,std::string stage)
{
llwarns << "bad mesh, no error information available" << llendl;
}
-
-
}
class LLModelObjectUploadResponder: public LLCurl::Responder
@@ -547,12 +543,11 @@ public:
const std::string& reason,
const LLSD& content)
{
- //assert_main_thread();
llinfos << "completed" << llendl;
mThread->mPendingUploads--;
dumpLLSDToFile(content,make_dump_name("whole_model_fee_response_",dump_num));
- llinfos << "LLWholeModelFeeResponder content: " << content << llendl;
- if (isGoodStatus(status))
+ if (isGoodStatus(status) &&
+ content["state"].asString() == "upload")
{
llinfos << "fee request succeeded" << llendl;
mThread->mWholeModelUploadURL = content["uploader"].asString();
@@ -560,7 +555,7 @@ public:
else
{
llwarns << "fee request failed" << llendl;
- log_upload_error(content,"fee");
+ log_upload_error(status,content,"fee");
mThread->mWholeModelUploadURL = "";
}
}
@@ -588,7 +583,8 @@ public:
llinfos << "LLWholeModelUploadResponder content: " << content << llendl;
// requested "mesh" asset type isn't actually the type
// of the resultant object, fix it up here.
- if (isGoodStatus(status))
+ if (isGoodStatus(status) &&
+ content["state"].asString() == "complete")
{
llinfos << "upload succeeded" << llendl;
mPostData["asset_type"] = "object";
@@ -597,7 +593,7 @@ public:
else
{
llwarns << "upload failed" << llendl;
- log_upload_error(content,"upload");
+ log_upload_error(status,content,"upload");
}
}
};