# HG changeset patch # User Kim Alvefur # Date 1320606259 -3600 # Node ID c5a4f82e2fd61b252366bdf839fede0ad541955e # Parent 31019cb93d59992209ae4f1965c483ed1afb66e7 plugins.vcard: Use util.vcard diff -r 31019cb93d59 -r c5a4f82e2fd6 plugins/vcard.lua --- a/plugins/vcard.lua Sun Nov 06 20:03:20 2011 +0100 +++ b/plugins/vcard.lua Sun Nov 06 20:04:19 2011 +0100 @@ -1,20 +1,36 @@ local xmlns_vcard = "vcard-temp"; - --- TODO Should this plugin perhaps convert to/from some non-stanza format? --- { --- FN = "Kim Alvefur"; --- NICKNAME = "Zash"; --- } +local vcard = require "util.vcard"; function verse.plugins.vcard(stream) function stream:get_vcard(jid, callback) --jid = nil for self stream:send_iq(verse.iq({to = jid, type="get"}) - :tag("vCard", {xmlns=xmlns_vcard}), callback); - end -- FIXME This should pick out the vCard element + :tag("vCard", {xmlns=xmlns_vcard}), callback and function(stanza) + local lCard, xCard; + xCard = stanza:get_child("vCard", xmlns_vcard); + if stanza.attr.type == "result" and xCard then + lCard = vcard.xep54_to_lua(xCard) + vCard = vcard.xep54_to_text(xCard) + -- FIXME This is only until util.vcard.lua_to_text() is implemented + lCard._text = vCard; + callback(lCard) + else + callback(false) -- FIXME add error + end + end or nil); + end - function stream:set_vcard(vCard, callback) + function stream:set_vcard(aCard, callback) + local xCard; + if type(aCard) == "table" and aCard.name then + xCard = aCard; + elseif type(aCard) == "string" then + xCard = vcard.text_to_xep54(aCard)[1]; + elseif type(aCard) == "table" then + error("Converting a table to vCard not implemented") + end + if not xCard then return false end + stream:debug("setting vcard to %s", tostring(xCard)); stream:send_iq(verse.iq({type="set"}) - :tag("vCard", {xmlns=xmlns_vcard}) - :add_child(vCard), callback); + :add_child(xCard), callback); end end