From 08fcf958c278c703a790fd964a5af74425bcf67d Mon Sep 17 00:00:00 2001
From: Melanie
Date: Wed, 2 Nov 2011 23:50:47 +0000
Subject: Port the Avination offline messaging system to Core

---
 .../CoreModules/Avatar/Friends/FriendsModule.cs    |  4 +-
 .../Avatar/InstantMessage/OfflineMessageModule.cs  | 52 ++++++++++++++--------
 OpenSim/Region/Framework/Scenes/Scene.cs           |  2 +-
 .../Avatar/XmlRpcGroups/GroupsModule.cs            |  2 +-
 4 files changed, 37 insertions(+), 23 deletions(-)

(limited to 'OpenSim')

diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs
index 1da9aab..c952ebf 100644
--- a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs
@@ -356,12 +356,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
                 PresenceInfo[] presences = PresenceService.GetAgents(new string[] { fid });
                 if (presences != null && presences.Length > 0)
                     presence = presences[0];
-                if (presence != null)
-                    im.offline = 0;
+                im.offline = 0;
 
                 im.fromAgentID = fromAgentID.Guid;
                 im.fromAgentName = firstname + " " + lastname;
-                im.offline = (byte)((presence == null) ? 1 : 0);
                 im.imSessionID = im.fromAgentID;
                 im.message = FriendshipMessage(fid);
 
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs
index 8d055d4..de25048 100644
--- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs
@@ -201,26 +201,42 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
 
         private void UndeliveredMessage(GridInstantMessage im)
         {
-            if ((im.offline != 0)
-                && (!im.fromGroup || (im.fromGroup && m_ForwardOfflineGroupMessages)))
+            if (im.dialog != (byte)InstantMessageDialog.MessageFromObject &&
+                im.dialog != (byte)InstantMessageDialog.MessageFromAgent &&
+                im.dialog != (byte)InstantMessageDialog.GroupNotice &&
+                im.dialog != (byte)InstantMessageDialog.GroupInvitation &&
+                im.dialog != (byte)InstantMessageDialog.InventoryOffered)
             {
-                bool success = SynchronousRestObjectRequester.MakeRequest<GridInstantMessage, bool>(
-                        "POST", m_RestURL+"/SaveMessage/", im);
+                return;
+            }
 
-                if (im.dialog == (byte)InstantMessageDialog.MessageFromAgent)
-                {
-                    IClientAPI client = FindClient(new UUID(im.fromAgentID));
-                    if (client == null)
-                        return;
-
-                    client.SendInstantMessage(new GridInstantMessage(
-                            null, new UUID(im.toAgentID),
-                            "System", new UUID(im.fromAgentID),
-                            (byte)InstantMessageDialog.MessageFromAgent,
-                            "User is not logged in. "+
-                            (success ? "Message saved." : "Message not saved"),
-                            false, new Vector3()));
-                }
+            if (!m_ForwardOfflineGroupMessages)
+            {
+                if (im.dialog == (byte)InstantMessageDialog.GroupNotice ||
+                    im.dialog != (byte)InstantMessageDialog.GroupInvitation)
+                    return;
+            }
+
+            Scene scene = FindScene(new UUID(im.fromAgentID));
+            if (scene == null)
+                scene = m_SceneList[0];
+
+            bool success = SynchronousRestObjectRequester.MakeRequest<GridInstantMessage, bool>(
+                    "POST", m_RestURL+"/SaveMessage/", im);
+
+            if (im.dialog == (byte)InstantMessageDialog.MessageFromAgent)
+            {
+                IClientAPI client = FindClient(new UUID(im.fromAgentID));
+                if (client == null)
+                    return;
+
+                client.SendInstantMessage(new GridInstantMessage(
+                        null, new UUID(im.toAgentID),
+                        "System", new UUID(im.fromAgentID),
+                        (byte)InstantMessageDialog.MessageFromAgent,
+                        "User is not logged in. "+
+                        (success ? "Message saved." : "Message not saved"),
+                        false, new Vector3()));
             }
         }
     }
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index f012d72..dff43fd 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -1494,7 +1494,7 @@ namespace OpenSim.Region.Framework.Scenes
                     msg.fromAgentName = "Server";
                     msg.dialog = (byte)19; // Object msg
                     msg.fromGroup = false;
-                    msg.offline = (byte)1;
+                    msg.offline = (byte)0;
                     msg.ParentEstateID = RegionInfo.EstateSettings.ParentEstateID;
                     msg.Position = Vector3.Zero;
                     msg.RegionID = RegionInfo.RegionID.Guid;
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
index b2c0f48..d452905 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
@@ -881,7 +881,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
             msg.dialog = dialog;
             // msg.dialog = (byte)OpenMetaverse.InstantMessageDialog.GroupNotice;
             msg.fromGroup = true;
-            msg.offline = (byte)1; // Allow this message to be stored for offline use
+            msg.offline = (byte)0;
             msg.ParentEstateID = 0;
             msg.Position = Vector3.Zero;
             msg.RegionID = UUID.Zero.Guid;
-- 
cgit v1.1