diff options
author | Kim Alvefur <zash@zash.se> | 2016-04-28 23:34:19 +0200 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2016-04-28 23:34:19 +0200 |
commit | 4de2428b7b4c4f869d16c1b8f5701d9206665fd2 (patch) | |
tree | ed4af3dea95ce00ef28d0c47897cc5d96d1979bf /plugins/muc | |
parent | 8e308d19855c488503bca65fd170ef1969dcf9fc (diff) | |
download | prosody-4de2428b7b4c4f869d16c1b8f5701d9206665fd2.tar.gz prosody-4de2428b7b4c4f869d16c1b8f5701d9206665fd2.zip |
MUC: Include the very last message in serialized form to keep it across eviction and restore
Diffstat (limited to 'plugins/muc')
-rw-r--r-- | plugins/muc/muc.lib.lua | 12 |
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); |