comparison mod_archive/mod_archive.lua @ 159:9a37898f4f7c

mod_archive: Added features: Determining Server Support & Determining Preferences
author shinysky<shinysky1986(AT)gmail.com>
date Sat, 29 May 2010 22:02:36 +0800
parents 86c28405c5da
children fd8d76daad97
comparison
equal deleted inserted replaced
158:1a5d5d4f08fe 159:9a37898f4f7c
1 -- Prosody IM 1 -- Prosody IM
2 -- Copyright (C) 2008-2010 Dai Zhiwei 2 -- Copyright (C) 2010 Dai Zhiwei
3 -- 3 --
4 -- This project is MIT/X11 licensed. Please see the 4 -- This project is MIT/X11 licensed. Please see the
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 10
10 module:add_feature("urn:xmpp:archive"); 11 module:add_feature("urn:xmpp:archive");
12 module:add_feature("urn:xmpp:archive:auto");
13 module:add_feature("urn:xmpp:archive:manage");
14 module:add_feature("urn:xmpp:archive:manual");
15 module:add_feature("urn:xmpp:archive:pref");
11 16
12 local function preferences_handler(event) 17 local function preferences_handler(event)
18 local origin, stanza = event.origin, event.stanza;
19 module:log("debug", "-- Enter preferences_handler()");
20 module:log("debug", "-- pref:\n%s", tostring(stanza));
21 if stanza.attr.type == "get" then
22 -- dm.store(origin.username, origin.host, "archive_prefs", st.preserialize(reply.tags[1]));
23 local data = st.deserialize(dm.load(origin.username, origin.host, "archive_prefs"));
24 if data then
25 origin.send(st.reply(stanza):add_child(data));
26 else
27 local reply = st.reply(stanza):tag('pref', {xmlns='urn:xmpp:archive'});
28 reply:tag('default', {otr='concede', save='false', unset='true'}):up();
29 reply:tag('method', {type='auto', use='concede'}):up();
30 reply:tag('method', {type='local', use='concede'}):up();
31 reply:tag('method', {type='manual', use='concede'}):up();
32 reply:tag('auto', {save='false'}):up();
33 origin.send(reply);
34 -- origin.send(st.reply(stanza));
35 end
36 return true;
37 elseif stanza.attr.type == "set" then
38 return false;
39 end
40 end
41
42 local function auto_handler(event)
43 module:log("debug", "-- stanza:\n%s", tostring(event.stanza));
44 if event.stanza.attr.type == "set" then
45 event.origin.send(st.error_reply(event.stanza, "cancel", "feature-not-implemented"));
46 return true;
47 end
48 end
49
50 local function chat_handler(event)
51 module:log("debug", "-- stanza:\n%s", tostring(event.stanza));
52 return true;
53 end
54
55 local function itemremove_handler(event)
56 module:log("debug", "-- stanza:\n%s", tostring(event.stanza));
57 return true;
58 end
59
60 local function list_handler(event)
61 module:log("debug", "-- stanza:\n%s", tostring(event.stanza));
62 return true;
63 end
64
65 local function modified_handler(event)
66 module:log("debug", "-- stanza:\n%s", tostring(event.stanza));
67 return true;
68 end
69
70 local function remove_handler(event)
71 module:log("debug", "-- stanza:\n%s", tostring(event.stanza));
72 return true;
73 end
74
75 local function retrieve_handler(event)
76 module:log("debug", "-- stanza:\n%s", tostring(event.stanza));
77 return true;
78 end
79
80 local function save_handler(event)
81 module:log("debug", "-- stanza:\n%s", tostring(event.stanza));
13 return true; 82 return true;
14 end 83 end
15 84
16 module:hook("iq/self/urn:xmpp:archive:pref", preferences_handler); 85 module:hook("iq/self/urn:xmpp:archive:pref", preferences_handler);
86 module:hook("iq/self/urn:xmpp:archive:auto", auto_handler);
87 module:hook("iq/self/urn:xmpp:archive:chat", chat_handler);
88 module:hook("iq/self/urn:xmpp:archive:itemremove", itemremove_handler);
89 module:hook("iq/self/urn:xmpp:archive:list", list_handler);
90 module:hook("iq/self/urn:xmpp:archive:modified", modified_handler);
91 module:hook("iq/self/urn:xmpp:archive:remove", remove_handler);
92 module:hook("iq/self/urn:xmpp:archive:retrieve", retrieve_handler);
93 module:hook("iq/self/urn:xmpp:archive:save", save_handler);
17 94