summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llappviewer.cpp36
-rw-r--r--indra/newview/llviewerdisplayname.cpp14
-rw-r--r--indra/newview/llviewerregion.cpp17
-rw-r--r--indra/newview/llviewerregion.h6
4 files changed, 52 insertions, 21 deletions
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index ac9672858d..e160951b91 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -3906,6 +3906,11 @@ void LLAppViewer::idleNameCache()
// deal with any queued name requests and replies.
gCacheName->processPending();
+ // Can't run the new cache until we have the list of capabilities
+ // for the agent region, and can therefore decide whether to use
+ // display names or fall back to the old name system.
+ if (!region->capabilitiesReceived()) return;
+
// Agent may have moved to a different region, so need to update cap URL
// for name lookups. Can't do this in the cap grant code, as caps are
// granted to neighbor regions before the main agent gets there. Can't
@@ -3914,21 +3919,26 @@ void LLAppViewer::idleNameCache()
std::string name_lookup_url;
name_lookup_url.reserve(128); // avoid a memory allocation below
name_lookup_url = region->getCapability("GetDisplayNames");
-
- // Ensure capability has been granted
- U32 url_size = name_lookup_url.size();
- if (url_size > 0)
- {
- // capabilities require URLs with slashes before query params:
- // https://<host>:<port>/cap/<uuid>/?ids=<blah>
- // but the caps are granted like:
- // https://<host>:<port>/cap/<uuid>
- if (name_lookup_url[url_size-1] != '/')
- {
- name_lookup_url += '/';
- }
+ if (!name_lookup_url.empty())
+ {
+ // we have support for display names, use it
+ U32 url_size = name_lookup_url.size();
+ // capabilities require URLs with slashes before query params:
+ // https://<host>:<port>/cap/<uuid>/?ids=<blah>
+ // but the caps are granted like:
+ // https://<host>:<port>/cap/<uuid>
+ if (url_size > 0 && name_lookup_url[url_size-1] != '/')
+ {
+ name_lookup_url += '/';
+ }
LLAvatarNameCache::setNameLookupURL(name_lookup_url);
}
+ else
+ {
+ // Display names not available on this region
+ LLAvatarNameCache::setNameLookupURL( std::string() );
+ }
+
LLAvatarNameCache::idle();
}
diff --git a/indra/newview/llviewerdisplayname.cpp b/indra/newview/llviewerdisplayname.cpp
index 1cfada48ad..8bed501c6e 100644
--- a/indra/newview/llviewerdisplayname.cpp
+++ b/indra/newview/llviewerdisplayname.cpp
@@ -120,20 +120,22 @@ class LLDisplayNameUpdate : public LLHTTPNode
{
LLSD body = input["body"];
LLUUID agent_id = body["agent_id"];
- std::string slid = body["sl_id"];
std::string old_display_name = body["old_display_name"];
- std::string new_display_name = body["new_display_name"];
+ // By convention this record is called "agent" in the People API
+ std::string name_data = body["agent"];
- // force re-request of this agent's name data
- LLAvatarNameCache::erase(agent_id);
+ // Inject the new name data into cache
+ LLAvatarName av_name;
+ av_name.fromLLSD( name_data );
+ LLAvatarNameCache::insert(agent_id, av_name);
// force name tag to update
LLVOAvatar::invalidateNameTag(agent_id);
LLSD args;
args["OLD_NAME"] = old_display_name;
- args["SLID"] = slid;
- args["NEW_NAME"] = new_display_name;
+ args["SLID"] = av_name.mSLID;
+ args["NEW_NAME"] = av_name.mDisplayName;
LLNotificationsUtil::add("DisplayNameUpdate", args);
}
};
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 502fc87e41..9e877bc1af 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -175,7 +175,9 @@ public:
mRegion->showReleaseNotes();
}
}
-
+
+ mRegion->setCapabilitiesReceived(true);
+
if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
{
LLStartUp::setStartupState( STATE_SEED_CAP_GRANTED );
@@ -232,7 +234,8 @@ LLViewerRegion::LLViewerRegion(const U64 &handle,
// LLCapabilityListener binds all the globals it expects to need at
// construction time.
mCapabilityListener(host.getString(), gMessageSystem, *this,
- gAgent.getID(), gAgent.getSessionID())
+ gAgent.getID(), gAgent.getSessionID()),
+ mCapabilitiesReceived(false)
{
mWidth = region_width_meters;
mOriginGlobal = from_region_handle(handle);
@@ -1557,6 +1560,16 @@ std::string LLViewerRegion::getCapability(const std::string& name) const
return iter->second;
}
+bool LLViewerRegion::capabilitiesReceived() const
+{
+ return mCapabilitiesReceived;
+}
+
+void LLViewerRegion::setCapabilitiesReceived(bool received)
+{
+ mCapabilitiesReceived = received;
+}
+
void LLViewerRegion::logActiveCapabilities() const
{
int count = 0;
diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h
index 49d0900f2a..5f6c754187 100644
--- a/indra/newview/llviewerregion.h
+++ b/indra/newview/llviewerregion.h
@@ -232,6 +232,11 @@ public:
void setCapability(const std::string& name, const std::string& url);
// implements LLCapabilityProvider
virtual std::string getCapability(const std::string& name) const;
+
+ // has region received its final (not seed) capability list?
+ bool capabilitiesReceived() const;
+ void setCapabilitiesReceived(bool received);
+
static bool isSpecialCapabilityName(const std::string &name);
void logActiveCapabilities() const;
@@ -412,6 +417,7 @@ private:
private:
bool mAlive; // can become false if circuit disconnects
+ bool mCapabilitiesReceived;
//spatial partitions for objects in this region
std::vector<LLSpatialPartition*> mObjectPartition;