examples/avatar.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Wed, 28 Nov 2012 20:17:53 +0200
changeset 146 04d19c9c1196
parent 68 742878c74b8e
permissions -rw-r--r--
Fix module loading problem
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
54
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     1
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 54
diff changeset
     2
local lm     = require 'lm'
68
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
     3
local pubsub = require 'lm.pubsub'
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
     4
local avatar = require 'lm.avatar'
54
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     5
68
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
     6
pubsub.handler ( 'urn:xmpp:avatar:metadata',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
     7
	function ( from, node, data, id )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
     8
		if not main.yesno ( main.option ( 'lua_pep_notification' ) ) then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
     9
			return true
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    10
		end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    11
		local item = data:child ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    12
		while item do
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    13
			main.print_info ( from, ('Avatar: %s [%s] %s bytes, %sx%s %s'):format (
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    14
					item:attribute ( 'id' ),
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    15
					item:attribute ( 'type' ),
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    16
					item:attribute ( 'bytes' ),
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    17
					item:attribute ( 'width' ) or '?',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    18
					item:attribute ( 'height' ) or '?',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    19
					item:attribute ( 'url' ) or '' ) )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    20
			item = item:next ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    21
		end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    22
	end )
54
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    23
68
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    24
main.command ( 'avatar',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    25
	function ( args )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    26
		local action = args[1]
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    27
		if action == 'get' then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    28
			local who
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    29
			if args.t then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    30
				who = args.t
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    31
			else
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    32
				who = main.current_buddy ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    33
			end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    34
			avatar.get ( lm.connection.bless ( main.connection () ), who, args[2],
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    35
				function ( data )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    36
					local h = io.open ( args[3], 'w' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    37
					if h then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    38
						h:write ( data )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    39
						h:close ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    40
						main.print_info ( who, 'Avatar saved to ' .. args[3] )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    41
					else
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    42
						print ( 'Cannot open file for writing ' .. args[3] )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    43
					end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    44
				end,
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    45
				function ( mesg )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    46
					main.print_info ( who, 'Error obtaining avatar: ' .. mesg )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    47
				end )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    48
		else
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    49
			local file = action
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    50
			if action == 'set' then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    51
				file = args[2]
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    52
			end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    53
			local h = io.open ( file )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    54
			if h then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    55
				data = h:read ( '*a' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    56
				h:close ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    57
				avatar.publish ( lm.connection.bless ( main.connection () ), data,
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    58
					function ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    59
						print ( 'Avatar published' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    60
					end,
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    61
					function ( mesg )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    62
						print ( 'Avatar publishing error: ' .. mesg )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    63
					end )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    64
			else
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    65
				print ( 'Cannot open file ' .. file )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    66
			end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    67
		end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    68
	end, true, 'file' )
54
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    69
68
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    70
commands_help['avatar'] = '[-t jid] get id filename | [set] filename\n\nGet action tries to get from server avatar with specified id and save it to \'filename\'.\nSet action publishes avatar to server. File must be a PNG image.'
54
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    71
68
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
    72
main.add_feature ( 'urn:xmpp:avatar:metadata+notify' )
54
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    73
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    74
-- vim: se ts=4: --