examples/readonly.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Wed, 28 Nov 2012 20:17:53 +0200
changeset 146 04d19c9c1196
parent 125 3e2421384d7a
permissions -rw-r--r--
Fix module loading problem
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
125
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     1
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     2
--  READONLY
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     3
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     4
-- public functions:
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     5
--  * readonly
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     6
--  * readwrite
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     7
--  * toggle_readonly
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     8
--  * readonly_jids
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     9
-- FIXME:
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    10
--  * does not work, as mcabber ignores hook retval on hook-message-out
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    11
-- TODO:
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    12
--  * more accessors (merge storage with marking?)
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    13
--  * commands?
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    14
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    15
local readonly_db = {}
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    16
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    17
function readonly ( jid )
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    18
	if ( not jid ) or ( jid == '.' ) then
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    19
		jid = main.current_buddy ()
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    20
	end
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    21
	if jid then
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    22
		readonly_db [ jid ] = true
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    23
	end
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    24
end
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    25
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    26
function readwrite ( jid )
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    27
	if ( not jid ) or ( jid == '.' )  then
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    28
		jid = main.current_buddy ()
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    29
	end
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    30
	if jid then
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    31
		readonly_db [ jid ] = nil
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    32
	end
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    33
end
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    34
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    35
function toggle_readonly ( jid )
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    36
	if ( not jid ) or ( jid == '.' ) then
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    37
		jid = main.current_buddy ()
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    38
	end
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    39
	if jid then
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    40
		if readonly_db [ jid ] then
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    41
			readwrite ( jid )
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    42
		else
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    43
			readonly ( jid )
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    44
		end
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    45
	end
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    46
end
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    47
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    48
function readonly_jids ()
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    49
	local result = {}
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    50
	for jid in pairs ( readonly_db ) do
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    51
		table.insert ( result, jid )
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    52
	end
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    53
	return result
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    54
end
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    55
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    56
main.hook ( 'hook-message-out',
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    57
	function ( args )
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    58
		if readonly_db [ args.jid ] then
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    59
			main.print_info ( args.jid, "Readonly JID, message dropped." )
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    60
			return 'drop'
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    61
		else
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    62
			return 'proceed'
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    63
		end
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    64
	end )
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    65
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    66
-- vim: se ts=4 sw=4: --