Mercurial > prosody-modules
comparison mod_archive/mod_archive.lua @ 239:2659ee3e8d56
mod_archive: use usermanager to check if some user exists
| author | shinysky<shinysky1986(AT)gmail.com> |
|---|---|
| date | Tue, 10 Aug 2010 09:26:52 +0800 |
| parents | d900be0dee3e |
| children | 6202ce4d12d6 |
comparison
equal
deleted
inserted
replaced
| 238:5343b3ebaffb | 239:2659ee3e8d56 |
|---|---|
| 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 = require "util.jid"; |
| 11 local datetime = require "util.datetime"; | 11 local datetime = require "util.datetime"; |
| 12 local um = require "core.usermanager"; | |
| 12 | 13 |
| 13 local PREFS_DIR = "archive_prefs"; | 14 local PREFS_DIR = "archive_prefs"; |
| 14 local ARCHIVE_DIR = "archive"; | 15 local ARCHIVE_DIR = "archive"; |
| 15 local xmlns_rsm = "http://jabber.org/protocol/rsm"; | 16 local xmlns_rsm = "http://jabber.org/protocol/rsm"; |
| 16 local DEFAULT_MAX = 100; | 17 local DEFAULT_MAX = 100; |
| 17 | 18 |
| 18 local FORCE_ARCHIVING = false; | 19 local FORCE_ARCHIVING = false; |
| 19 local AUTO_ARCHIVING_ENABLED = true; | 20 local AUTO_ARCHIVING_ENABLED = true; |
| 20 | |
| 21 local HOST = 'localhost'; | |
| 22 | 21 |
| 23 module:add_feature("urn:xmpp:archive"); | 22 module:add_feature("urn:xmpp:archive"); |
| 24 module:add_feature("urn:xmpp:archive:auto"); | 23 module:add_feature("urn:xmpp:archive:auto"); |
| 25 module:add_feature("urn:xmpp:archive:manage"); | 24 module:add_feature("urn:xmpp:archive:manage"); |
| 26 module:add_feature("urn:xmpp:archive:manual"); | 25 module:add_feature("urn:xmpp:archive:manual"); |
| 40 | 39 |
| 41 local function os_date() | 40 local function os_date() |
| 42 return os.date("!*t"); | 41 return os.date("!*t"); |
| 43 end | 42 end |
| 44 | 43 |
| 45 local function date_time(localtime) | 44 local date_time = datetime.datetime; |
| 46 return datetime.datetime(localtime); | |
| 47 end | |
| 48 | 45 |
| 49 local function date_format(s) | 46 local function date_format(s) |
| 50 return os.date("%Y-%m-%dT%H:%M:%SZ", s); | 47 return os.date("%Y-%m-%dT%H:%M:%SZ", s); |
| 51 end | 48 end |
| 52 | 49 |
| 58 local function list_reverse(list) | 55 local function list_reverse(list) |
| 59 local t, n = {}, #list | 56 local t, n = {}, #list |
| 60 for i = 1, n do t[i] = list[n-i+1] end -- reverse | 57 for i = 1, n do t[i] = list[n-i+1] end -- reverse |
| 61 for i = 1, n do list[i] = t[i] end -- copy back | 58 for i = 1, n do list[i] = t[i] end -- copy back |
| 62 end | 59 end |
| 63 | |
| 64 -- local function list_push(node, host, collection) | |
| 65 -- local data = dm.list_load(node, host, ARCHIVE_DIR); | |
| 66 -- if data then | |
| 67 -- table.insert(data, 1, collection); | |
| 68 -- dm.list_store(node, host, ARCHIVE_DIR, st.preserialize(data)); | |
| 69 -- else | |
| 70 -- dm.list_append(node, host, ARCHIVE_DIR, st.preserialize(collection)); | |
| 71 -- end | |
| 72 -- end | |
| 73 | 60 |
| 74 local function list_insert(node, host, collection) | 61 local function list_insert(node, host, collection) |
| 75 local data = dm.list_load(node, host, ARCHIVE_DIR); | 62 local data = dm.list_load(node, host, ARCHIVE_DIR); |
| 76 if data then | 63 if data then |
| 77 local s, e = 1, #data; | 64 local s, e = 1, #data; |
| 771 local body = stanza:child_with_name("body"); | 758 local body = stanza:child_with_name("body"); |
| 772 local thread = stanza:child_with_name("thread"); | 759 local thread = stanza:child_with_name("thread"); |
| 773 if body then | 760 if body then |
| 774 local from_node, from_host = jid.split(stanza.attr.from); | 761 local from_node, from_host = jid.split(stanza.attr.from); |
| 775 local to_node, to_host = jid.split(stanza.attr.to); | 762 local to_node, to_host = jid.split(stanza.attr.to); |
| 776 -- FIXME only archive messages of users on this host | 763 if um.user_exists(from_node, from_host) and apply_pref(from_node, from_host, stanza.attr.to, thread) then |
| 777 if from_host == HOST and apply_pref(from_node, from_host, stanza.attr.to, thread) then | |
| 778 store_msg(stanza, from_node, from_host, true); | 764 store_msg(stanza, from_node, from_host, true); |
| 779 end | 765 end |
| 780 if to_host == HOST and apply_pref(to_node, to_host, stanza.attr.from, thread) then | 766 if um.user_exists(to_node, to_host) and apply_pref(to_node, to_host, stanza.attr.from, thread) then |
| 781 store_msg(stanza, to_node, to_host, false); | 767 store_msg(stanza, to_node, to_host, false); |
| 782 end | 768 end |
| 783 end | 769 end |
| 784 | 770 |
| 785 return nil; | 771 return nil; |
