Software / code / prosody
Comparison
plugins/muc/mod_muc.lua @ 5024:d25e1b9332cc
Merge with Florob
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Sat, 28 Jul 2012 01:14:31 +0100 |
| parent | 5016:56a0b13a3d42 |
| child | 5058:433cc9a4c7e9 |
comparison
equal
deleted
inserted
replaced
| 5023:dcc8e789df36 | 5024:d25e1b9332cc |
|---|---|
| 27 local jid_bare = require "util.jid".bare; | 27 local jid_bare = require "util.jid".bare; |
| 28 local st = require "util.stanza"; | 28 local st = require "util.stanza"; |
| 29 local uuid_gen = require "util.uuid".generate; | 29 local uuid_gen = require "util.uuid".generate; |
| 30 local datamanager = require "util.datamanager"; | 30 local datamanager = require "util.datamanager"; |
| 31 local um_is_admin = require "core.usermanager".is_admin; | 31 local um_is_admin = require "core.usermanager".is_admin; |
| 32 local hosts = hosts; | |
| 32 | 33 |
| 33 rooms = {}; | 34 rooms = {}; |
| 34 local rooms = rooms; | 35 local rooms = rooms; |
| 35 local persistent_rooms = datamanager.load(nil, muc_host, "persistent") or {}; | 36 local persistent_rooms = datamanager.load(nil, muc_host, "persistent") or {}; |
| 36 local component = hosts[module.host]; | |
| 37 | 37 |
| 38 -- Configurable options | 38 -- Configurable options |
| 39 local max_history_messages = module:get_option_number("max_history_messages"); | 39 local max_history_messages = module:get_option_number("max_history_messages"); |
| 40 | 40 |
| 41 local function is_admin(jid) | 41 local function is_admin(jid) |
| 42 return um_is_admin(jid, module.host); | 42 return um_is_admin(jid, module.host); |
| 43 end | 43 end |
| 44 | 44 |
| 45 local function room_route_stanza(room, stanza) core_post_stanza(component, stanza); end | 45 local function room_route_stanza(room, stanza) module:send(stanza); end |
| 46 local function room_save(room, forced) | 46 local function room_save(room, forced) |
| 47 local node = jid_split(room.jid); | 47 local node = jid_split(room.jid); |
| 48 persistent_rooms[room.jid] = room._data.persistent; | 48 persistent_rooms[room.jid] = room._data.persistent; |
| 49 if room._data.persistent then | 49 if room._data.persistent then |
| 50 local history = room._data.history; | 50 local history = room._data.history; |
| 63 end | 63 end |
| 64 end | 64 end |
| 65 if forced then datamanager.store(nil, muc_host, "persistent", persistent_rooms); end | 65 if forced then datamanager.store(nil, muc_host, "persistent", persistent_rooms); end |
| 66 end | 66 end |
| 67 | 67 |
| 68 local persistent_errors = false; | |
| 68 for jid in pairs(persistent_rooms) do | 69 for jid in pairs(persistent_rooms) do |
| 69 local node = jid_split(jid); | 70 local node = jid_split(jid); |
| 70 local data = datamanager.load(node, muc_host, "config") or {}; | 71 local data = datamanager.load(node, muc_host, "config"); |
| 71 local room = muc_new_room(jid, { | 72 if data then |
| 72 max_history_length = max_history_messages; | 73 local room = muc_new_room(jid, { |
| 73 }); | 74 max_history_length = max_history_messages; |
| 74 room._data = data._data; | 75 }); |
| 75 room._data.max_history_length = max_history_messages; -- Overwrite old max_history_length in data with current settings | 76 room._data = data._data; |
| 76 room._affiliations = data._affiliations; | 77 room._data.max_history_length = max_history_messages; -- Overwrite old max_history_length in data with current settings |
| 77 room.route_stanza = room_route_stanza; | 78 room._affiliations = data._affiliations; |
| 78 room.save = room_save; | 79 room.route_stanza = room_route_stanza; |
| 79 rooms[jid] = room; | 80 room.save = room_save; |
| 81 rooms[jid] = room; | |
| 82 else -- missing room data | |
| 83 persistent_rooms[jid] = nil; | |
| 84 module:log("error", "Missing data for room '%s', removing from persistent room list", jid); | |
| 85 persistent_errors = true; | |
| 86 end | |
| 80 end | 87 end |
| 88 if persistent_errors then datamanager.store(nil, muc_host, "persistent", persistent_rooms); end | |
| 81 | 89 |
| 82 local host_room = muc_new_room(muc_host, { | 90 local host_room = muc_new_room(muc_host, { |
| 83 max_history_length = max_history_messages; | 91 max_history_length = max_history_messages; |
| 84 }); | 92 }); |
| 85 host_room.route_stanza = room_route_stanza; | 93 host_room.route_stanza = room_route_stanza; |
| 158 module:hook("message/host", handle_to_domain, -1); | 166 module:hook("message/host", handle_to_domain, -1); |
| 159 module:hook("presence/host", handle_to_domain, -1); | 167 module:hook("presence/host", handle_to_domain, -1); |
| 160 | 168 |
| 161 hosts[module.host].send = function(stanza) -- FIXME do a generic fix | 169 hosts[module.host].send = function(stanza) -- FIXME do a generic fix |
| 162 if stanza.attr.type == "result" or stanza.attr.type == "error" then | 170 if stanza.attr.type == "result" or stanza.attr.type == "error" then |
| 163 core_post_stanza(component, stanza); | 171 module:send(stanza); |
| 164 else error("component.send only supports result and error stanzas at the moment"); end | 172 else error("component.send only supports result and error stanzas at the moment"); end |
| 165 end | 173 end |
| 166 | 174 |
| 167 prosody.hosts[module:get_host()].muc = { rooms = rooms }; | 175 hosts[module:get_host()].muc = { rooms = rooms }; |
| 168 | 176 |
| 169 module.save = function() | 177 module.save = function() |
| 170 return {rooms = rooms}; | 178 return {rooms = rooms}; |
| 171 end | 179 end |
| 172 module.restore = function(data) | 180 module.restore = function(data) |
| 178 room._affiliations = oldroom._affiliations; | 186 room._affiliations = oldroom._affiliations; |
| 179 room.route_stanza = room_route_stanza; | 187 room.route_stanza = room_route_stanza; |
| 180 room.save = room_save; | 188 room.save = room_save; |
| 181 rooms[jid] = room; | 189 rooms[jid] = room; |
| 182 end | 190 end |
| 183 prosody.hosts[module:get_host()].muc = { rooms = rooms }; | 191 hosts[module:get_host()].muc = { rooms = rooms }; |
| 184 end | 192 end |