Software / code / prosody-modules
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 |
| parent | 476:2c85635318a5 |
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; |