examples/jobs.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Sun, 15 Mar 2009 20:45:24 +0200
changeset 24 25552b21d3fb
parent 8 fc9060b9b7cc
child 27 92b254b64360
permissions -rw-r--r--
Arguments parsing
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     1
--- JOBS
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     2
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     3
delayed_jobs = {}
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     4
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     5
-- may fail
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     6
dopath 'saved_jobs.lua'
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     7
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     8
function save_jobs ()
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     9
	local h = io.open ( main.config_file ( 'saved_jobs.lua' ), "w" )
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    10
	if not h then
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    11
		print ( 'Cannot open jobs file for writing!' )
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    12
		return
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    13
	end
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    14
	h:write ( "-- This is autogenerated file, do not edit it manually\n\ndelayed_jobs = {\n" );
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    15
	for jid, more in pairs ( delayed_jobs ) do
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    16
		h:write ( string.format ( "\t[%q] = {\n", jid ) )
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    17
		for status, action in pairs ( more ) do
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    18
			if action then -- remove fired jobs
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    19
				h:write ( string.format ( "\t\t[%q] = %q,\n", status, action ) )
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    20
			end
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    21
		end
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    22
		h:write ( "\t},\n" )
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    23
	end
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    24
	h:write ( "}\n" )
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    25
	h:close ()
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    26
end
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    27
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    28
main.command ( 'delay',
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    29
	function ( args )
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    30
		args = parse_args ( args )
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    31
		local who
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    32
		if args.t then
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    33
			who = args.t
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    34
		else
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    35
			who = main.current_buddy ()
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    36
		end
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    37
		local stat = args[1]
24
25552b21d3fb Arguments parsing
Myhailo Danylenko <isbear@ukrpost.net>
parents: 8
diff changeset
    38
		local mess = args[2]
8
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    39
		delayed_jobs[who] = { }
24
25552b21d3fb Arguments parsing
Myhailo Danylenko <isbear@ukrpost.net>
parents: 8
diff changeset
    40
		delayed_jobs[who][stat] = 'say_to -q ' .. who .. ' ' .. mess
8
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    41
	end )
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    42
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    43
main.command ( 'job',
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    44
	function ( args )
24
25552b21d3fb Arguments parsing
Myhailo Danylenko <isbear@ukrpost.net>
parents: 8
diff changeset
    45
		args = parse_args ( args )
25552b21d3fb Arguments parsing
Myhailo Danylenko <isbear@ukrpost.net>
parents: 8
diff changeset
    46
		local action, jid, stat = args[1], args[2], args[3]
8
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    47
		if action == 'del' then
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    48
			delayed_jobs[jid][stat] = nil
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    49
		else
24
25552b21d3fb Arguments parsing
Myhailo Danylenko <isbear@ukrpost.net>
parents: 8
diff changeset
    50
			local text = ''
8
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    51
			for jid, jobs in pairs ( delayed_jobs ) do
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    52
				for status, job in pairs ( jobs ) do
24
25552b21d3fb Arguments parsing
Myhailo Danylenko <isbear@ukrpost.net>
parents: 8
diff changeset
    53
					text = text .. '\n - ' .. jid .. ' -> ' .. status .. ': ' .. job
8
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    54
				end
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    55
			end
24
25552b21d3fb Arguments parsing
Myhailo Danylenko <isbear@ukrpost.net>
parents: 8
diff changeset
    56
			if text ~= '' then
25552b21d3fb Arguments parsing
Myhailo Danylenko <isbear@ukrpost.net>
parents: 8
diff changeset
    57
				print ( 'List of jobs:' .. text )
25552b21d3fb Arguments parsing
Myhailo Danylenko <isbear@ukrpost.net>
parents: 8
diff changeset
    58
			else
25552b21d3fb Arguments parsing
Myhailo Danylenko <isbear@ukrpost.net>
parents: 8
diff changeset
    59
				print ( 'No jobs' )
25552b21d3fb Arguments parsing
Myhailo Danylenko <isbear@ukrpost.net>
parents: 8
diff changeset
    60
			end
8
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    61
		end
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    62
	end, { "del" } )
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    63
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    64
commands_help['delay'] = "[-t target_jid] status_letter message\n\nDelays sending a message to target jid (or current buddy) until it switches to specified status."
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    65
commands_help['job'] = "[del jid status_letter]\n\nLists available jobs or deletes specified one."
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    66
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    67
hooks_d['hook-status-change'].jobs =
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    68
	function ( args )
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    69
		if delayed_jobs[args.jid] and delayed_jobs[args.jid][args.new_status] then
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    70
			main.run ( delayed_jobs[args.jid][args.new_status] )
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    71
			delayed_jobs[args.jid][args.new_status] = nil
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    72
		end
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    73
	end
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    74
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    75
hooks_d['hook-quit'].jobs = save_jobs
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    76
	
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    77
fc9060b9b7cc Completion
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    78
-- vim: se ts=4: --