# HG changeset patch # User shinysky # Date 1275141756 -28800 # Node ID 9a37898f4f7c925f95b0c7c216bf11944cf8c7c7 # Parent 1a5d5d4f08fe4f481850cfece098fc51b0bb7f7e mod_archive: Added features: Determining Server Support & Determining Preferences diff -r 1a5d5d4f08fe -r 9a37898f4f7c mod_archive/mod_archive.lua --- 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);