Add "friends show cache <first-name> <last-name>" command for debugging purposes.
This adds a reverse lookup (name -> ID) to IUserManagement instead of hitting the UserAccountService directly.0.7.4.1
parent
445e8bc560
commit
12d3ea3029
|
@ -214,6 +214,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
|
|||
|
||||
public virtual void RegionLoaded(Scene scene)
|
||||
{
|
||||
scene.AddCommand(
|
||||
"Friends", this, "friends show cache",
|
||||
"friends show cache [<first-name> <last-name>]",
|
||||
"Show the friends cache for the given user",
|
||||
HandleFriendsShowCacheCommand);
|
||||
}
|
||||
|
||||
public void RemoveRegion(Scene scene)
|
||||
|
@ -890,7 +895,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
|
|||
/// Get friends from local cache only
|
||||
/// </summary>
|
||||
/// <param name="agentID"></param>
|
||||
/// <returns></returns>
|
||||
/// <returns>
|
||||
/// An empty array if the user has no friends or friends have not been cached.
|
||||
/// </returns>
|
||||
protected FriendInfo[] GetFriends(UUID agentID)
|
||||
{
|
||||
UserFriendData friendsData;
|
||||
|
@ -939,6 +946,17 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Are friends cached on this simulator for a particular user?
|
||||
/// </summary>
|
||||
/// <param name="userID"></param>
|
||||
/// <returns></returns>
|
||||
protected bool AreFriendsCached(UUID userID)
|
||||
{
|
||||
lock (m_Friends)
|
||||
return m_Friends.ContainsKey(userID);
|
||||
}
|
||||
|
||||
protected virtual bool StoreRights(UUID agentID, UUID friendID, int rights)
|
||||
{
|
||||
FriendsService.StoreFriend(agentID.ToString(), friendID.ToString(), rights);
|
||||
|
@ -964,5 +982,61 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
|
|||
}
|
||||
|
||||
#endregion
|
||||
|
||||
protected void HandleFriendsShowCacheCommand(string module, string[] cmd)
|
||||
{
|
||||
if (cmd.Length != 5)
|
||||
{
|
||||
MainConsole.Instance.OutputFormat("Usage: friends show cache [<first-name> <last-name>]");
|
||||
return;
|
||||
}
|
||||
|
||||
string firstName = cmd[3];
|
||||
string lastName = cmd[4];
|
||||
|
||||
IUserManagement umModule = m_Scenes[0].RequestModuleInterface<IUserManagement>();
|
||||
UUID userId = umModule.GetUserIdByName(firstName, lastName);
|
||||
|
||||
// UserAccount ua
|
||||
// = m_Scenes[0].UserAccountService.GetUserAccount(m_Scenes[0].RegionInfo.ScopeID, firstName, lastName);
|
||||
|
||||
if (userId == UUID.Zero)
|
||||
{
|
||||
MainConsole.Instance.OutputFormat("No such user as {0} {1}", firstName, lastName);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!AreFriendsCached(userId))
|
||||
{
|
||||
MainConsole.Instance.OutputFormat("No friends cached on this simulator for {0} {1}", firstName, lastName);
|
||||
return;
|
||||
}
|
||||
|
||||
MainConsole.Instance.OutputFormat("Cached friends for {0} {1}:", firstName, lastName);
|
||||
|
||||
MainConsole.Instance.OutputFormat("UUID\n");
|
||||
|
||||
FriendInfo[] friends = GetFriends(userId);
|
||||
|
||||
foreach (FriendInfo friend in friends)
|
||||
{
|
||||
// MainConsole.Instance.OutputFormat(friend.PrincipalID.ToString());
|
||||
|
||||
// string friendFirstName, friendLastName;
|
||||
//
|
||||
// UserAccount friendUa
|
||||
// = m_Scenes[0].UserAccountService.GetUserAccount(m_Scenes[0].RegionInfo.ScopeID, friend.PrincipalID);
|
||||
|
||||
UUID friendId;
|
||||
string friendName;
|
||||
|
||||
if (UUID.TryParse(friend.Friend, out friendId))
|
||||
friendName = umModule.GetUserName(friendId);
|
||||
else
|
||||
friendName = friend.Friend;
|
||||
|
||||
MainConsole.Instance.OutputFormat("{0} {1} {2}", friendName, friend.MyFlags, friend.TheirFlags);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -297,6 +297,35 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
|
|||
|
||||
#region IUserManagement
|
||||
|
||||
public UUID GetUserIdByName(string name)
|
||||
{
|
||||
string[] parts = name.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
|
||||
if (parts.Length < 2)
|
||||
throw new Exception("Name must have 2 components");
|
||||
|
||||
return GetUserIdByName(parts[0], parts[1]);
|
||||
}
|
||||
|
||||
public UUID GetUserIdByName(string firstName, string lastName)
|
||||
{
|
||||
// TODO: Optimize for reverse lookup if this gets used by non-console commands.
|
||||
lock (m_UserCache)
|
||||
{
|
||||
foreach (UserData user in m_UserCache.Values)
|
||||
{
|
||||
if (user.FirstName == firstName && user.LastName == lastName)
|
||||
return user.Id;
|
||||
}
|
||||
}
|
||||
|
||||
UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount(UUID.Zero, firstName, lastName);
|
||||
|
||||
if (account != null)
|
||||
return account.PrincipalID;
|
||||
|
||||
return UUID.Zero;
|
||||
}
|
||||
|
||||
public string GetUserName(UUID uuid)
|
||||
{
|
||||
string[] names = GetUserNames(uuid);
|
||||
|
|
|
@ -15,6 +15,21 @@ namespace OpenSim.Region.Framework.Interfaces
|
|||
string GetUserUUI(UUID uuid);
|
||||
string GetUserServerURL(UUID uuid, string serverType);
|
||||
|
||||
/// <summary>
|
||||
/// Get user ID by the given name.
|
||||
/// </summary>
|
||||
/// <param name="name"></param>
|
||||
/// <returns>UUID.Zero if no user with that name is found or if the name is "Unknown User"</returns>
|
||||
UUID GetUserIdByName(string name);
|
||||
|
||||
/// <summary>
|
||||
/// Get user ID by the given name.
|
||||
/// </summary>
|
||||
/// <param name="firstName"></param>
|
||||
/// <param name="lastName"></param>
|
||||
/// <returns>UUID.Zero if no user with that name is found or if the name is "Unknown User"</returns>
|
||||
UUID GetUserIdByName(string firstName, string lastName);
|
||||
|
||||
/// <summary>
|
||||
/// Add a user.
|
||||
/// </summary>
|
||||
|
|
Loading…
Reference in New Issue