Mercurial > prosody-hg
comparison plugins/muc/mod_muc.lua @ 5500:eeea0eb2602a
mod_auth_internal_hashed, mod_auth_internal_plain, mod_privacy, mod_private, mod_register, mod_vcard, mod_muc: Use module:open_store()
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Fri, 19 Apr 2013 16:14:06 +0200 |
| parents | ba9be0be4bbb |
| children | 8b09b0d068d4 |
comparison
equal
deleted
inserted
replaced
| 5498:2a67235e1d4d | 5500:eeea0eb2602a |
|---|---|
| 26 local muc_new_room = muclib.new_room; | 26 local muc_new_room = muclib.new_room; |
| 27 local jid_split = require "util.jid".split; | 27 local jid_split = require "util.jid".split; |
| 28 local jid_bare = require "util.jid".bare; | 28 local jid_bare = require "util.jid".bare; |
| 29 local st = require "util.stanza"; | 29 local st = require "util.stanza"; |
| 30 local uuid_gen = require "util.uuid".generate; | 30 local uuid_gen = require "util.uuid".generate; |
| 31 local datamanager = require "util.datamanager"; | |
| 32 local um_is_admin = require "core.usermanager".is_admin; | 31 local um_is_admin = require "core.usermanager".is_admin; |
| 33 local hosts = prosody.hosts; | 32 local hosts = prosody.hosts; |
| 34 | 33 |
| 35 rooms = {}; | 34 rooms = {}; |
| 36 local rooms = rooms; | 35 local rooms = rooms; |
| 37 local persistent_rooms = datamanager.load(nil, muc_host, "persistent") or {}; | 36 local persistent_rooms_storage = module:open_store("persistent"); |
| 37 local persistent_rooms = persistent_rooms_storage:get() or {}; | |
| 38 local room_configs = module:open_store("config"); | |
| 38 | 39 |
| 39 -- Configurable options | 40 -- Configurable options |
| 40 muclib.set_max_history_length(module:get_option_number("max_history_messages")); | 41 muclib.set_max_history_length(module:get_option_number("max_history_messages")); |
| 41 | 42 |
| 42 local function is_admin(jid) | 43 local function is_admin(jid) |
| 64 local data = { | 65 local data = { |
| 65 jid = room.jid; | 66 jid = room.jid; |
| 66 _data = room._data; | 67 _data = room._data; |
| 67 _affiliations = room._affiliations; | 68 _affiliations = room._affiliations; |
| 68 }; | 69 }; |
| 69 datamanager.store(node, muc_host, "config", data); | 70 room_configs:set(node, data); |
| 70 room._data.history = history; | 71 room._data.history = history; |
| 71 elseif forced then | 72 elseif forced then |
| 72 datamanager.store(node, muc_host, "config", nil); | 73 room_configs:set(node, nil); |
| 73 if not next(room._occupants) then -- Room empty | 74 if not next(room._occupants) then -- Room empty |
| 74 rooms[room.jid] = nil; | 75 rooms[room.jid] = nil; |
| 75 end | 76 end |
| 76 end | 77 end |
| 77 if forced then datamanager.store(nil, muc_host, "persistent", persistent_rooms); end | 78 if forced then persistent_rooms_storage:set(nil, persistent_rooms); end |
| 78 end | 79 end |
| 79 | 80 |
| 80 function create_room(jid) | 81 function create_room(jid) |
| 81 local room = muc_new_room(jid); | 82 local room = muc_new_room(jid); |
| 82 room.route_stanza = room_route_stanza; | 83 room.route_stanza = room_route_stanza; |
| 86 end | 87 end |
| 87 | 88 |
| 88 local persistent_errors = false; | 89 local persistent_errors = false; |
| 89 for jid in pairs(persistent_rooms) do | 90 for jid in pairs(persistent_rooms) do |
| 90 local node = jid_split(jid); | 91 local node = jid_split(jid); |
| 91 local data = datamanager.load(node, muc_host, "config"); | 92 local data = room_configs:get(node); |
| 92 if data then | 93 if data then |
| 93 local room = create_room(jid); | 94 local room = create_room(jid); |
| 94 room._data = data._data; | 95 room._data = data._data; |
| 95 room._affiliations = data._affiliations; | 96 room._affiliations = data._affiliations; |
| 96 else -- missing room data | 97 else -- missing room data |
| 97 persistent_rooms[jid] = nil; | 98 persistent_rooms[jid] = nil; |
| 98 module:log("error", "Missing data for room '%s', removing from persistent room list", jid); | 99 module:log("error", "Missing data for room '%s', removing from persistent room list", jid); |
| 99 persistent_errors = true; | 100 persistent_errors = true; |
| 100 end | 101 end |
| 101 end | 102 end |
| 102 if persistent_errors then datamanager.store(nil, muc_host, "persistent", persistent_rooms); end | 103 if persistent_errors then persistent_rooms_storage:set(nil, persistent_rooms); end |
| 103 | 104 |
| 104 local host_room = muc_new_room(muc_host); | 105 local host_room = muc_new_room(muc_host); |
| 105 host_room.route_stanza = room_route_stanza; | 106 host_room.route_stanza = room_route_stanza; |
| 106 host_room.save = room_save; | 107 host_room.save = room_save; |
| 107 | 108 |
