examples/xep0163.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Mon, 16 Mar 2009 19:57:51 +0200
changeset 35 8deda77c72e5
parent 34 8206d7cb1447
permissions -rw-r--r--
Pep and disco use user-supplied connection
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
23
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     1
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     2
dopath 'mpd'
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     3
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     4
tune_enabled = false
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     5
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     6
mpd_pub_song = { }
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     7
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     8
function mpd_getstatus ()
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     9
	local status   = mpd.call_command { 'status' }
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    10
	if not tune_enabled or ( status.state ~= 'play' and status.state ~= 'pause' ) then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    11
		if mpd_pub_song.artist or mpd_pub_song.length or mpd_pub_song.source or mpd_pub_song.title or mpd_pub_song.track then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    12
			mpd_pub_song.artist = nil
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    13
			mpd_pub_song.length = nil
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    14
			mpd_pub_song.source = nil
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    15
			mpd_pub_song.title  = nil
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    16
			mpd_pub_song.track  = nil
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    17
			return mpd_pub_song
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    18
		else
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    19
			return nil
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    20
		end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    21
	end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    22
	
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    23
	local modified  = false
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    24
	local song      = mpd.call_command { 'currentsong' }
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    25
	local dir, file = song.file:match ( '(.+)/(.-)' )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    26
	-- populate according to currentsong fields: artist - artist, length - time, source - album, title - title, track - id, rating - ?, uri - ?
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    27
	local artist, length, source, title, track = song.artist, song.time, song.album, song.title, song.id
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    28
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    29
	if not artist or artist == '' then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    30
		artist = 'Unknown'
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    31
	end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    32
	if not mpd_pub_song.artist or artist ~= mpd_pub_song.artist[1] then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    33
		mpd_pub_song.artist = { artist }
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    34
		modified = true
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    35
	end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    36
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    37
	if length and length ~= 0 then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    38
		if not mpd_pub_song.length or length ~= mpd_pub_song.length[1] then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    39
			mpd_pub_song.length = { length }
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    40
			modified = true
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    41
		end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    42
	elseif mpd_pub_song.length then -- no length
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    43
		mpd_pub_song.length = nil
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    44
		modified = true
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    45
	end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    46
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    47
	if not source or source == '' then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    48
		source = dir
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    49
	end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    50
	if not mpd_pub_song.source or source ~= mpd_pub_song.source[1] then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    51
		mpd_pub_song.source = { source }
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    52
		modified = true
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    53
	end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    54
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    55
	if not title or title == '' then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    56
		title = file
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    57
	end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    58
	if not mpd_pub_song.title or title ~= mpd_pub_song.title[1] then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    59
		mpd_pub_song.title = { title }
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    60
		modified = true
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    61
	end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    62
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    63
	if not mpd_pub_song.track or track ~= mpd_pub_song.track[1] then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    64
		mpd_pub_song.track = { track }
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    65
		modified = true
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    66
	end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    67
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    68
	if modified then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    69
		return mpd_pub_song
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    70
	else
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    71
		return nil
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    72
	end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    73
end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    74
35
8deda77c72e5 Pep and disco use user-supplied connection
Myhailo Danylenko <isbear@ukrpost.net>
parents: 34
diff changeset
    75
function pep_publish ( conn, callback, node, data )
8deda77c72e5 Pep and disco use user-supplied connection
Myhailo Danylenko <isbear@ukrpost.net>
parents: 34
diff changeset
    76
	if not callback then
8deda77c72e5 Pep and disco use user-supplied connection
Myhailo Danylenko <isbear@ukrpost.net>
parents: 34
diff changeset
    77
		callback =
8deda77c72e5 Pep and disco use user-supplied connection
Myhailo Danylenko <isbear@ukrpost.net>
parents: 34
diff changeset
    78
			function ( mesg )
8deda77c72e5 Pep and disco use user-supplied connection
Myhailo Danylenko <isbear@ukrpost.net>
parents: 34
diff changeset
    79
				if mesg then
8deda77c72e5 Pep and disco use user-supplied connection
Myhailo Danylenko <isbear@ukrpost.net>
parents: 34
diff changeset
    80
					print ( mesg ) -- FIXME
8deda77c72e5 Pep and disco use user-supplied connection
Myhailo Danylenko <isbear@ukrpost.net>
parents: 34
diff changeset
    81
				end
8deda77c72e5 Pep and disco use user-supplied connection
Myhailo Danylenko <isbear@ukrpost.net>
parents: 34
diff changeset
    82
			end
8deda77c72e5 Pep and disco use user-supplied connection
Myhailo Danylenko <isbear@ukrpost.net>
parents: 34
diff changeset
    83
	end
23
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    84
	data.xmlns = 'http://jabber.org/protocol/' .. node -- this may modify original data? imo it does not matter.
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    85
	if conn:status () == 'authenticated' then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    86
--		local bjid = conn:jid():gsub ( '/.*', '' )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    87
		conn:send (
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    88
			lm.message.create { mtype = 'iq-set', -- from = conn:jid (), to = bjid,
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    89
				pubsub = { xmlns = 'http://jabber.org/protocol/pubsub',
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    90
					publish = { node = 'http://jabber.org/protocol/' .. node,
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    91
						item = { -- id = "current",
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    92
							[node] = data,
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    93
						},
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    94
					},
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    95
				},
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    96
--[[
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    97
				configure = {
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    98
					x = {
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    99
						field = {{ type = "hidden", var = 'FORM_TYPE',
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   100
							value = { 'http://jabber.org/protocol/pubsub#node_config' },
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   101
						},{ var = "pubsub#access_model",
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   102
							value = { 'presence' },
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   103
						}},
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   104
					},
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   105
				},
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   106
--]]
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   107
			},
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   108
			function ( conn, mess )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   109
				local mtype, smtype = mess:type ()
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   110
				if smtype == 'result' then
35
8deda77c72e5 Pep and disco use user-supplied connection
Myhailo Danylenko <isbear@ukrpost.net>
parents: 34
diff changeset
   111
					callback ()
23
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   112
					return true
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   113
				elseif smtype == 'error' then
35
8deda77c72e5 Pep and disco use user-supplied connection
Myhailo Danylenko <isbear@ukrpost.net>
parents: 34
diff changeset
   114
					callback ( message:child( 'error' ):children():name () )
23
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   115
					return true
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   116
				else
35
8deda77c72e5 Pep and disco use user-supplied connection
Myhailo Danylenko <isbear@ukrpost.net>
parents: 34
diff changeset
   117
					callback ( 'Weird ansver to publishing request: ' .. mess:xml () )
23
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   118
					return false
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   119
				end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   120
			end )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   121
	end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   122
end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   123
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   124
pep_incoming_message_handler = lm.message_handler.new (
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   125
	function ( conn, mess )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   126
		local e = mess:child ( 'event' )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   127
		if e and e:attribute ( 'xmlns' ) == 'http://jabber.org/protocol/pubsub#event' then
31
54957980a83a yesno in C, no config_file
Myhailo Danylenko <isbear@ukrpost.net>
parents: 29
diff changeset
   128
			local enable = main.yesno ( main.option ( 'lua_pep_notification' ) )
23
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   129
			if enable == false then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   130
				return true
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   131
			end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   132
			local is = e:child ( 'items' )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   133
			if is then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   134
				local from = mess:attribute ( 'from' )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   135
				local node = is:attribute ( 'node' )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   136
				if node == 'http://jabber.org/protocol/tune' then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   137
					local tune = is:path ( 'item', 'tune' )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   138
					if tune then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   139
						local item = tune:children ()
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   140
						local text = ''
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   141
						while item do
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   142
							text = ("%s\n- %s: %s"):format ( text, item:name (), item:value () or '' )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   143
							item = item:next ()
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   144
						end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   145
						if text ~= '' then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   146
							text = 'Now listening to:' .. text
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   147
						else
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   148
							text = 'Now not listening to anything'
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   149
						end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   150
						main.print_info ( from, text )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   151
						return true
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   152
					else
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   153
						main.print_info ( from, 'Strange: no tune item in pep notification' )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   154
					end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   155
				elseif node == 'http://jabber.org/protocol/mood' then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   156
					local mood = is:path ( 'item', 'mood' )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   157
					if mood then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   158
						local item = mood:children ()
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   159
						local mood, desc
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   160
						while item do
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   161
							if item:name () == 'text' then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   162
								desc = item:value ()
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   163
							else
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   164
								mood = item:name ()
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   165
								-- here we can add child elements handling (by namespace)
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   166
							end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   167
							item = item:next ()
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   168
						end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   169
						if mood then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   170
							main.print_info ( from, ("Buddy's mood now %s %s"):format ( mood, desc or '' ) )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   171
						else
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   172
							main.print_info ( from, "Buddy hides his mood" )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   173
						end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   174
						return true
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   175
					else
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   176
						main.print_info ( from, 'Strange: no mood item in pep notification' )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   177
					end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   178
				elseif node == 'http://jabber.org/protocol/activity' then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   179
					local activity = is:path ( 'item', 'activity' )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   180
					if activity then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   181
						local item = activity:children ()
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   182
						local activity, desc
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   183
						while item do
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   184
							if item:name () == 'text' then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   185
								desc = item:value ()
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   186
							else
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   187
								activity = item:name ()
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   188
								local subitem = item:children ()
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   189
								if subitem then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   190
									-- here we can check for non-standard subactivity elements,
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   191
									-- add subactivity child elements handling
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   192
									activity = ("%s: %s"):format ( activity, subitem:name () )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   193
								end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   194
							end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   195
							item = item:next ()
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   196
						end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   197
						if activity then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   198
							main.print_info ( from, ("Now %s %s"):format ( activity, desc or '' ) )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   199
						else
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   200
							main.print_info ( from, "Buddy hides his activity" )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   201
						end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   202
						return true
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   203
					else
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   204
						main.print_info ( from, 'Strange: no activity item in pep notification' )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   205
					end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   206
				elseif node == 'http://jabber.org/protocol/geoloc' then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   207
					local loc = is:path ( 'item', 'geoloc' )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   208
					if loc then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   209
						local item = loc:children ()
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   210
						local text = ''
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   211
						while item do
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   212
							text = ("%s\n- %s: %s"):format ( text, item:name (), item:value () or '' )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   213
							item = item:next ()
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   214
						end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   215
						if text ~= '' then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   216
							text = 'Now at:' .. text
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   217
						else
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   218
							text = 'Now in unknown location'
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   219
						end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   220
						main.print_info ( from, text )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   221
						return true
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   222
					else
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   223
						main.print_info ( from, 'Strange: no geoloc item in pep notification' )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   224
					end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   225
				else
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   226
					main.print_info ( from, 'Unknown node in pep notification: ' .. is:xml () )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   227
				end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   228
			end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   229
		end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   230
		return false
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   231
	end )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   232
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   233
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   234
function mpd_callback ()
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   235
	local sdata = mpd_getstatus ()
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   236
	if sdata then
35
8deda77c72e5 Pep and disco use user-supplied connection
Myhailo Danylenko <isbear@ukrpost.net>
parents: 34
diff changeset
   237
		pep_publish ( lm.connection.bless ( main.connection () ), nil, 'tune', sdata )
23
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   238
	end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   239
	if tune_enabled then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   240
		return true
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   241
	else
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   242
		return false
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   243
	end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   244
end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   245
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   246
-- do not call it too fast, or you end up with many daemons at once
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   247
function enable_tune ( yn )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   248
	if yn == nil then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   249
		yn = true
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   250
	end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   251
	if yn then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   252
		if not tune_enabled then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   253
			main.timer ( 15, mpd_callback )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   254
			tune_enabled = true
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   255
			-- update status
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   256
		end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   257
	else
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   258
		if tune_enabled then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   259
			tune_enabled = false
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   260
			-- update status
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   261
		end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   262
	end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   263
end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   264
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   265
main.command ( 'tune',
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   266
	function ( args )
31
54957980a83a yesno in C, no config_file
Myhailo Danylenko <isbear@ukrpost.net>
parents: 29
diff changeset
   267
		local enable = main.yesno ( args )
23
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   268
		if enable == nil then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   269
			if tune_enabled then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   270
				print ( "Tune notifications enabled" )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   271
			else
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   272
				print ( "Tune notifications disabled" )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   273
			end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   274
		else
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   275
			enable_tune ( enable )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   276
		end
34
8206d7cb1447 Args auto-parsing, use main.binding
Myhailo Danylenko <isbear@ukrpost.net>
parents: 32
diff changeset
   277
	end, false, 'yesno' )
23
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   278
main.command ( 'mood',
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   279
	function ( args )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   280
		local data = { }
24
25552b21d3fb Arguments parsing
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   281
		local mood, text = args[1], args[2]
25552b21d3fb Arguments parsing
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   282
		if text then
23
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   283
			data.text  = { text }
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   284
		end
26
fc83934f9b8d Pubsub interface merged into one command
Myhailo Danylenko <isbear@ukrpost.net>
parents: 24
diff changeset
   285
		if mood then
23
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   286
			data[mood] = { }
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   287
		end
35
8deda77c72e5 Pep and disco use user-supplied connection
Myhailo Danylenko <isbear@ukrpost.net>
parents: 34
diff changeset
   288
		pep_publish ( lm.connection.bless ( main.connection () ), nil, 'mood', data )
34
8206d7cb1447 Args auto-parsing, use main.binding
Myhailo Danylenko <isbear@ukrpost.net>
parents: 32
diff changeset
   289
	end, true )
23
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   290
main.command ( 'activity',
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   291
	function ( args )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   292
		local data = { }
24
25552b21d3fb Arguments parsing
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   293
		local activity, text = args[1], args[2]
25552b21d3fb Arguments parsing
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   294
		if text then
23
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   295
			data.text = { text }
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   296
		end
24
25552b21d3fb Arguments parsing
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   297
		local act, subact = activity:match ( "(.-)%-(.+)" )
23
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   298
		if not act then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   299
			act = activity
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   300
		end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   301
		if act ~= '' then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   302
			data[act] = { }
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   303
			if subact then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   304
				data[act][subact] = { }
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   305
			end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   306
		end
35
8deda77c72e5 Pep and disco use user-supplied connection
Myhailo Danylenko <isbear@ukrpost.net>
parents: 34
diff changeset
   307
		pep_publish ( lm.connection.bless ( main.connection () ), nil, 'activity', data )
34
8206d7cb1447 Args auto-parsing, use main.binding
Myhailo Danylenko <isbear@ukrpost.net>
parents: 32
diff changeset
   308
	end, true )
23
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   309
main.command ( 'location',
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   310
	function ( args )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   311
		local data = { }
24
25552b21d3fb Arguments parsing
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   312
		for key, val in pairs ( args ) do
23
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   313
			data[key] = { val }
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   314
		end
35
8deda77c72e5 Pep and disco use user-supplied connection
Myhailo Danylenko <isbear@ukrpost.net>
parents: 34
diff changeset
   315
		pep_publish ( lm.connection.bless ( main.connection () ), nil, 'geoloc', data )
34
8206d7cb1447 Args auto-parsing, use main.binding
Myhailo Danylenko <isbear@ukrpost.net>
parents: 32
diff changeset
   316
	end, true )
23
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   317
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   318
commands_help['tune']     = "[enable|disable|on|off|yes|no|true|false]\n\nEnables or disables publishing of notifications about playing music in your player (currently only mpd is supported)."
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   319
commands_help['mood']     = "[mood [message]]\n\nPublishes your mood.\nNote, that for now it does not checks for mood validity, so, see xep0107 for valid moods."
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   320
commands_help['activity'] = "[activity[-specific_activity] [text]]\n\nPublishes your activity.\nNote, that for now it does not checks for activity validity, so, see xep0108 for valid activity values."
24
25552b21d3fb Arguments parsing
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   321
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."
23
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   322
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   323
pep_handler_registered = false
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   324
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   325
hooks_d['hook-post-connect'].xep0163 =
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   326
	function ( args )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   327
		lm.connection.bless( main.connection () ):handler ( pep_incoming_message_handler, 'message', 'normal' )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   328
		pep_handler_registered = true
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   329
		if tune_enabled then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   330
			mpd_callback ()
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   331
		end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   332
		-- XXX: may it confuse pairs()?
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   333
		hooks_d['hook-post-connect'].xep0163 =
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   334
			function ( args )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   335
				if tune_enabled then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   336
					mpd_callback ()
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   337
				end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   338
			end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   339
		hooks_d['hook-quit'].xep0163 =
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   340
			function ( args )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   341
				if mpd_handler_registered then
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   342
					lm.connection.bless( main.connection () ):handler ( pep_incoming_message_handler, 'message' )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   343
					pep_handler_registered = false
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   344
				end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   345
			end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   346
	end
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   347
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   348
-- XXX: this really should be initialized after connection establishment?
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   349
-- but as this thing is implemented by now, it will be cached by server,
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   350
-- and, thus, we will be unable to get notifications.
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   351
main.add_feature ( 'http://jabber.org/protocol/tune+notify' )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   352
main.add_feature ( 'http://jabber.org/protocol/tune' )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   353
main.add_feature ( 'http://jabber.org/protocol/mood+notify' )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   354
main.add_feature ( 'http://jabber.org/protocol/mood' )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   355
main.add_feature ( 'http://jabber.org/protocol/activity+notify' )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   356
main.add_feature ( 'http://jabber.org/protocol/activity' )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   357
main.add_feature ( 'http://jabber.org/protocol/geoloc+notify' )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   358
main.add_feature ( 'http://jabber.org/protocol/geoloc' )
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   359
e441162b1386 One pep handler, pep commands
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   360
-- vim: se ts=4: --