examples/geoloc.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Mon, 23 Mar 2009 08:15:47 +0200
changeset 62 fb81aeb45e00
parent 59 4660c4f10ef1
child 66 542f61e113cb
permissions -rw-r--r--
Vcard and Evil
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
59
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     1
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     2
-- USER LOCATION (XEP-0080)
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     3
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     4
-- library
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     5
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     6
require 'lm'
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     7
require 'pep'
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     8
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     9
-- public
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    10
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    11
geoloc = { }
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    12
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    13
function geoloc.publish ( conn, success, fail, data )
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    14
	local sdata = { xmlns = 'http://jabber.org/protocol/geoloc' }
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    15
	if data then
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    16
		for key, value in pairs ( data ) do
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    17
			sdata[key] = { value }
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    18
		end
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    19
	end
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    20
	pep.publish ( conn, 'http://jabber.org/protocol/geoloc', { geoloc = sdata }, success, fail )
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    21
end
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    22
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    23
-- mcabber
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    24
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    25
pep.handlers['http://jabber.org/protocol/geoloc'] =
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    26
	function ( from, node, data )
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    27
		if not main.yesno ( main.option ( 'lua_pep_notification' ) ) then
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    28
			return true
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    29
		end
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    30
		local item = data:children ()
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    31
		local text = ''
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    32
		while item do
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    33
			text = ("%s\n- %s: %s"):format ( text, item:name (), item:value () or '' )
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    34
			item = item:next ()
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    35
		end
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    36
		if text ~= '' then
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    37
			text = 'Now at:' .. text
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    38
		else
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    39
			text = 'Now in unknown location'
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    40
		end
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    41
		main.print_info ( from, text )
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    42
		return true
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    43
	end
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    44
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    45
main.command ( 'location',
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    46
	function ( args )
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    47
		geoloc.publish ( lm.connection.bless ( main.connection () ),
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    48
			function ()
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    49
				print ( 'Geolocation published' )
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    50
			end,
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    51
			function ( mesg )
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    52
				print ( 'Error geolocation publishing: ' .. mesg )
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    53
			end, args )
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    54
	end, true )
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    55
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    56
commands_help['location'] = "[-key value [-key value ...]]\n\nPublishes your current geolocation.\nValid keys are accuracy, alt, area, bearing, building, country, datum, description, error, floor, lat, locality, lon, postalcode, region, room, speed, street, text, timestamp and uri, according to xep0080."
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    57
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    58
main.add_feature ( 'http://jabber.org/protocol/geoloc+notify' )
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    59
main.add_feature ( 'http://jabber.org/protocol/geoloc' )
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    60
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    61
-- vim: se ts=4: --