diff --git a/indra/llmessage/CMakeLists.txt b/indra/llmessage/CMakeLists.txt index 952cd085ae..68f83c790c 100644 --- a/indra/llmessage/CMakeLists.txt +++ b/indra/llmessage/CMakeLists.txt @@ -19,6 +19,7 @@ include(Python) include(Tut) include(Python) include(JsonCpp) +include(LLXML) # For accessing settings include_directories (${CMAKE_CURRENT_SOURCE_DIR}) @@ -26,6 +27,7 @@ include_directories( ${LLCOMMON_INCLUDE_DIRS} ${LLCOREHTTP_INCLUDE_DIRS} ${LLMATH_INCLUDE_DIRS} + ${LLXML_INCLUDE_DIRS} # For accessing settings ${LLMESSAGE_INCLUDE_DIRS} ${LLFILESYSTEM_INCLUDE_DIRS} ${JSONCPP_INCLUDE_DIR} @@ -217,6 +219,7 @@ target_link_libraries( ${LLCOMMON_LIBRARIES} ${LLFILESYSTEM_LIBRARIES} ${LLMATH_LIBRARIES} + ${LLXML_LIBRARIES} # For accessing settings ${JSONCPP_LIBRARIES} ${OPENSSL_LIBRARIES} ${CRYPTO_LIBRARIES} @@ -235,6 +238,7 @@ target_link_libraries( ${LLCOMMON_LIBRARIES} ${LLFILESYSTEM_LIBRARIES} ${LLMATH_LIBRARIES} + ${LLXML_LIBRARIES} # For accessing settings ${JSONCPP_LIBRARIES} ${OPENSSL_LIBRARIES} ${CRYPTO_LIBRARIES} @@ -265,6 +269,7 @@ if (LINUX) ${WINDOWS_LIBRARIES} ${LLFILESYSTEM_LIBRARIES} ${LLMATH_LIBRARIES} + ${LLXML_LIBRARIES} # For accessing settings ${CURL_LIBRARIES} ${NGHTTP2_LIBRARIES} ${LLCOMMON_LIBRARIES} @@ -281,6 +286,7 @@ else (LINUX) ${WINDOWS_LIBRARIES} ${LLFILESYSTEM_LIBRARIES} ${LLMATH_LIBRARIES} + ${LLXML_LIBRARIES} # For accessing settings ${CURL_LIBRARIES} ${NGHTTP2_LIBRARIES} ${LLCOMMON_LIBRARIES} diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp index 795860e9f7..d9f8d49b6d 100644 --- a/indra/llmessage/llavatarnamecache.cpp +++ b/indra/llmessage/llavatarnamecache.cpp @@ -48,8 +48,9 @@ #include #include -#include "../newview/lggcontactsets.h" -#include "../llxml/llcontrol.h" + +#include "llcontrol.h" // Optional legacy name cache expiration + // Time-to-live for a temp cache entry. const F64 TEMP_CACHE_ENTRY_LIFETIME = 60.0; // Maximum time an unrefreshed cache entry is allowed. @@ -213,13 +214,15 @@ void LLAvatarNameCache::handleAvNameCacheSuccess(const LLSD &data, const LLSD &h LLAvatarName av_name; // Contact sets alias - if (LGGContactSets::getInstance()->hasPseudonym(agent_id)) + bool dn_removed; + std::string pseudonym; + if (mCustomNameCheckCallback && mCustomNameCheckCallback(agent_id, dn_removed, pseudonym)) { LLSD info(row); - info["is_display_name_default"] = LGGContactSets::getInstance()->hasDisplayNameRemoved(agent_id); - info["display_name"] = LGGContactSets::getInstance()->hasDisplayNameRemoved(agent_id) + info["is_display_name_default"] = dn_removed; + info["display_name"] = dn_removed ? (info["legacy_first_name"].asString() + " " + info["legacy_last_name"].asString()) - : LGGContactSets::getInstance()->getPseudonym(agent_id); + : pseudonym; av_name.fromLLSD(info); } else @@ -647,13 +650,15 @@ bool LLAvatarNameCache::getName(const LLUUID& agent_id, LLAvatarName *av_name) { *av_name = it->second; // Contact sets alias - if (LGGContactSets::getInstance()->hasPseudonym(agent_id)) + bool dn_removed; + std::string pseudonym; + if (mCustomNameCheckCallback && mCustomNameCheckCallback(agent_id, dn_removed, pseudonym)) { LLSD info = av_name->asLLSD(); - info["is_display_name_default"] = LGGContactSets::getInstance()->hasDisplayNameRemoved(agent_id); - info["display_name"] = LGGContactSets::getInstance()->hasDisplayNameRemoved(agent_id) + info["is_display_name_default"] = dn_removed; + info["display_name"] = dn_removed ? (info["legacy_first_name"].asString() + " " + info["legacy_last_name"].asString()) - : LGGContactSets::getInstance()->getPseudonym(agent_id); + : pseudonym; av_name->fromLLSD(info); } // Contact sets alias @@ -711,14 +716,15 @@ LLAvatarNameCache::callback_connection_t LLAvatarNameCache::getNameCallback(cons LLSD test = av_name.asLLSD(); // Contact sets alias - if (LGGContactSets::getInstance()->hasPseudonym(agent_id)) + bool dn_removed; + std::string pseudonym; + if (mCustomNameCheckCallback && mCustomNameCheckCallback(agent_id, dn_removed, pseudonym)) { - LL_DEBUGS("AvNameCache") << "DN cache hit via alias " << agent_id << LL_ENDL; LLSD info = av_name.asLLSD(); - info["is_display_name_default"] = LGGContactSets::getInstance()->hasDisplayNameRemoved(agent_id); - info["display_name"] = LGGContactSets::getInstance()->hasDisplayNameRemoved(agent_id) + info["is_display_name_default"] = dn_removed; + info["display_name"] = dn_removed ? (info["legacy_first_name"].asString() + " " + info["legacy_last_name"].asString()) - : LGGContactSets::getInstance()->getPseudonym(agent_id); + : pseudonym; av_name.fromLLSD(info); } // Contact sets alias diff --git a/indra/llmessage/llavatarnamecache.h b/indra/llmessage/llavatarnamecache.h index 9663981faf..6b7aecad87 100644 --- a/indra/llmessage/llavatarnamecache.h +++ b/indra/llmessage/llavatarnamecache.h @@ -44,6 +44,14 @@ public: typedef boost::signals2::signal use_display_name_signal_t; typedef boost::function account_name_changed_callback_t; + // Contact sets + typedef boost::function custom_name_check_callback_t; + void setCustomNameCheckCallback(custom_name_check_callback_t cb) + { + mCustomNameCheckCallback = cb; + } + // + // Import/export the name cache to file. bool importFile(std::istream& istr); void exportFile(std::ostream& ostr); @@ -200,6 +208,9 @@ private: // Time when unrefreshed cached names were checked last. F64 mLastExpireCheck; + + // Contact sets + custom_name_check_callback_t mCustomNameCheckCallback; }; // Parse a cache-control header to get the max-age delta-seconds. diff --git a/indra/newview/lggcontactsets.cpp b/indra/newview/lggcontactsets.cpp index 8ad4cce2df..4a1c76113f 100644 --- a/indra/newview/lggcontactsets.cpp +++ b/indra/newview/lggcontactsets.cpp @@ -1048,6 +1048,13 @@ LGGContactSets::ContactSet* LGGContactSets::getContactSet(const std::string& set return NULL; } +bool LGGContactSets::checkCustomName(const LLUUID& id, bool& dn_removed, std::string& pseudonym) +{ + dn_removed = hasDisplayNameRemoved(id); + pseudonym = getPseudonym(id); + return hasPseudonym(id); +} + // static bool LGGContactSets::handleAddContactSetCallback(const LLSD& notification, const LLSD& response) { diff --git a/indra/newview/lggcontactsets.h b/indra/newview/lggcontactsets.h index fa326210e7..76d87cdc7a 100644 --- a/indra/newview/lggcontactsets.h +++ b/indra/newview/lggcontactsets.h @@ -72,6 +72,8 @@ public: bool hasDisplayNameRemoved(const LLUUID& friend_id); bool hasDisplayNameRemoved(uuid_vec_t ids); + bool checkCustomName(const LLUUID& id, bool& dn_removed, std::string& pseudonym); + string_vec_t getFriendSets(const LLUUID& friend_id); string_vec_t getAllContactSets(); diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 92ce80dfdc..2015a2d64c 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -6197,6 +6197,7 @@ void LLAppViewer::disconnectViewer() gInventory.getLibraryOwnerID()); } + LLAvatarNameCache::instance().setCustomNameCheckCallback(LLAvatarNameCache::custom_name_check_callback_t()); // Contact sets saveNameCache(); if (LLExperienceCache::instanceExists()) { diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 5aba427bc7..7f34d172aa 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -2504,8 +2504,12 @@ bool idle_startup() LLAvatarTracker::instance().addBuddyList(list); display_startup(); } - - LGGContactSets::getInstance()->loadFromDisk(); // [FS:CR] Load contact sets + + // Contact sets + LGGContactSets* cs_instance = LGGContactSets::getInstance(); + cs_instance->loadFromDisk(); + LLAvatarNameCache::instance().setCustomNameCheckCallback(boost::bind(&LGGContactSets::checkCustomName, cs_instance, _1, _2, _3)); + // bool show_hud = false; LLSD tutorial_setting = response["tutorial_setting"];