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
parent 5376:ba9be0be4bbb
child 5577: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