]> git.vpit.fr Git - perl/scripts/xchat.git/blob - Xchat/XPI/Events.pm
Initial import
[perl/scripts/xchat.git] / Xchat / XPI / Events.pm
1 package Xchat::XPI::Events;
2
3 use strict;
4 use warnings;
5
6 use Xchat qw/:all/;
7
8 use lib get_info 'xchatdir';
9 use Xchat::XPI;
10
11 use constant {
12  DEFAULT_DELAY => 1000
13 };
14
15 our $VERSION = '0.03';
16
17 my $ph;
18
19 sub delay {
20  my $d = shift;
21  $d = (defined $d) ? int $d : DEFAULT_DELAY;
22  return hook_timer $d, sub {
23   my ($cb, $data) = @{$_[0]};
24   &$cb($data);
25   return REMOVE;
26  }, { data => \@_ };
27 }
28
29 my %reorder;
30
31 sub filter {
32  return unless @_ == 3;
33  not defined and return for @_;
34  my ($cb, $to) = @_[1, 2];
35  return hook_print $_[0], sub {
36   my @args = @{$_[0]};
37   if ($cb->(@args)) {
38    $reorder{$to}->(@args) if exists $reorder{$to};
39    emit_print $to, @args;
40    return EAT_ALL;
41   } else {
42    return EAT_NONE;
43   }
44  }
45 }
46
47 use base qw/Exporter/;
48
49 our @EXPORT         = ();
50 our %EXPORT_TAGS    = (
51  'funcs'  => [ qw/delay filter/ ],
52  'consts' => [ qw/DEFAULT_DELAY/ ]
53 );
54 our @EXPORT_OK      = map { @$_ } values %EXPORT_TAGS;
55 $EXPORT_TAGS{'all'} = [ @EXPORT_OK ];
56
57 $ph = new Xchat::XPI name   => 'Extended Xchat Perl Interface :: Events',
58                      tag    => 'XPI::Events',
59                      desc   => 'More events handlers',
60                      author => 'Vincent Pit (VPIT)', 
61                      email  => 'perl@profvince.com',
62                      url    => 'http://www.profvince.com';
63
64 1;