examples/avatar.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Fri, 27 Mar 2009 12:06:19 +0200
changeset 66 542f61e113cb
parent 54 b53355736057
child 68 742878c74b8e
permissions -rw-r--r--
Modularization, I * activity * attention * avatar * disco * evil * geoloc * ibb * iq * mood * oob * ping * pubsub * tune * mpd * pep
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
54
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     1
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     2
-- USER AVATAR (XEP-0084)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     3
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     4
-- library
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     5
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 54
diff changeset
     6
local sha1   = require 'sha1'
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 54
diff changeset
     7
local base64 = require 'base64'
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 54
diff changeset
     8
local lm     = require 'lm'
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 54
diff changeset
     9
local pep    = require 'pep'
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 54
diff changeset
    10
local pubsub = require 'pubsub'
54
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    11
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 54
diff changeset
    12
--
54
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    13
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 54
diff changeset
    14
local F = { }
54
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    15
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    16
-- TODO 'temporary disabling'
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    17
--          however I cannot see a method to enable it back without republishing avatar :(
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    18
--          this requires client to know, what is published on the server now
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    19
--          maybe we can do that by requesting item without payload from server
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    20
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 54
diff changeset
    21
function F.publish ( conn, data, success, fail, height, width )
54
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    22
	local id = sha1.digest ( data )
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    23
	pep.publish ( conn, 'urn:xmpp:avatar:data',
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    24
		{ id = id,
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    25
			data = { xmlns = 'urn:xmpp:avatar:data',
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    26
				base64.encode ( data ),
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    27
			},
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    28
		},
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    29
		function ()
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    30
			pep.publish ( conn, 'urn:xmpp:avatar:metadata',
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    31
				{ id = id,
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    32
					info = { bytes = data:len (), id = id, type = 'image/png', height = height, width = width },
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    33
				}, success, fail )
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    34
		end, fail )
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    35
end
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    36
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 54
diff changeset
    37
function F.publish_url ( conn, url, iid, size, id, mtype, success, fail, height, width )
54
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    38
	pep.publish ( conn, 'urn:xmpp:avatar:metadata',
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    39
		{ id = iid,
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    40
			info = { bytes = size, id = id, type = mtype, url = url, height = height, width = width },
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    41
		}, success, fail )
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    42
end
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    43
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 54
diff changeset
    44
function F.get ( conn, from, id, success, fail )
54
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    45
	pubsub.retrieve ( conn, from, 'urn:xmpp:avatar:data',
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    46
		function ( from, node, item )
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    47
			local data = item:child ( 'data' )
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    48
			if data then
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    49
				success ( data:value () )
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    50
			else
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    51
				-- XXX
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    52
			end
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    53
		end, fail, nil, { id } )
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    54
end
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    55
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 54
diff changeset
    56
return F
54
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    57
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    58
-- vim: se ts=4: --