comparison mod_archive_muc/mod_archive_muc.lua @ 477:bbe4df968099

mod_archive_muc: A little refactoring to improve code search.
author Waqas Hussain <waqas20@gmail.com>
date Thu, 17 Nov 2011 20:26:49 +0500
parents 2c85635318a5
children
comparison
equal deleted inserted replaced
476:2c85635318a5 477:bbe4df968099
5 -- COPYING file in the source package for more information. 5 -- COPYING file in the source package for more information.
6 -- 6 --
7 7
8 local st = require "util.stanza"; 8 local st = require "util.stanza";
9 local dm = require "util.datamanager"; 9 local dm = require "util.datamanager";
10 local jid = require "util.jid"; 10 local jid_compare, jid_split, jid_bare = require "util.jid".compare, require "util.jid".bare, require "util.jid".split;
11 local datetime = require "util.datetime"; 11 local datetime = require "util.datetime".datetime;
12 local um = require "core.usermanager"; 12 local user_exists = require "core.usermanager".user_exists;
13 local rom = require "core.rostermanager"; 13 local is_contact_subscribed = require "core.rostermanager".is_contact_subscribed;
14 14
15 local PREFS_DIR = "archive_muc_prefs"; 15 local PREFS_DIR = "archive_muc_prefs";
16 local ARCHIVE_DIR = "archive_muc"; 16 local ARCHIVE_DIR = "archive_muc";
17 17
18 local AUTO_MUC_ARCHIVING_ENABLED = module:get_option_boolean("auto_muc_archiving_enabled", true); 18 local AUTO_MUC_ARCHIVING_ENABLED = module:get_option_boolean("auto_muc_archiving_enabled", true);
46 local function store_prefs(data, node, host) 46 local function store_prefs(data, node, host)
47 clean_up(data); 47 clean_up(data);
48 dm.store(node, host, PREFS_DIR, st.preserialize(data)); 48 dm.store(node, host, PREFS_DIR, st.preserialize(data));
49 end 49 end
50 50
51 local date_time = datetime.datetime;
52
53 local function match_jid(rule, id) 51 local function match_jid(rule, id)
54 return not rule or jid.compare(id, rule); 52 return not rule or jid_compare(id, rule);
55 end 53 end
56 54
57 local function is_earlier(start, coll_start) 55 local function is_earlier(start, coll_start)
58 return not start or start <= coll_start; 56 return not start or start <= coll_start;
59 end 57 end
136 end 134 end
137 end 135 end
138 return false; 136 return false;
139 end 137 end
140 138
141 local function is_in_roster(node, host, id)
142 return rom.is_contact_subscribed(node, host, jid.bare(id));
143 end
144
145 local function apply_pref(node, host, jid) 139 local function apply_pref(node, host, jid)
146 local pref = load_prefs(node, host); 140 local pref = load_prefs(node, host);
147 if not pref then 141 if not pref then
148 return AUTO_MUC_ARCHIVING_ENABLED; 142 return AUTO_MUC_ARCHIVING_ENABLED;
149 end 143 end
155 if never and is_in(never, jid) then 149 if never and is_in(never, jid) then
156 return false; 150 return false;
157 end 151 end
158 local default = pref.attr['default']; 152 local default = pref.attr['default'];
159 if default == 'roster' then 153 if default == 'roster' then
160 return is_in_roster(node, host, jid); 154 return is_contact_subscribed(node, host, jid_bare(jid));
161 elseif default == 'always' then 155 elseif default == 'always' then
162 return true; 156 return true;
163 elseif default == 'never' then 157 elseif default == 'never' then
164 return false; 158 return false;
165 end 159 end
166 return AUTO_MUC_ARCHIVING_ENABLED; 160 return AUTO_MUC_ARCHIVING_ENABLED;
167 end 161 end
168 162
169 local function store_msg(msg, node, host) 163 local function store_msg(msg, node, host)
170 local forwarded = st.stanza('forwarded', {xmlns='urn:xmpp:forward:tmp'}); 164 local forwarded = st.stanza('forwarded', {xmlns='urn:xmpp:forward:tmp'});
171 forwarded:tag('delay', {xmlns='urn:xmpp:delay',stamp=date_time()}):up(); 165 forwarded:tag('delay', {xmlns='urn:xmpp:delay',stamp=datetime()}):up();
172 forwarded:add_child(msg); 166 forwarded:add_child(msg);
173 dm.list_append(node, host, ARCHIVE_DIR, st.preserialize(forwarded)); 167 dm.list_append(node, host, ARCHIVE_DIR, st.preserialize(forwarded));
174 end 168 end
175 169
176 local function msg_handler(data) 170 local function msg_handler(data)
177 module:log("debug", "-- Enter muc msg_handler()"); 171 module:log("debug", "-- Enter muc msg_handler()");
178 local origin, stanza = data.origin, data.stanza; 172 local origin, stanza = data.origin, data.stanza;
179 local body = stanza:child_with_name("body"); 173 local body = stanza:child_with_name("body");
180 if body then 174 if body then
181 local from_node, from_host = jid.split(stanza.attr.from); 175 local from_node, from_host = jid_split(stanza.attr.from);
182 local to_node, to_host = jid.split(stanza.attr.to); 176 local to_node, to_host = jid_split(stanza.attr.to);
183 if um.user_exists(from_node, from_host) and apply_pref(from_node, from_host, stanza.attr.to) then 177 if user_exists(from_node, from_host) and apply_pref(from_node, from_host, stanza.attr.to) then
184 store_msg(stanza, from_node, from_host); 178 store_msg(stanza, from_node, from_host);
185 end 179 end
186 if um.user_exists(to_node, to_host) and apply_pref(to_node, to_host, stanza.attr.from) then 180 if user_exists(to_node, to_host) and apply_pref(to_node, to_host, stanza.attr.from) then
187 store_msg(stanza, to_node, to_host); 181 store_msg(stanza, to_node, to_host);
188 end 182 end
189 end 183 end
190 184
191 return nil; 185 return nil;