sub import { #{{{
hook(type => "getopt", id => "aggregate", call => \&getopt);
hook(type => "checkconfig", id => "aggregate", call => \&checkconfig);
- hook(type => "filter", id => "aggregate", call => \&filter);
+ hook(type => "needsbuild", id => "aggregate", call => \&needsbuild);
hook(type => "preprocess", id => "aggregate", call => \&preprocess);
hook(type => "delete", id => "aggregate", call => \&delete);
hook(type => "savestate", id => "aggregate", call => \&savestate);
}
} #}}}
-sub filter (@) { #{{{
- my %params=@_;
- my $page=$params{page};
-
+sub needsbuild (@) { #{{{
+ my $needsbuild=shift;
+
loadstate(); # if not already loaded
- # Mark all feeds originating on this page as removable;
- # preprocess will unmark those that still exist.
- remove_feeds($page);
- return $params{content};
+ foreach my $page (keys %pagestate) {
+ if (grep { $_ eq $pagesources{$page} } @$needsbuild) {
+ # Mark all feeds originating on this page as removable;
+ # preprocess will unmark those that still exist.
+ remove_feeds($page);
+ }
+ }
} # }}}
sub preprocess (@) { #{{{
my $count=0;
my %seen;
foreach my $item (sort { $IkiWiki::pagectime{$b->{page}} <=> $IkiWiki::pagectime{$a->{page}} }
- grep { exists $_->{page} && ! exists $seen{$_->{page}} && $_->{feed} eq $feed->{name} && $IkiWiki::pagectime{$_->{page}} }
+ grep { exists $_->{page} && $_->{feed} eq $feed->{name} && $IkiWiki::pagectime{$_->{page}} }
values %guids) {
- $seen{$item}=1;
if ($feed->{expireage}) {
my $days_old = (time - $IkiWiki::pagectime{$item->{page}}) / 60 / 60 / 24;
if ($days_old > $feed->{expireage}) {
$item->{expired}=1;
}
else {
- $count++;
+ if (! $seen{$item->{page}}) {
+ $seen{$item->{page}}=1;
+ $count++;
+ }
}
}
}