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 $feed (values %feeds) {
+ if (grep { $_ eq $pagesources{$feed->{sourcepage}} } @$needsbuild) {
+ # Mark all feeds originating on this page as removable;
+ # preprocess will unmark those that still exist.
+ remove_feeds($feed->{sourcepage});
+ }
+ }
} # }}}
sub preprocess (@) { #{{{
} #}}}
sub savestate () { #{{{
+ return unless $state_loaded;
eval q{use HTML::Entities};
error($@) if $@;
my $newfile="$config{wikistatedir}/aggregate.new";
- # TODO: This cleanup function could use improvement. Any newly
- # aggregated files are left behind unrecorded, and should be deleted.
my $cleanup = sub { unlink($newfile) };
open (OUT, ">$newfile") || error("open $newfile: $!", $cleanup);
foreach my $data (values %feeds, values %guids) {
}
}
else {
- unlink pagefile($data->{page});
+ unlink pagefile($data->{page})
+ if exists $data->{page};
}
next;
}
my $days_old = (time - $IkiWiki::pagectime{$item->{page}}) / 60 / 60 / 24;
if ($days_old > $feed->{expireage}) {
debug(sprintf(gettext("expiring %s (%s days old)"),
- $item->{page}, $days_old));
+ $item->{page}, int($days_old)));
$item->{expired}=1;
}
}