origin = origin;
jid = real_jid;
});
+ module:fire_event("muc-room-created", {
+ room = self;
+ creator = dest_occupant;
+ stanza = stanza;
+ origin = origin;
+ });
return true;
end
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
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);
if not resource and type(data) == "string" then
-- bare jid: affiliation
room._affiliations[jid] = data;
- elseif host == room_host and node == room_name and resource then
+ elseif host == room_host and node == room_name and resource and type(data) == "table" then
-- full room jid: bare real jid and role
local bare_jid = data.bare_jid;
local occupant = occupant_lib.new(bare_jid, jid);
end
end
occupant_sessions[bare_jid] = nil;
- else
+ elseif type(data) == "table" and data.name then
-- full user jid: presence
local presence = st.deserialize(data);
local bare_jid = jid_bare(jid);