local room_items_cache = {};
-local function room_save(room, forced)
+local function room_save(room, forced, savestate)
local node = jid_split(room.jid);
local is_persistent = persistent.get(room);
room_items_cache[room.jid] = room:get_public() and room:get_name() or nil;
- if is_persistent or forced then
+ if is_persistent or savestate then
persistent_rooms:set(nil, room.jid, true);
- local data = room:freeze(forced);
+ local data = room:freeze(savestate);
return room_configs:set(node, data);
- else
+ elseif forced then
persistent_rooms:set(nil, room.jid, nil);
return room_configs:set(node, nil);
end
local rooms = cache.new(module:get_option_number("muc_room_cache_size", 100), function (_, room)
module:log("debug", "%s evicted", room);
- room_save(room, true); -- Force to disk
+ room_save(room, nil, true); -- Force to disk
end);
-- Automatically destroy empty non-persistent rooms
function module.unload()
for room in rooms:values() do
- room:save(true);
+ room:save(nil, true);
forget_room(room);
end
end
function shutdown_component()
for room in each_room(true) do
- room:save(true);
+ room:save(nil, true);
end
end
module:hook_global("server-stopping", shutdown_component);
end
event.field, event.value = nil, nil;
- self:save();
+ self:save(true);
origin.send(st.reply(stanza));
if next(event.status_codes) then
else
success, errtype, err = nil, "cancel", "bad-request";
end
- self:save();
+ self:save(true);
if not success then
origin.send(st.error_reply(stanza, errtype, err));
else
end
end
- self:save();
+ self:save(true);
module:fire_event("muc-set-affiliation", {
room = self;