Allow update of stored entries within User Management Module-this is needed for proper work of HG friends.

See http://opensimulator.org/mantis/view.php?id=5847
avinationmerge
Bo Iwu 2012-01-12 17:43:20 +01:00 committed by Melanie
parent 8bdd80abfa
commit 6214e6a217
1 changed files with 52 additions and 48 deletions

View File

@ -423,58 +423,62 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
AddUser(uuid, profileURL + ";" + first + " " + last); AddUser(uuid, profileURL + ";" + first + " " + last);
} }
public void AddUser(UUID id, string creatorData) public void AddUser (UUID id, string creatorData)
{ {
lock (m_UserCache) UserData oldUser;
{ //lock the whole block - prevent concurrent update
if (m_UserCache.ContainsKey(id)) lock (m_UserCache) {
m_UserCache.TryGetValue (id, out oldUser);
if (oldUser != null) {
if (creatorData == null || creatorData == String.Empty) {
//ignore updates without creator data
return; return;
} }
//try update unknown users
// m_log.DebugFormat("[USER MANAGEMENT MODULE]: Adding user with id {0}, craetorData {1}", id, creatorData); //and creator's home URL's
if ((oldUser.FirstName == "Unknown" && !creatorData.Contains ("Unknown")) || (oldUser.HomeURL != null && !creatorData.StartsWith (oldUser.HomeURL))) {
UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount(m_Scenes[0].RegionInfo.ScopeID, id); m_UserCache.Remove (id);
// m_log.DebugFormat("[USER MANAGEMENT MODULE]: Re-adding user with id {0}, creatorData [{1}] and old HomeURL {2}", id, creatorData,oldUser.HomeURL);
if (account != null) } else {
{ //we have already a valid user within the cache
AddUser(id, account.FirstName, account.LastName); return;
} }
else }
{ // m_log.DebugFormat("[USER MANAGEMENT MODULE]: Adding user with id {0}, creatorData {1}", id, creatorData);
UserData user = new UserData();
UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount (m_Scenes[0].RegionInfo.ScopeID, id);
if (account != null) {
AddUser (id, account.FirstName, account.LastName);
} else {
UserData user = new UserData ();
user.Id = id; user.Id = id;
user.Flags = -1; user.Flags = -1;
user.Created = -1; user.Created = -1;
if (creatorData != null && creatorData != string.Empty) if (creatorData != null && creatorData != string.Empty) {
{
//creatorData = <endpoint>;<name> //creatorData = <endpoint>;<name>
string[] parts = creatorData.Split(';'); string[] parts = creatorData.Split (';');
if (parts.Length >= 1) if (parts.Length >= 1) {
{
user.HomeURL = parts[0]; user.HomeURL = parts[0];
try try {
{ Uri uri = new Uri (parts[0]);
Uri uri = new Uri(parts[0]);
user.LastName = "@" + uri.Authority; user.LastName = "@" + uri.Authority;
} } catch (UriFormatException) {
catch (UriFormatException) m_log.DebugFormat ("[SCENE]: Unable to parse Uri {0}", parts[0]);
{
m_log.DebugFormat("[SCENE]: Unable to parse Uri {0}", parts[0]);
user.LastName = "@unknown"; user.LastName = "@unknown";
} }
} }
if (parts.Length >= 2) if (parts.Length >= 2)
user.FirstName = parts[1].Replace(' ', '.'); user.FirstName = parts[1].Replace (' ', '.');
} } else {
else
{
user.FirstName = "Unknown"; user.FirstName = "Unknown";
user.LastName = "User"; user.LastName = "User";
} }
AddUserInternal(user); AddUserInternal (user);
}
} }
} }