aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Data/Null/NullFriendsData.cs10
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs15
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Friends/Tests/FriendModuleTests.cs21
-rw-r--r--OpenSim/Region/Framework/Interfaces/IFriendsModule.cs14
4 files changed, 53 insertions, 7 deletions
diff --git a/OpenSim/Data/Null/NullFriendsData.cs b/OpenSim/Data/Null/NullFriendsData.cs
index d90788a..0a4b242 100644
--- a/OpenSim/Data/Null/NullFriendsData.cs
+++ b/OpenSim/Data/Null/NullFriendsData.cs
@@ -56,13 +56,21 @@ namespace OpenSim.Data.Null
56 /// <returns></returns> 56 /// <returns></returns>
57 public FriendsData[] GetFriends(string userID) 57 public FriendsData[] GetFriends(string userID)
58 { 58 {
59 List<FriendsData> lst = m_Data.FindAll(delegate (FriendsData fdata) 59 List<FriendsData> lst = m_Data.FindAll(fdata =>
60 { 60 {
61 return fdata.PrincipalID == userID.ToString(); 61 return fdata.PrincipalID == userID.ToString();
62 }); 62 });
63 63
64 if (lst != null) 64 if (lst != null)
65 {
66 lst.ForEach(f =>
67 {
68 FriendsData f2 = m_Data.Find(candidateF2 => f.Friend == candidateF2.PrincipalID);
69 if (f2 != null) { f.Data["TheirFlags"] = f2.Data["Flags"]; }
70 });
71
65 return lst.ToArray(); 72 return lst.ToArray();
73 }
66 74
67 return new FriendsData[0]; 75 return new FriendsData[0];
68 } 76 }
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs
index 28a2f73..f4281e5 100644
--- a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs
@@ -576,9 +576,14 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
576 576
577 private void OnApproveFriendRequest(IClientAPI client, UUID agentID, UUID friendID, List<UUID> callingCardFolders) 577 private void OnApproveFriendRequest(IClientAPI client, UUID agentID, UUID friendID, List<UUID> callingCardFolders)
578 { 578 {
579 m_log.DebugFormat("[FRIENDS]: {0} accepted friendship from {1}", agentID, friendID); 579 m_log.DebugFormat("[FRIENDS]: {0} accepted friendship from {1}", client.AgentId, friendID);
580 580
581 StoreFriendships(agentID, friendID); 581 AddFriend(client, friendID);
582 }
583
584 public void AddFriend(IClientAPI client, UUID friendID)
585 {
586 StoreFriendships(client.AgentId, friendID);
582 587
583 // Update the local cache 588 // Update the local cache
584 RefetchFriends(client); 589 RefetchFriends(client);
@@ -588,7 +593,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
588 // 593 //
589 594
590 // Try Local 595 // Try Local
591 if (LocalFriendshipApproved(agentID, client.Name, friendID)) 596 if (LocalFriendshipApproved(client.AgentId, client.Name, friendID))
592 { 597 {
593 client.SendAgentOnline(new UUID[] { friendID }); 598 client.SendAgentOnline(new UUID[] { friendID });
594 return; 599 return;
@@ -602,7 +607,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
602 if (friendSession != null) 607 if (friendSession != null)
603 { 608 {
604 GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); 609 GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID);
605 m_FriendsSimConnector.FriendshipApproved(region, agentID, client.Name, friendID); 610 m_FriendsSimConnector.FriendshipApproved(region, client.AgentId, client.Name, friendID);
606 client.SendAgentOnline(new UUID[] { friendID }); 611 client.SendAgentOnline(new UUID[] { friendID });
607 } 612 }
608 } 613 }
@@ -869,7 +874,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
869 } 874 }
870 875
871 /// <summary> 876 /// <summary>
872 /// Update loca cache only 877 /// Update local cache only
873 /// </summary> 878 /// </summary>
874 /// <param name="userID"></param> 879 /// <param name="userID"></param>
875 /// <param name="friendID"></param> 880 /// <param name="friendID"></param>
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/Tests/FriendModuleTests.cs b/OpenSim/Region/CoreModules/Avatar/Friends/Tests/FriendModuleTests.cs
index b52093a..3ad691a 100644
--- a/OpenSim/Region/CoreModules/Avatar/Friends/Tests/FriendModuleTests.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Friends/Tests/FriendModuleTests.cs
@@ -70,9 +70,28 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends.Tests
70 UUID userId = TestHelpers.ParseTail(0x1); 70 UUID userId = TestHelpers.ParseTail(0x1);
71 71
72 ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, userId); 72 ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, userId);
73 73
74 Assert.That(((TestClient)sp.ControllingClient).OfflineNotificationsReceived.Count, Is.EqualTo(0)); 74 Assert.That(((TestClient)sp.ControllingClient).OfflineNotificationsReceived.Count, Is.EqualTo(0));
75 Assert.That(((TestClient)sp.ControllingClient).OnlineNotificationsReceived.Count, Is.EqualTo(0)); 75 Assert.That(((TestClient)sp.ControllingClient).OnlineNotificationsReceived.Count, Is.EqualTo(0));
76 } 76 }
77
78 [Test]
79 public void TestAddFriendWhileOnline()
80 {
81 TestHelpers.InMethod();
82// log4net.Config.XmlConfigurator.Configure();
83
84 UUID userId = TestHelpers.ParseTail(0x1);
85 UUID user2Id = TestHelpers.ParseTail(0x2);
86
87 ScenePresence sp = SceneHelpers.AddScenePresence(m_scene, userId);
88 ScenePresence sp2 = SceneHelpers.AddScenePresence(m_scene, user2Id);
89
90 // This friendship is currently only one-way, which might be pathalogical in Second Life.
91 m_fm.AddFriend(sp.ControllingClient, user2Id);
92
93 Assert.That(((TestClient)sp.ControllingClient).OfflineNotificationsReceived.Count, Is.EqualTo(0));
94 Assert.That(((TestClient)sp.ControllingClient).OnlineNotificationsReceived.Count, Is.EqualTo(1));
95 }
77 } 96 }
78} \ No newline at end of file 97} \ No newline at end of file
diff --git a/OpenSim/Region/Framework/Interfaces/IFriendsModule.cs b/OpenSim/Region/Framework/Interfaces/IFriendsModule.cs
index d4a6857..8143164 100644
--- a/OpenSim/Region/Framework/Interfaces/IFriendsModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IFriendsModule.cs
@@ -33,6 +33,20 @@ namespace OpenSim.Region.Framework.Interfaces
33{ 33{
34 public interface IFriendsModule 34 public interface IFriendsModule
35 { 35 {
36 /// <summary>
37 /// Add a friend for the given user.
38 /// </summary>
39 /// <remarks>
40 /// This is a one-way friendship. To make a two way friendship you will need to call this again with the
41 /// client and friend reversed.
42 ///
43 /// Ultimately, it would be more useful to take in a user account here rather than having to have a user
44 /// present in the scene.
45 /// </remarks>
46 /// <param name="client"></param>
47 /// <param name="friendID"></param>
48 void AddFriend(IClientAPI client, UUID friendID);
49
36 uint GetFriendPerms(UUID PrincipalID, UUID FriendID); 50 uint GetFriendPerms(UUID PrincipalID, UUID FriendID);
37 bool SendFriendsOnlineIfNeeded(IClientAPI client); 51 bool SendFriendsOnlineIfNeeded(IClientAPI client);
38 } 52 }