154 lines
5.3 KiB
C++
154 lines
5.3 KiB
C++
/**
|
||
* @file llavatarname.h
|
||
* @brief Represents name-related data for an avatar, such as the
|
||
* username/SLID ("bobsmith123" or "james.linden") and the display
|
||
* name ("James Cook")
|
||
*
|
||
* $LicenseInfo:firstyear=2010&license=viewerlgpl$
|
||
* Second Life Viewer Source Code
|
||
* Copyright (C) 2010, Linden Research, Inc.
|
||
*
|
||
* This library is free software; you can redistribute it and/or
|
||
* modify it under the terms of the GNU Lesser General Public
|
||
* License as published by the Free Software Foundation;
|
||
* version 2.1 of the License only.
|
||
*
|
||
* This library is distributed in the hope that it will be useful,
|
||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||
* Lesser General Public License for more details.
|
||
*
|
||
* You should have received a copy of the GNU Lesser General Public
|
||
* License along with this library; if not, write to the Free Software
|
||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||
*
|
||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||
* $/LicenseInfo$
|
||
*/
|
||
#ifndef LLAVATARNAME_H
|
||
#define LLAVATARNAME_H
|
||
|
||
#include <string>
|
||
|
||
const S32& main_name_system();
|
||
|
||
class LLSD;
|
||
|
||
class LLAvatarName
|
||
{
|
||
public:
|
||
LLAvatarName();
|
||
|
||
bool operator<(const LLAvatarName& rhs) const;
|
||
|
||
// Conversion to and from LLSD (cache file or server response)
|
||
LLSD asLLSD() const;
|
||
void fromLLSD(const LLSD& sd);
|
||
|
||
// Used only in legacy mode when the display name capability is not provided server side
|
||
// or to otherwise create a temporary valid item.
|
||
void fromString(const std::string& full_name);
|
||
|
||
// Set the name object to become invalid in "expires" seconds from now
|
||
void setExpires(F64 expires);
|
||
|
||
// Set and get the display name flag set by the user in preferences.
|
||
static void setUseDisplayNames(bool use);
|
||
static bool useDisplayNames();
|
||
|
||
static void setUseUsernames(bool use);
|
||
static bool useUsernames();
|
||
|
||
// A name object is valid if not temporary and not yet expired (default is expiration not checked)
|
||
bool isValidName(F64 max_unrefreshed = 0.0f) const { return !mIsTemporaryName && (mExpires >= max_unrefreshed); }
|
||
|
||
// Return true if the name is made up from legacy or temporary data
|
||
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(bool linefeed = false) 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<6F> 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;
|
||
|
||
// Returns "james.linden" or the legacy name for very old names
|
||
std::string getAccountName() const { return mUsername; }
|
||
|
||
// Returns name in the format desired according to name_system
|
||
std::string getNSName(const S32& name_system = main_name_system()) const
|
||
{
|
||
switch (name_system)
|
||
{
|
||
case 1 : return getCompleteName();
|
||
case 2 : return getDisplayName();
|
||
case 3 : return getLegacyName() + (mIsDisplayNameDefault ? "" : " (" + mDisplayName + ')'); break;
|
||
default : return getLegacyName();
|
||
}
|
||
}
|
||
|
||
// 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;
|
||
|
||
// "Jos<6F> 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;
|
||
|
||
// For "James Linden", "James"
|
||
// For "bobsmith123", "bobsmith123"
|
||
// Used to communicate with legacy systems like voice and muting which
|
||
// rely on old-style names.
|
||
// *TODO: Eliminate this in favor of username only
|
||
std::string mLegacyFirstName;
|
||
|
||
// For "James Linden", "Linden"
|
||
// For "bobsmith123", "Resident"
|
||
// see above for rationale
|
||
std::string mLegacyLastName;
|
||
|
||
// If true, both display name and SLID were generated from
|
||
// a legacy first and last name, like "James Linden (james.linden)"
|
||
bool mIsDisplayNameDefault;
|
||
|
||
// Under error conditions, we may insert "dummy" records with
|
||
// names like "???" into caches as placeholders. These can be
|
||
// shown in UI, but are not serialized.
|
||
bool mIsTemporaryName;
|
||
|
||
// 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;
|
||
|
||
// Flag indicating if username should be shown after display name or not
|
||
static bool sUseUsernames;
|
||
};
|
||
|
||
#endif
|