examples/readonly.lua
changeset 125 3e2421384d7a
equal deleted inserted replaced
124:286a034e4d5f 125:3e2421384d7a
       
     1 
       
     2 --  READONLY
       
     3 
       
     4 -- public functions:
       
     5 --  * readonly
       
     6 --  * readwrite
       
     7 --  * toggle_readonly
       
     8 --  * readonly_jids
       
     9 -- FIXME:
       
    10 --  * does not work, as mcabber ignores hook retval on hook-message-out
       
    11 -- TODO:
       
    12 --  * more accessors (merge storage with marking?)
       
    13 --  * commands?
       
    14 
       
    15 local readonly_db = {}
       
    16 
       
    17 function readonly ( jid )
       
    18 	if ( not jid ) or ( jid == '.' ) then
       
    19 		jid = main.current_buddy ()
       
    20 	end
       
    21 	if jid then
       
    22 		readonly_db [ jid ] = true
       
    23 	end
       
    24 end
       
    25 
       
    26 function readwrite ( jid )
       
    27 	if ( not jid ) or ( jid == '.' )  then
       
    28 		jid = main.current_buddy ()
       
    29 	end
       
    30 	if jid then
       
    31 		readonly_db [ jid ] = nil
       
    32 	end
       
    33 end
       
    34 
       
    35 function toggle_readonly ( jid )
       
    36 	if ( not jid ) or ( jid == '.' ) then
       
    37 		jid = main.current_buddy ()
       
    38 	end
       
    39 	if jid then
       
    40 		if readonly_db [ jid ] then
       
    41 			readwrite ( jid )
       
    42 		else
       
    43 			readonly ( jid )
       
    44 		end
       
    45 	end
       
    46 end
       
    47 
       
    48 function readonly_jids ()
       
    49 	local result = {}
       
    50 	for jid in pairs ( readonly_db ) do
       
    51 		table.insert ( result, jid )
       
    52 	end
       
    53 	return result
       
    54 end
       
    55 
       
    56 main.hook ( 'hook-message-out',
       
    57 	function ( args )
       
    58 		if readonly_db [ args.jid ] then
       
    59 			main.print_info ( args.jid, "Readonly JID, message dropped." )
       
    60 			return 'drop'
       
    61 		else
       
    62 			return 'proceed'
       
    63 		end
       
    64 	end )
       
    65 
       
    66 -- vim: se ts=4 sw=4: --