The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
=head1 NAME

POE::Component::IRC::Plugin::Trac::RSS - A POE::Component::IRC plugin that provides RSS headline retrieval.

=head1 SYNOPSIS

  use strict;
  use warnings;
  use POE qw(Component::IRC Component::IRC::Plugin::Trac::RSS);

  my $nickname = 'TracRSS' . $$;
  my $ircname = 'TracRSS Name';
  my $ircserver = 'irc.nnnnn.net';
  my $port = 6667;
  my $channel = '#channel';
  my $rss_url = 'http://';
  my $rss_username = 'username';
  my $rss_password = 'password';

  my $irc = POE::Component::IRC->spawn(
        nick => $nickname,
        server => $ircserver,
        port => $port,
        ircname => $ircname,
        debug => 0,
        plugin_debug => 1,
        options => { trace => 0 },
  ) or die "Oh noooo! $!";

  POE::Session->create(
        package_states => [
                'main' => [ qw(_start irc_001 irc_join irc_tracrss_items) ],
        ],
  );

  $poe_kernel->run();
  exit 0;

  sub _start {
    # Create and load our plugin
    $irc->plugin_add( 'TracRSS' =>
        POE::Component::IRC::Plugin::Trac::RSS->new() );

    $irc->yield( register => 'all' );
    $irc->yield( connect => { } );
    undef;
  }

  sub irc_001 {
    $irc->yield( join => $channel );
    undef;
  }

  sub irc_join {
    my ($kernel,$sender,$channel) = @_[KERNEL,SENDER,ARG1];
    print STDERR "$channel $rss_url\n";
    $kernel->yield( 'get_tracrss', { url => $rss_url, username => $rss_username, password => $rss_password, _channel => $channel } );
    undef;
  }

  sub irc_tracrss_items {
    my ($kernel,$sender,$args) = @_[KERNEL,SENDER,ARG0];
    my $channel = delete $args->{_channel};
    $kernel->post( $sender, 'privmsg', $channel, join(' ', @_[ARG1..$#_] ) );
    undef;
  }

=head1 DESCRIPTION

POE::Component::IRC::Plugin::Trac::RSS, is a L<POE::Component::IRC> plugin that provides
a mechanism for retrieving Trac/RSS headlines from given URLs.

=head1 CONSTRUCTOR

=over 

=item new

Creates a new plugin object. Takes the following optional arguments:

  'http_alias', you may provide the alias of an existing POE::Component::Client::HTTP 
		component that the plugin will use instead of spawning it's own;
  'follow_redirects', this argument is passed to PoCoCl::HTTP to inform it how to deal with
		following redirects, default is 2;

=back

=head1 INPUT EVENTS

The plugin registers the following state handler within your session:

=over

=item get_trac_rss

Takes a hashref as an argument with the following keys:

  'url', the RSS based url to retrieve items for;
  'username', Username to login in trac.
  'password', Password to login in trac.

You may pass arbitary key/value pairs, but the keys must be prefixed with an underscore.

=back

=head1 OUTPUT

The following irc event is generated with the result of a 'get_headline' command:

=over

=item irc_tracrss_items

Has the following parameters:

  'ARG0', the original hashref that was passed;
  'ARG1' .. $#_, RSS headline item titles;

=item irc_tracrss_error

Has the following parameters:

  'ARG0', the original hashref that was passed;
  'ARG1', the error text;

=back

=head1 AUTHOR

Thiago Berlitz Rondon

=head1 LICENSE

Copyright C<(c)> Thiago Berlitz Rondon

This module may be used, modified, and distributed under the same terms as Perl itself. Please see the license that came with your Perl distribution for details.

=head1 SEE ALSO

L<POE::Component::IRC>