Software /
code /
prosody
Changeset
7371:d5ba0dec0c95
MUC: Cache public rooms and their names to speed up disco#items
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 18 Apr 2016 19:19:33 +0200 |
parents | 7370:0ebc7ff1fff5 |
children | 7372:b2d7e04eb922 |
files | plugins/muc/mod_muc.lua |
diffstat | 1 files changed, 15 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/plugins/muc/mod_muc.lua Mon Apr 18 19:18:37 2016 +0200 +++ b/plugins/muc/mod_muc.lua Mon Apr 18 19:19:33 2016 +0200 @@ -95,9 +95,12 @@ local persistent_rooms = module:open_store("persistent", "map"); local room_configs = module:open_store("config"); +local room_items_cache = {}; + local function room_save(room, forced) 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 persistent_rooms:set(nil, room.jid, true); local data = room:freeze(forced); @@ -147,6 +150,7 @@ module:log("debug", "Deleting %s", room); room_configs:set(jid_split(room.jid), nil); persistent_rooms:set(nil, room.jid, nil); + room_items_cache[room.jid] = nil; end function module.unload() @@ -191,9 +195,17 @@ module:hook("host-disco-items", function(event) local reply = event.reply; module:log("debug", "host-disco-items called"); - for room in each_room() do - if not room:get_hidden() then - reply:tag("item", {jid=room.jid, name=room:get_name()}):up(); + if next(room_items_cache) ~= nil then + for jid, room_name in pairs(room_items_cache) do + reply:tag("item", { jid = jid, name = room_name }):up(); + end + else + for room in each_room() do + if not room:get_hidden() then + local jid, room_name = room.jid, room:get_name(); + room_items_cache[jid] = name; + reply:tag("item", { jid = jid, name = room_name }):up(); + end end end end);