From 6214e6a217cfe206e127739b141bdcceb253c98d Mon Sep 17 00:00:00 2001 From: Bo Iwu Date: Thu, 12 Jan 2012 17:43:20 +0100 Subject: 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 --- .../UserManagement/UserManagementModule.cs | 100 +++++++++++---------- 1 file changed, 52 insertions(+), 48 deletions(-) (limited to 'OpenSim/Region/CoreModules') diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs index 37292d6..2ad30a0 100644 --- a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs +++ b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs @@ -423,58 +423,62 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement AddUser(uuid, profileURL + ";" + first + " " + last); } - public void AddUser(UUID id, string creatorData) + public void AddUser (UUID id, string creatorData) { - lock (m_UserCache) - { - if (m_UserCache.ContainsKey(id)) - return; - } - -// m_log.DebugFormat("[USER MANAGEMENT MODULE]: Adding user with id {0}, craetorData {1}", id, creatorData); - - 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.Flags = -1; - user.Created = -1; - - if (creatorData != null && creatorData != string.Empty) - { - //creatorData = ; - - string[] parts = creatorData.Split(';'); - if (parts.Length >= 1) - { - user.HomeURL = parts[0]; - try - { - Uri uri = new Uri(parts[0]); - user.LastName = "@" + uri.Authority; - } - catch (UriFormatException) - { - m_log.DebugFormat("[SCENE]: Unable to parse Uri {0}", parts[0]); - user.LastName = "@unknown"; - } + UserData oldUser; + //lock the whole block - prevent concurrent update + lock (m_UserCache) { + m_UserCache.TryGetValue (id, out oldUser); + if (oldUser != null) { + if (creatorData == null || creatorData == String.Empty) { + //ignore updates without creator data + return; + } + //try update unknown users + //and creator's home URL's + if ((oldUser.FirstName == "Unknown" && !creatorData.Contains ("Unknown")) || (oldUser.HomeURL != null && !creatorData.StartsWith (oldUser.HomeURL))) { + 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); + } else { + //we have already a valid user within the cache + return; } - if (parts.Length >= 2) - user.FirstName = parts[1].Replace(' ', '.'); } - else - { - user.FirstName = "Unknown"; - user.LastName = "User"; +// m_log.DebugFormat("[USER MANAGEMENT MODULE]: Adding user with id {0}, creatorData {1}", id, creatorData); + + 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.Flags = -1; + user.Created = -1; + + if (creatorData != null && creatorData != string.Empty) { + //creatorData = ; + + string[] parts = creatorData.Split (';'); + if (parts.Length >= 1) { + user.HomeURL = parts[0]; + try { + Uri uri = new Uri (parts[0]); + user.LastName = "@" + uri.Authority; + } catch (UriFormatException) { + m_log.DebugFormat ("[SCENE]: Unable to parse Uri {0}", parts[0]); + user.LastName = "@unknown"; + } + } + if (parts.Length >= 2) + user.FirstName = parts[1].Replace (' ', '.'); + } else { + user.FirstName = "Unknown"; + user.LastName = "User"; + } + + AddUserInternal (user); } - - AddUserInternal(user); } } -- cgit v1.1 From cadd645076eacd6bd0b70a665ed3f5157cd6e5d3 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Thu, 12 Jan 2012 10:22:52 -0800 Subject: Renamed one var and deleted commented code. No functional changes. --- .../UserManagement/UserManagementModule.cs | 35 ++-------------------- 1 file changed, 2 insertions(+), 33 deletions(-) (limited to 'OpenSim/Region/CoreModules') diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs index 2ad30a0..80ab30c 100644 --- a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs +++ b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs @@ -413,14 +413,13 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement user.Id = uuid; user.FirstName = first; user.LastName = last; - // user.ProfileURL = we should initialize this to the default AddUserInternal(user); } - public void AddUser(UUID uuid, string first, string last, string profileURL) + public void AddUser(UUID uuid, string first, string last, string homeURL) { - AddUser(uuid, profileURL + ";" + first + " " + last); + AddUser(uuid, homeURL + ";" + first + " " + last); } public void AddUser (UUID id, string creatorData) @@ -492,36 +491,6 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement // user.Id, user.FirstName, user.LastName, user.HomeURL); } - //public void AddUser(UUID uuid, string userData) - //{ - // if (m_UserCache.ContainsKey(uuid)) - // return; - - // UserData user = new UserData(); - // user.Id = uuid; - - // // userData = ; - // string[] parts = userData.Split(';'); - // if (parts.Length >= 1) - // user.ProfileURL = parts[0].Trim(); - // if (parts.Length >= 2) - // { - // string[] name = parts[1].Trim().Split(' '); - // if (name.Length >= 1) - // user.FirstName = name[0]; - // if (name.Length >= 2) - // user.LastName = name[1]; - // else - // user.LastName = "?"; - // } - - // lock (m_UserCache) - // m_UserCache.Add(uuid, user); - - // m_log.DebugFormat("[USER MANAGEMENT MODULE]: Added user {0} {1} {2} {3}", user.Id, user.FirstName, user.LastName, user.ProfileURL); - - //} - public bool IsLocalGridUser(UUID uuid) { UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount(m_Scenes[0].RegionInfo.ScopeID, uuid); -- cgit v1.1