examples/lm/avatar.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Tue, 31 Mar 2009 18:35:34 +0300
changeset 68 742878c74b8e
permissions -rw-r--r--
Lm separation, privacy * Library parts moved to lm.* * mc_* renamed to plain names * Privacy lists suppart (not tested)


-- USER AVATAR (XEP-0084)

-- library

local sha1   = require 'sha1'
local base64 = require 'base64'
local lm     = require 'lm'
local pep    = require 'lm.pep'
local pubsub = require 'lm.pubsub'

--

local F = { }

-- TODO 'temporary disabling'
--          however I cannot see a method to enable it back without republishing avatar :(
--          this requires client to know, what is published on the server now
--          maybe we can do that by requesting item without payload from server
--      pubsub metadata notification handler

function F.publish ( conn, data, success, fail, height, width )
	local id = sha1.digest ( data )
	pep.publish ( conn, 'urn:xmpp:avatar:data',
		{ id = id,
			data = { xmlns = 'urn:xmpp:avatar:data',
				base64.encode ( data ),
			},
		},
		function ()
			pep.publish ( conn, 'urn:xmpp:avatar:metadata',
				{ id = id,
					info = { bytes = data:len (), id = id, type = 'image/png', height = height, width = width },
				}, success, fail )
		end, fail )
end

function F.publish_url ( conn, url, iid, size, id, mtype, success, fail, height, width )
	pep.publish ( conn, 'urn:xmpp:avatar:metadata',
		{ id = iid,
			info = { bytes = size, id = id, type = mtype, url = url, height = height, width = width },
		}, success, fail )
end

function F.get ( conn, from, id, success, fail )
	pubsub.retrieve ( conn, from, 'urn:xmpp:avatar:data',
		function ( from, node, item )
			local data = item:child ( 'data' )
			if data then
				success ( data:value () )
			else
				-- XXX
			end
		end, fail, nil, { id } )
end

return F

-- vim: se ts=4: --