The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Plagger::Plugin::Namespace::MediaRSS;
use strict;
use base qw( Plagger::Plugin );

sub register {
    my($self, $context) = @_;
    $context->register_hook(
        $self,
        'aggregator.entry.fixup' => \&handle,
    );
}

sub handle {
    my($self, $context, $args) = @_;

    # Ick, I need to try the URL with and without the trailing slash
    for my $media_ns ("http://search.yahoo.com/mrss", "http://search.yahoo.com/mrss/") {
        my $media = $args->{orig_entry}->{entry}->{$media_ns}->{group} || $args->{orig_entry}->{entry};
        my $content = $media->{$media_ns}->{content} || [];
        $content = [ $content ] unless ref $content && ref $content eq 'ARRAY';

        for my $media_content (@{$content}) {
            my $enclosure = Plagger::Enclosure->new;
            $enclosure->url( URI->new($media_content->{url}) );
            $enclosure->auto_set_type($media_content->{type});
            $args->{entry}->add_enclosure($enclosure);
        }

        if (my $thumbnail = $media->{$media_ns}->{thumbnail}) {
            $args->{entry}->icon({
                url   => $thumbnail->{url},
                width => $thumbnail->{width},
                height => $thumbnail->{height},
            });
        }
    }

    1;
}

1;
__END__

=head1 NAME

Plagger::Plugin::Namespace::MediaRSS - Media RSS extension

=head1 SYNOPSIS

  - module: Namespace::MediaRSS

=head1 DESCRIPTION

This plugin parses Media RSS extension in the feeds and stores media
information to entry enclosures. This plugin is loaded by default.

=head1 AUTHOR

Tatsuhiko Miyagawa

=head1 SEE ALSO

L<Plagger>, L<http://search.yahoo.com/mrss>

=cut