changeset 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 1a5d5d4f08fe
children 9a7671720dec
files mod_archive/mod_archive.lua
diffstat 1 files changed, 78 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mod_archive/mod_archive.lua	Fri May 28 16:19:27 2010 -0400
+++ b/mod_archive/mod_archive.lua	Sat May 29 22:02:36 2010 +0800
@@ -1,17 +1,94 @@
 -- Prosody IM
--- Copyright (C) 2008-2010 Dai Zhiwei
+-- Copyright (C) 2010 Dai Zhiwei
 -- 
 -- This project is MIT/X11 licensed. Please see the
 -- COPYING file in the source package for more information.
 --
 
 local st = require "util.stanza";
+local dm = require "util.datamanager"
 
 module:add_feature("urn:xmpp:archive");
+module:add_feature("urn:xmpp:archive:auto");
+module:add_feature("urn:xmpp:archive:manage");
+module:add_feature("urn:xmpp:archive:manual");
+module:add_feature("urn:xmpp:archive:pref");
 
 local function preferences_handler(event)
+	local origin, stanza = event.origin, event.stanza;
+	module:log("debug", "-- Enter preferences_handler()");
+    module:log("debug", "-- pref:\n%s", tostring(stanza));
+	if stanza.attr.type == "get" then
+        -- dm.store(origin.username, origin.host, "archive_prefs", st.preserialize(reply.tags[1]));
+        local data = st.deserialize(dm.load(origin.username, origin.host, "archive_prefs"));
+        if data then
+            origin.send(st.reply(stanza):add_child(data));
+        else
+            local reply = st.reply(stanza):tag('pref', {xmlns='urn:xmpp:archive'});
+            reply:tag('default', {otr='concede', save='false', unset='true'}):up();
+            reply:tag('method', {type='auto', use='concede'}):up();
+            reply:tag('method', {type='local', use='concede'}):up();
+            reply:tag('method', {type='manual', use='concede'}):up();
+            reply:tag('auto', {save='false'}):up();
+            origin.send(reply);
+            -- origin.send(st.reply(stanza));
+        end
+		return true;
+    elseif stanza.attr.type == "set" then
+        return false;
+	end
+end
+
+local function auto_handler(event)
+    module:log("debug", "-- stanza:\n%s", tostring(event.stanza));
+	if event.stanza.attr.type == "set" then
+        event.origin.send(st.error_reply(event.stanza, "cancel", "feature-not-implemented"));
+        return true;
+    end
+end
+
+local function chat_handler(event)
+    module:log("debug", "-- stanza:\n%s", tostring(event.stanza));
+    return true;
+end
+
+local function itemremove_handler(event)
+    module:log("debug", "-- stanza:\n%s", tostring(event.stanza));
+    return true;
+end
+
+local function list_handler(event)
+    module:log("debug", "-- stanza:\n%s", tostring(event.stanza));
+    return true;
+end
+
+local function modified_handler(event)
+    module:log("debug", "-- stanza:\n%s", tostring(event.stanza));
+    return true;
+end
+
+local function remove_handler(event)
+    module:log("debug", "-- stanza:\n%s", tostring(event.stanza));
+    return true;
+end
+
+local function retrieve_handler(event)
+    module:log("debug", "-- stanza:\n%s", tostring(event.stanza));
+    return true;
+end
+
+local function save_handler(event)
+    module:log("debug", "-- stanza:\n%s", tostring(event.stanza));
     return true;
 end
 
 module:hook("iq/self/urn:xmpp:archive:pref", preferences_handler);
+module:hook("iq/self/urn:xmpp:archive:auto", auto_handler);
+module:hook("iq/self/urn:xmpp:archive:chat", chat_handler);
+module:hook("iq/self/urn:xmpp:archive:itemremove", itemremove_handler);
+module:hook("iq/self/urn:xmpp:archive:list", list_handler);
+module:hook("iq/self/urn:xmpp:archive:modified", modified_handler);
+module:hook("iq/self/urn:xmpp:archive:remove", remove_handler);
+module:hook("iq/self/urn:xmpp:archive:retrieve", retrieve_handler);
+module:hook("iq/self/urn:xmpp:archive:save", save_handler);