Plagger::Plugin::Filter::JiftyBot

名前の通りですが、いま#jiftyと#jifty-jaで走らせているのにはこんなのをかませています。

もうちょい一般化してFilter::SVNWebにしようかとも思っていたんですが、すっかり忘れていました。

package Plagger::Plugin::Filter::JiftyBot;
use strict;
use base qw( Plagger::Plugin );

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

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

    $args->{feed}->title('Jifty');

    my @entries = reverse @{ $args->{feed}->{entries} };

    $args->{feed}->{entries} = \@entries;
}

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

    my $entry = $args->{entry};

    my $title = $entry->title_text;
    my $body  = $entry->body_text;

    my @lines = split(/[\n\r]/, $body);
    if (@lines > 1) {
        my $first = shift @lines;
        $first = '' if $first =~ /^[^@]+\@[^:]+:[^\|]+\|\s+[\d:\-\+\s]+$/;
        unshift @lines, $first if $first;
    }
    $body = join "\n", @lines;

    $title =~ s/^(\d+ \-).+$/revision $1 $body/s;

    $entry->title( $title );
}

1;
[%- SET title = feed.title || '(no-title)' -%]
[% FOREACH entry = feed.entries -%][% feed.title_text %]: [% entry.title_text %] [% entry.body_text %] - [% entry.link %]
[% END -%]