diff options
-rw-r--r-- | indra/llmessage/llavatarnamecache.cpp | 87 | ||||
-rw-r--r-- | indra/llmessage/llavatarnamecache.h | 19 | ||||
-rw-r--r-- | indra/newview/llstartup.cpp | 3 | ||||
-rw-r--r-- | indra/newview/llviewerregion.cpp | 16 |
4 files changed, 35 insertions, 90 deletions
diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp index bb1f6fdb3a..8268624b84 100644 --- a/indra/llmessage/llavatarnamecache.cpp +++ b/indra/llmessage/llavatarnamecache.cpp @@ -50,10 +50,9 @@ namespace LLAvatarNameCache // Base lookup URL for name service. // On simulator, loaded from indra.xml - // On viewer, sent down from login.cgi - // from login.cgi - // Includes the trailing slash, like "http://pdp60.lindenlab.com:8000/" - std::string sNameServiceURL; + // On viewer, usually a simulator capability (at People API team's request) + // Includes the trailing slash, like "http://pdp60.lindenlab.com:8000/agents/" + std::string sNameLookupURL; // accumulated agent IDs for next query against service typedef std::set<LLUUID> ask_queue_t; @@ -155,7 +154,7 @@ void LLAvatarNameCache::processNameFromService(const LLSD& row) LLAvatarName av_name; av_name.mSLID = row["sl_id"].asString(); av_name.mDisplayName = row["display_name"].asString(); - //av_name.mIsDisplayNameDefault = row["is_display_name_default"].asBoolean(); + av_name.mIsDisplayNameDefault = row["is_display_name_default"].asBoolean(); U32 now = (U32)LLFrameTimer::getTotalSeconds(); S32 seconds_until_expires = row["seconds_until_display_name_expires"].asInteger(); @@ -173,23 +172,6 @@ void LLAvatarNameCache::processNameFromService(const LLSD& row) av_name.mDisplayName = av_name.mSLID; } - // HACK: Legacy users have '.' in their SLID - // JAMESDEBUG TODO: change to using is_display_name_default once that works - std::string mangled_name = av_name.mDisplayName; - for (U32 i = 0; i < mangled_name.size(); i++) - { - char c = mangled_name[i]; - if (c == ' ') - { - mangled_name[i] = '.'; - } - else - { - mangled_name[i] = tolower(c); - } - } - av_name.mIsDisplayNameDefault = (mangled_name == av_name.mSLID); - // add to cache LLUUID agent_id = row["id"].asUUID(); sCache[agent_id] = av_name; @@ -227,8 +209,8 @@ void LLAvatarNameCache::requestNames() if (url.empty()) { // ...starting new request - url += sNameServiceURL; - url += "agents/?ids="; + url += sNameLookupURL; + url += "?ids="; } else { @@ -253,9 +235,8 @@ void LLAvatarNameCache::requestNames() } } -void LLAvatarNameCache::initClass(const std::string& name_service_url) +void LLAvatarNameCache::initClass() { - setNameServiceURL(name_service_url); } void LLAvatarNameCache::cleanupClass() @@ -270,9 +251,9 @@ void LLAvatarNameCache::exportFile(std::ostream& ostr) { } -void LLAvatarNameCache::setNameServiceURL(const std::string& name_service_url) +void LLAvatarNameCache::setNameLookupURL(const std::string& name_lookup_url) { - sNameServiceURL = name_service_url; + sNameLookupURL = name_lookup_url; } void LLAvatarNameCache::idle() @@ -292,6 +273,12 @@ void LLAvatarNameCache::idle() eraseExpired(); } + if (sNameLookupURL.empty()) + { + // ...viewer has not yet received capability from region + return; + } + if (sAskQueue.empty()) { return; @@ -392,50 +379,6 @@ void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot) } } -// JAMESDEBUG TODO: Eliminate and only route changes through simulator -class LLSetNameResponder : public LLHTTPClient::Responder -{ -public: - LLUUID mAgentID; - LLAvatarNameCache::set_name_signal_t mSignal; - - LLSetNameResponder(const LLUUID& agent_id, - const LLAvatarNameCache::set_name_slot_t& slot) - : mAgentID(agent_id), - mSignal() - { - mSignal.connect(slot); - } - - /*virtual*/ void result(const LLSD& content) - { - // force re-fetch - LLAvatarNameCache::sCache.erase(mAgentID); - - mSignal(true, "", content); - } - - /*virtual*/ void error(U32 status, const std::string& reason) - { - llinfos << "LLSetNameResponder failed " << status - << " reason " << reason << llendl; - - mSignal(false, reason, LLSD()); - } -}; - -// JAMESDEBUG TODO: Eliminate and only route changes through simulator -void LLAvatarNameCache::setDisplayName(const LLUUID& agent_id, - const std::string& display_name, - const set_name_slot_t& slot) -{ - LLSD body; - body["display_name"] = display_name; - - std::string url = sNameServiceURL + "agent/"; - url += agent_id.asString(); - LLHTTPClient::post(url, body, new LLSetNameResponder(agent_id, slot)); -} void LLAvatarNameCache::toggleDisplayNames() { diff --git a/indra/llmessage/llavatarnamecache.h b/indra/llmessage/llavatarnamecache.h index a4e101899a..111e56433b 100644 --- a/indra/llmessage/llavatarnamecache.h +++ b/indra/llmessage/llavatarnamecache.h @@ -42,13 +42,14 @@ class LLUUID; namespace LLAvatarNameCache { - void initClass(const std::string& name_service_url); + void initClass(); void cleanupClass(); void importFile(std::istream& istr); void exportFile(std::ostream& ostr); - void setNameServiceURL(const std::string& name_service_url); + // On the viewer, usually a simulator capabilitity + void setNameLookupURL(const std::string& name_lookup_url); // Periodically makes a batch request for display names not already in // cache. Call once per frame. @@ -68,20 +69,6 @@ namespace LLAvatarNameCache // If name information is in cache, callback will be called immediately. void get(const LLUUID& agent_id, callback_slot_t slot); - // JAMESDEBUG TODO: remove code to set display name, handle in - // application layer because it's different for client and server - - // Callback types for setDisplayName() below - typedef boost::signals2::signal< - void (bool success, const std::string& reason, const LLSD& content)> - set_name_signal_t; - typedef set_name_signal_t::slot_type set_name_slot_t; - - // Sends an update to the server to change a display name - // and calls back the application layer when done - void setDisplayName(const LLUUID& agent_id, const std::string& display_name, - const set_name_slot_t& slot); - // HACK: turn display names on and off void toggleDisplayNames(); bool useDisplayNames(); diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 8f5ad63cc3..18792950eb 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -2772,8 +2772,7 @@ void LLStartUp::initNameCache() // Load stored cache if possible LLAppViewer::instance()->loadNameCache(); - // JAMESDEBUG TODO: won't need service url here, will use capability - LLAvatarNameCache::initClass("http://pdp60.lindenlab.com:8000/"); + LLAvatarNameCache::initClass(); } void LLStartUp::cleanupNameCache() diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 8f43b6bcf7..2b907ee24a 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -34,7 +34,9 @@ #include "llviewerregion.h" +// linden libraries #include "indra_constants.h" +#include "llavatarnamecache.h" // name lookup cap url #include "llfloaterreg.h" #include "llmath.h" #include "llhttpclient.h" @@ -173,6 +175,19 @@ public: mRegion->showReleaseNotes(); } } + + // Avatar name lookup library needs to know who to ask + std::string name_lookup_url = mRegion->getCapability("GetDisplayNames"); + // capabilities require URLs with slashes before query params, like: + // https://<host>:<port>/cap/<uuid>/?ids=<blah> + // but the caps are granted like: + // https://<host>:<port>/cap/<uuid> + U32 url_size = name_lookup_url.size(); + if (url_size > 0 && name_lookup_url[url_size-1] != '/') + { + name_lookup_url += '/'; + } + LLAvatarNameCache::setNameLookupURL(name_lookup_url); if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState()) { @@ -1474,6 +1489,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url) capabilityNames.append("ObjectMediaNavigate"); capabilityNames.append("FetchLib"); capabilityNames.append("FetchLibDescendents"); + capabilityNames.append("GetDisplayNames"); capabilityNames.append("GetTexture"); capabilityNames.append("GroupProposalBallot"); capabilityNames.append("HomeLocation"); |