Merge downstream code from viewer-bear
commit
cf37c67764
4
.hgtags
4
.hgtags
|
|
@ -440,3 +440,7 @@ adc360e6bf21390d2665380951d85937cd29a604 3.5.0-release
|
|||
1ada73295ed0eaa4a772ef079c29f57069342c32 DRTVWR-310
|
||||
0ca3910763cec967703e45bc6208a325dccb9f95 3.5.1-beta1
|
||||
20cdf370f5c8be6193bef6fb3a81cc3f81275191 3.5.1-beta1
|
||||
2319904200de367646b9a9442239a38d52c1eeb5 DRTVWR-313
|
||||
9d8726eca785acad694564516f16dd639faf45c0 3.5.1-beta2
|
||||
4b7fa963b80e2056ab648f83a4d61310b3cedb3d DRTVWR-314
|
||||
65ae89aeb7ea674a555e439e963f17949322ac94 3.5.1-beta3
|
||||
|
|
|
|||
|
|
@ -300,6 +300,7 @@ ChickyBabes Zuzu
|
|||
Christopher Organiser
|
||||
Ciaran Laval
|
||||
Cinder Roxley
|
||||
BUG-2326
|
||||
STORM-1703
|
||||
Clara Young
|
||||
Coaldust Numbers
|
||||
|
|
@ -900,6 +901,7 @@ NickyD
|
|||
Nicky Dasmijn
|
||||
VWR-29228
|
||||
MAINT-873
|
||||
SUN-72
|
||||
STORM-1935
|
||||
STORM-1936
|
||||
STORM-1937
|
||||
|
|
|
|||
|
|
@ -853,7 +853,8 @@ llifstream::llifstream(const std::string& _Filename,
|
|||
#if LL_WINDOWS
|
||||
std::istream(&_M_filebuf)
|
||||
{
|
||||
if (_M_filebuf.open(_Filename.c_str(), _Mode | ios_base::in) == 0)
|
||||
llutf16string wideName = utf8str_to_utf16str( _Filename );
|
||||
if (_M_filebuf.open(wideName.c_str(), _Mode | ios_base::in) == 0)
|
||||
{
|
||||
_Myios::setstate(ios_base::failbit);
|
||||
}
|
||||
|
|
@ -872,7 +873,8 @@ llifstream::llifstream(const char* _Filename,
|
|||
#if LL_WINDOWS
|
||||
std::istream(&_M_filebuf)
|
||||
{
|
||||
if (_M_filebuf.open(_Filename, _Mode | ios_base::in) == 0)
|
||||
llutf16string wideName = utf8str_to_utf16str( _Filename );
|
||||
if (_M_filebuf.open(wideName.c_str(), _Mode | ios_base::in) == 0)
|
||||
{
|
||||
_Myios::setstate(ios_base::failbit);
|
||||
}
|
||||
|
|
@ -917,8 +919,10 @@ bool llifstream::is_open() const
|
|||
|
||||
void llifstream::open(const char* _Filename, ios_base::openmode _Mode)
|
||||
{ // open a C stream with specified mode
|
||||
if (_M_filebuf.open(_Filename, _Mode | ios_base::in) == 0)
|
||||
|
||||
#if LL_WINDOWS
|
||||
llutf16string wideName = utf8str_to_utf16str( _Filename );
|
||||
if (_M_filebuf.open( wideName.c_str(), _Mode | ios_base::in) == 0)
|
||||
{
|
||||
_Myios::setstate(ios_base::failbit);
|
||||
}
|
||||
|
|
@ -927,6 +931,7 @@ void llifstream::open(const char* _Filename, ios_base::openmode _Mode)
|
|||
_Myios::clear();
|
||||
}
|
||||
#else
|
||||
if (_M_filebuf.open(_Filename, _Mode | ios_base::in) == 0)
|
||||
{
|
||||
this->setstate(ios_base::failbit);
|
||||
}
|
||||
|
|
@ -969,7 +974,8 @@ llofstream::llofstream(const std::string& _Filename,
|
|||
#if LL_WINDOWS
|
||||
std::ostream(&_M_filebuf)
|
||||
{
|
||||
if (_M_filebuf.open(_Filename.c_str(), _Mode | ios_base::out) == 0)
|
||||
llutf16string wideName = utf8str_to_utf16str( _Filename );
|
||||
if (_M_filebuf.open( wideName.c_str(), _Mode | ios_base::out) == 0)
|
||||
{
|
||||
_Myios::setstate(ios_base::failbit);
|
||||
}
|
||||
|
|
@ -988,7 +994,8 @@ llofstream::llofstream(const char* _Filename,
|
|||
#if LL_WINDOWS
|
||||
std::ostream(&_M_filebuf)
|
||||
{
|
||||
if (_M_filebuf.open(_Filename, _Mode | ios_base::out) == 0)
|
||||
llutf16string wideName = utf8str_to_utf16str( _Filename );
|
||||
if (_M_filebuf.open( wideName.c_str(), _Mode | ios_base::out) == 0)
|
||||
{
|
||||
_Myios::setstate(ios_base::failbit);
|
||||
}
|
||||
|
|
@ -1032,8 +1039,9 @@ bool llofstream::is_open() const
|
|||
|
||||
void llofstream::open(const char* _Filename, ios_base::openmode _Mode)
|
||||
{ // open a C stream with specified mode
|
||||
if (_M_filebuf.open(_Filename, _Mode | ios_base::out) == 0)
|
||||
#if LL_WINDOWS
|
||||
llutf16string wideName = utf8str_to_utf16str( _Filename );
|
||||
if (_M_filebuf.open( wideName.c_str(), _Mode | ios_base::out) == 0)
|
||||
{
|
||||
_Myios::setstate(ios_base::failbit);
|
||||
}
|
||||
|
|
@ -1042,6 +1050,7 @@ void llofstream::open(const char* _Filename, ios_base::openmode _Mode)
|
|||
_Myios::clear();
|
||||
}
|
||||
#else
|
||||
if (_M_filebuf.open(_Filename, _Mode | ios_base::out) == 0)
|
||||
{
|
||||
this->setstate(ios_base::failbit);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -818,7 +818,14 @@ bool LLFloaterAvatarPicker::isSelectBtnEnabled()
|
|||
uuid_vec_t avatar_ids;
|
||||
std::vector<LLAvatarName> avatar_names;
|
||||
getSelectedAvatarData(list, avatar_ids, avatar_names);
|
||||
return mOkButtonValidateSignal(avatar_ids);
|
||||
if (avatar_ids.size() >= 1)
|
||||
{
|
||||
ret_val = mOkButtonValidateSignal(avatar_ids);
|
||||
}
|
||||
else
|
||||
{
|
||||
ret_val = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2699,24 +2699,33 @@ void LLViewerObject::processTaskInvFile(void** user_data, S32 error_code, LLExtS
|
|||
if(ft && (0 == error_code) &&
|
||||
(object = gObjectList.findObject(ft->mTaskID)))
|
||||
{
|
||||
object->loadTaskInvFile(ft->mFilename);
|
||||
|
||||
LLInventoryObject::object_list_t::iterator it = object->mInventory->begin();
|
||||
LLInventoryObject::object_list_t::iterator end = object->mInventory->end();
|
||||
std::list<LLUUID>& pending_lst = object->mPendingInventoryItemsIDs;
|
||||
|
||||
for (; it != end && pending_lst.size(); ++it)
|
||||
if (object->loadTaskInvFile(ft->mFilename))
|
||||
{
|
||||
LLViewerInventoryItem* item = dynamic_cast<LLViewerInventoryItem*>(it->get());
|
||||
if(item && item->getType() != LLAssetType::AT_CATEGORY)
|
||||
|
||||
LLInventoryObject::object_list_t::iterator it = object->mInventory->begin();
|
||||
LLInventoryObject::object_list_t::iterator end = object->mInventory->end();
|
||||
std::list<LLUUID>& pending_lst = object->mPendingInventoryItemsIDs;
|
||||
|
||||
for (; it != end && pending_lst.size(); ++it)
|
||||
{
|
||||
std::list<LLUUID>::iterator id_it = std::find(pending_lst.begin(), pending_lst.begin(), item->getAssetUUID());
|
||||
if (id_it != pending_lst.end())
|
||||
LLViewerInventoryItem* item = dynamic_cast<LLViewerInventoryItem*>(it->get());
|
||||
if(item && item->getType() != LLAssetType::AT_CATEGORY)
|
||||
{
|
||||
pending_lst.erase(id_it);
|
||||
std::list<LLUUID>::iterator id_it = std::find(pending_lst.begin(), pending_lst.begin(), item->getAssetUUID());
|
||||
if (id_it != pending_lst.end())
|
||||
{
|
||||
pending_lst.erase(id_it);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// MAINT-2597 - crash when trying to edit a no-mod object
|
||||
// Somehow get an contents inventory response, but with an invalid stream (possibly 0 size?)
|
||||
// Stated repro was specific to no-mod objects so failing without user interaction should be safe.
|
||||
llwarns << "Trying to load invalid task inventory file. Ignoring file contents." << llendl;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -2728,7 +2737,7 @@ void LLViewerObject::processTaskInvFile(void** user_data, S32 error_code, LLExtS
|
|||
delete ft;
|
||||
}
|
||||
|
||||
void LLViewerObject::loadTaskInvFile(const std::string& filename)
|
||||
BOOL LLViewerObject::loadTaskInvFile(const std::string& filename)
|
||||
{
|
||||
std::string filename_and_local_path = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, filename);
|
||||
llifstream ifs(filename_and_local_path);
|
||||
|
|
@ -2775,8 +2784,11 @@ void LLViewerObject::loadTaskInvFile(const std::string& filename)
|
|||
{
|
||||
llwarns << "unable to load task inventory: " << filename_and_local_path
|
||||
<< llendl;
|
||||
return FALSE;
|
||||
}
|
||||
doInventoryCallback();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void LLViewerObject::doInventoryCallback()
|
||||
|
|
|
|||
|
|
@ -651,7 +651,7 @@ protected:
|
|||
//
|
||||
|
||||
static void processTaskInvFile(void** user_data, S32 error_code, LLExtStat ext_status);
|
||||
void loadTaskInvFile(const std::string& filename);
|
||||
BOOL loadTaskInvFile(const std::string& filename);
|
||||
void doInventoryCallback();
|
||||
|
||||
BOOL isOnMap();
|
||||
|
|
|
|||
|
|
@ -815,14 +815,14 @@ void LLVOAvatar::debugAvatarRezTime(std::string notification_name, std::string c
|
|||
//------------------------------------------------------------------------
|
||||
LLVOAvatar::~LLVOAvatar()
|
||||
{
|
||||
if (!mFullyLoaded)
|
||||
{
|
||||
if (!mFullyLoaded)
|
||||
{
|
||||
debugAvatarRezTime("AvatarRezLeftCloudNotification","left after ruth seconds as cloud");
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
debugAvatarRezTime("AvatarRezLeftNotification","left sometime after declouding");
|
||||
}
|
||||
}
|
||||
|
||||
logPendingPhases();
|
||||
|
||||
|
|
@ -6110,6 +6110,11 @@ void LLVOAvatar::stopPhase(const std::string& phase_name, bool err_check)
|
|||
|
||||
void LLVOAvatar::logPendingPhases()
|
||||
{
|
||||
if (!isAgentAvatarValid())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (LLViewerStats::phase_map_t::iterator it = getPhases().begin();
|
||||
it != getPhases().end();
|
||||
++it)
|
||||
|
|
@ -6144,6 +6149,11 @@ void LLVOAvatar::logPendingPhasesAllAvatars()
|
|||
|
||||
void LLVOAvatar::logMetricsTimerRecord(const std::string& phase_name, F32 elapsed, bool completed)
|
||||
{
|
||||
if (!isAgentAvatarValid())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LLSD record;
|
||||
record["timer_name"] = phase_name;
|
||||
record["avatar_id"] = getID();
|
||||
|
|
@ -6160,13 +6170,6 @@ void LLVOAvatar::logMetricsTimerRecord(const std::string& phase_name, F32 elapse
|
|||
record["is_using_server_bakes"] = ((bool) isUsingServerBakes());
|
||||
record["is_self"] = isSelf();
|
||||
|
||||
|
||||
#if 0 // verbose logging
|
||||
std::ostringstream ostr;
|
||||
ostr << LLSDNotationStreamer(record);
|
||||
LL_DEBUGS("Avatar") << "record\n" << ostr.str() << llendl;
|
||||
#endif
|
||||
|
||||
if (isAgentAvatarValid())
|
||||
{
|
||||
gAgentAvatarp->addMetricsTimerRecord(record);
|
||||
|
|
|
|||
Loading…
Reference in New Issue