The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package AnnoCPAN::Feed;

$VERSION = '0.22';

use strict;
use warnings;
use XML::RSS;
use POSIX qw(strftime);

sub rss_channel {
    my ($self, %args) = @_;
    my $rss  = XML::RSS->new(version => '1.0');

    $rss->channel(
        link         => $args{link},
        title        => $args{title},
        description  => $args{description} || $args{title},
        dc => {
               date       => strftime('%Y-%m-%dT%H:%M:%S+00:00', gmtime),
               subject    => "Perl",
               creator    => 'itub@cpan.org',
               publisher  => 'itub@cpan.org',
               rights     => 
                    'Redistributable under the same terms as Perl itself',
               language   => 'en-us',
              },
        syn => {
                updatePeriod     => "daily",
                updateFrequency  => $args{updateFrequency} || 24,
                updateBase       => "1901-01-01T00:00+00:00",
               },
    );
    return $rss;
}

sub note_rss {
    my ($self, %args) = @_;

    my $rss = $self->rss_channel(%args);

    my $base = AnnoCPAN::Config->option('root_uri_abs');
    for my $note (@{$args{notes}}) {
        next unless $note->section;
        my $podver = $note->section->podver;
        $rss->add_item(
            title       => $note->pod->name,
            link        => sprintf("$base/~%s/%s/%s#note_%s",
                $podver->distver->pause_id, $podver->distver->distver, 
                $podver->path, $note->id),
            description => $note->html,
            dc => {
                creator  => ($note->user->username),
                date     => strftime('%Y-%m-%dT%H:%M:%S+00:00', 
                gmtime($note->time)),
            },
        );    

    }
    return $rss;
}

sub dist_rss {
    my ($self, %args) = @_;

    my $rss = $self->rss_channel(%args);

    my $base = AnnoCPAN::Config->option('root_uri_abs');
    for my $dist (@{$args{dists}}) {
        my $distver = $dist->latest_distver;
        my $desc = "<ul>\n";
        #printf "$dist - %s\n", $dist->name;
        for my $podver ($distver->podvers) {
            no warnings 'uninitialized';
            #print "\t*** $podver ***\n";
            #printf "\t$podver - %s - %s\n", $podver->name, $podver->description;
            $desc .= sprintf "<li>%s - %s</li>\n",
                $podver->name, $podver->description;
        }
        $desc .= "</ul>\n";
        $rss->add_item(
            title       => $dist->name,
            link        => sprintf("$base/dist/%s",
                $dist->name),
            description => $desc,
            dc => {
                creator  => $distver->pause_id,
                date     => strftime('%Y-%m-%dT%H:%M:%S+00:00', 
                    gmtime($dist->creation_time)),
            },
        );    

    }
    return $rss;
}

1;