diff options
Diffstat (limited to 'indra/llcommon')
| -rw-r--r-- | indra/llcommon/llavatarname.cpp | 69 | ||||
| -rw-r--r-- | indra/llcommon/llavatarname.h | 57 | 
2 files changed, 108 insertions, 18 deletions
| diff --git a/indra/llcommon/llavatarname.cpp b/indra/llcommon/llavatarname.cpp index 3206843bf4..b49e6a7aac 100644 --- a/indra/llcommon/llavatarname.cpp +++ b/indra/llcommon/llavatarname.cpp @@ -30,6 +30,7 @@  #include "llavatarname.h"  #include "lldate.h" +#include "llframetimer.h"  #include "llsd.h"  // Store these in pre-built std::strings to avoid memory allocations in @@ -42,6 +43,8 @@ static const std::string IS_DISPLAY_NAME_DEFAULT("is_display_name_default");  static const std::string DISPLAY_NAME_EXPIRES("display_name_expires");  static const std::string DISPLAY_NAME_NEXT_UPDATE("display_name_next_update"); +bool LLAvatarName::sUseDisplayNames = true; +  LLAvatarName::LLAvatarName()  :	mUsername(),  	mDisplayName(), @@ -61,6 +64,17 @@ bool LLAvatarName::operator<(const LLAvatarName& rhs) const  		return mUsername < rhs.mUsername;  } +//static  +void LLAvatarName::setUseDisplayNames(bool use) +{ +	sUseDisplayNames = use; +} +//static  +bool LLAvatarName::useDisplayNames()  +{  +	return sUseDisplayNames;  +} +  LLSD LLAvatarName::asLLSD() const  {  	LLSD sd; @@ -85,6 +99,33 @@ void LLAvatarName::fromLLSD(const LLSD& sd)  	mExpires = expires.secondsSinceEpoch();  	LLDate next_update = sd[DISPLAY_NAME_NEXT_UPDATE];  	mNextUpdate = next_update.secondsSinceEpoch(); +	 +	// Some avatars don't have explicit display names set. Force a legible display name here. +	if (mDisplayName.empty()) +	{ +		mDisplayName = mUsername; +	} +} + +void LLAvatarName::fromString(const std::string& full_name, F64 expires) +{ +	mDisplayName = full_name; +	std::string::size_type index = full_name.find(' '); +	if (index != std::string::npos) +	{ +		mLegacyFirstName = full_name.substr(0, index); +		mLegacyLastName = full_name.substr(index+1); +		mUsername = mLegacyFirstName + " " + mLegacyLastName; +	} +	else +	{ +		mLegacyFirstName = full_name; +		mLegacyLastName = ""; +		mUsername = full_name; +	} +	mIsDisplayNameDefault = true; +	mIsTemporaryName = true; +	mExpires = LLFrameTimer::getTotalSeconds() + expires;  }  std::string LLAvatarName::getCompleteName() const @@ -104,9 +145,22 @@ std::string LLAvatarName::getCompleteName() const  	return name;  } -std::string LLAvatarName::getLegacyName() const +std::string LLAvatarName::getDisplayName() const +{ +	if (sUseDisplayNames) +	{ +		return mDisplayName; +	} +	else +	{ +		return getUserName(); +	} +} + +std::string LLAvatarName::getUserName() const  { -	if (mLegacyFirstName.empty() && mLegacyLastName.empty()) // display names disabled? +	// If we cannot create a user name from the legacy strings, use the display name +	if (mLegacyFirstName.empty() && mLegacyLastName.empty())  	{  		return mDisplayName;  	} @@ -118,3 +172,14 @@ std::string LLAvatarName::getLegacyName() const  	name += mLegacyLastName;  	return name;  } + +void LLAvatarName::dump() const +{ +	llinfos << "Merov debug : display = " << mDisplayName << ", user = " << mUsername << ", complete = " << getCompleteName() << ", legacy = " << getUserName() << " first = " << mLegacyFirstName << " last = " << mLegacyLastName << llendl; +	LL_DEBUGS("AvNameCache") << "LLAvatarName: " +	                         << "user '" << mUsername << "' " +							 << "display '" << mDisplayName << "' " +	                         << "expires in " << mExpires - LLFrameTimer::getTotalSeconds() << " seconds" +							 << LL_ENDL; +} + diff --git a/indra/llcommon/llavatarname.h b/indra/llcommon/llavatarname.h index ba258d6d52..cf9eb27b03 100644 --- a/indra/llcommon/llavatarname.h +++ b/indra/llcommon/llavatarname.h @@ -43,19 +43,50 @@ public:  	void fromLLSD(const LLSD& sd); +	// Used only in legacy mode when the display name capability is not provided server side +	void fromString(const std::string& full_name, F64 expires = 0.0f); +	 +	static void setUseDisplayNames(bool use); +	static bool useDisplayNames(); +	 +	// Name is valid if not temporary and not yet expired +	bool isValidName(F64 max_unrefreshed = 0.0f) const { return !mIsTemporaryName && (mExpires >= max_unrefreshed); } +	 +	//  +	bool isDisplayNameDefault() const { return mIsDisplayNameDefault; } +	  	// For normal names, returns "James Linden (james.linden)"  	// When display names are disabled returns just "James Linden"  	std::string getCompleteName() const; - -	// Returns "James Linden" or "bobsmith123 Resident" for backwards -	// compatibility with systems like voice and muting -	// *TODO: Eliminate this in favor of username only -	std::string getLegacyName() const; - +	 +	// "José Sanchez" or "James Linden", UTF-8 encoded Unicode +	// Takes the display name preference into account. This is truly the name that should  +	// be used for all UI where an avatar name has to be used unless we truly want something else (rare) +	std::string getDisplayName() const; +	 +	// Returns "James Linden" or "bobsmith123 Resident" +	// Used where we explicitely prefer or need a non UTF-8 legacy (ASCII) name +	// Also used for backwards compatibility with systems like voice and muting +	std::string getUserName() const; +	 +	// Debug print of the object +	void dump() const; +	 +	// Names can change, so need to keep track of when name was +	// last checked. +	// Unix time-from-epoch seconds for efficiency +	F64 mExpires; +	 +	// You can only change your name every N hours, so record +	// when the next update is allowed +	// Unix time-from-epoch seconds +	F64 mNextUpdate; +	 +private:  	// "bobsmith123" or "james.linden", US-ASCII only  	std::string mUsername; -	// "Jose' Sanchez" or "James Linden", UTF-8 encoded Unicode +	// "José Sanchez" or "James Linden", UTF-8 encoded Unicode  	// Contains data whether or not user has explicitly set  	// a display name; may duplicate their username.  	std::string mDisplayName; @@ -81,15 +112,9 @@ public:  	// shown in UI, but are not serialized.  	bool mIsTemporaryName; -	// Names can change, so need to keep track of when name was -	// last checked. -	// Unix time-from-epoch seconds for efficiency -	F64 mExpires; -	 -	// You can only change your name every N hours, so record -	// when the next update is allowed -	// Unix time-from-epoch seconds -	F64 mNextUpdate; +	// Global flag indicating if display name should be used or not +	// This will affect the output of the high level "get" methods +	static bool sUseDisplayNames;  };  #endif | 
