aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2016-04-28 23:34:19 +0200
committerKim Alvefur <zash@zash.se>2016-04-28 23:34:19 +0200
commit4de2428b7b4c4f869d16c1b8f5701d9206665fd2 (patch)
treeed4af3dea95ce00ef28d0c47897cc5d96d1979bf
parent8e308d19855c488503bca65fd170ef1969dcf9fc (diff)
downloadprosody-4de2428b7b4c4f869d16c1b8f5701d9206665fd2.tar.gz
prosody-4de2428b7b4c4f869d16c1b8f5701d9206665fd2.zip
MUC: Include the very last message in serialized form to keep it across eviction and restore
-rw-r--r--plugins/muc/muc.lib.lua12
1 files changed, 12 insertions, 0 deletions
diff --git a/plugins/muc/muc.lib.lua b/plugins/muc/muc.lib.lua
index 337d2ae4..071f1f8b 100644
--- a/plugins/muc/muc.lib.lua
+++ b/plugins/muc/muc.lib.lua
@@ -1322,6 +1322,11 @@ function room_mt:freeze(live)
frozen[jid] = st.preserialize(presence);
end
end
+ local history = self._history;
+ if history then
+ frozen._last_message = st.preserialize(history[#history].stanza);
+ frozen._last_message_at = history[#history].timestamp;
+ end
end
return frozen;
end
@@ -1337,6 +1342,13 @@ function _M.restore_room(frozen)
local room_jid = frozen._jid;
local room = _M.new_room(room_jid, frozen._data);
+ if frozen._last_message and frozen._last_message_at then
+ room._history = {
+ { stanza = st.deserialize(frozen._last_message),
+ timestamp = frozen._last_message_at, },
+ };
+ end
+
local occupants = {};
local occupant_sessions = {};
local room_name, room_host = jid_split(room_jid);