diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs | 60 |
1 files changed, 39 insertions, 21 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs index d09c669..77bc9d7 100644 --- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs | |||
@@ -55,18 +55,6 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
55 | 55 | ||
56 | lock (m_SceneList) | 56 | lock (m_SceneList) |
57 | { | 57 | { |
58 | if (m_SceneList.Count == 0) | ||
59 | { | ||
60 | IMessageTransferModule trans = scene.RequestModuleInterface<IMessageTransferModule>(); | ||
61 | if (trans == null) | ||
62 | { | ||
63 | enabled = false; | ||
64 | return; | ||
65 | } | ||
66 | |||
67 | trans.OnUndeliveredMessage += UndeliveredMessage; | ||
68 | } | ||
69 | |||
70 | if (!m_SceneList.Contains(scene)) | 58 | if (!m_SceneList.Contains(scene)) |
71 | m_SceneList.Add(scene); | 59 | m_SceneList.Add(scene); |
72 | 60 | ||
@@ -76,6 +64,28 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
76 | 64 | ||
77 | public void PostInitialise() | 65 | public void PostInitialise() |
78 | { | 66 | { |
67 | if (m_SceneList.Count == 0) | ||
68 | return; | ||
69 | |||
70 | IMessageTransferModule trans = m_SceneList[0].RequestModuleInterface<IMessageTransferModule>(); | ||
71 | if (trans == null) | ||
72 | { | ||
73 | enabled = false; | ||
74 | |||
75 | lock (m_SceneList) | ||
76 | { | ||
77 | foreach (Scene s in m_SceneList) | ||
78 | s.EventManager.OnNewClient -= OnNewClient; | ||
79 | |||
80 | m_SceneList.Clear(); | ||
81 | } | ||
82 | |||
83 | return; | ||
84 | } | ||
85 | |||
86 | trans.OnUndeliveredMessage += UndeliveredMessage; | ||
87 | |||
88 | m_log.Debug("[OFFLINE MESSAGING] Offline messages enabled"); | ||
79 | } | 89 | } |
80 | 90 | ||
81 | public string Name | 91 | public string Name |
@@ -115,16 +125,24 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
115 | 125 | ||
116 | private void UndeliveredMessage(GridInstantMessage im) | 126 | private void UndeliveredMessage(GridInstantMessage im) |
117 | { | 127 | { |
118 | IClientAPI client = FindClient(new UUID(im.toAgentID)); | 128 | if (im.offline != 0) |
119 | if (client == null) | 129 | { |
120 | return; | 130 | // TODO: Actually save it |
131 | |||
132 | if(im.dialog == (byte)InstantMessageDialog.MessageFromAgent) | ||
133 | { | ||
134 | IClientAPI client = FindClient(new UUID(im.fromAgentID)); | ||
135 | if (client == null) | ||
136 | return; | ||
121 | 137 | ||
122 | client.SendInstantMessage(new UUID(im.toAgentID), | 138 | client.SendInstantMessage(new UUID(im.fromAgentID), |
123 | "User is not logged in. "+ | 139 | "User is not logged in. "+ |
124 | "Message saved.", | 140 | "Message saved.", |
125 | new UUID(im.fromAgentID), "System", | 141 | new UUID(im.toAgentID), "System", |
126 | (byte)InstantMessageDialog.BusyAutoResponse, | 142 | (byte)InstantMessageDialog.BusyAutoResponse, |
127 | (uint)Util.UnixTimeSinceEpoch()); | 143 | (uint)Util.UnixTimeSinceEpoch()); |
144 | } | ||
145 | } | ||
128 | } | 146 | } |
129 | } | 147 | } |
130 | } | 148 | } |