X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/ee843c7523c9b0f615ee467e26e7ff4b35514c78..723a10b5b16d87f118bea4c6afaa8d5f60ba5947:/IkiWiki/Plugin/aggregate.pm diff --git a/IkiWiki/Plugin/aggregate.pm b/IkiWiki/Plugin/aggregate.pm index eb5067d9f..0869d6d8f 100644 --- a/IkiWiki/Plugin/aggregate.pm +++ b/IkiWiki/Plugin/aggregate.pm @@ -17,7 +17,7 @@ my %guids; 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); @@ -49,16 +49,17 @@ sub checkconfig () { #{{{ } } #}}} -sub filter (@) { #{{{ - my %params=@_; - my $page=$params{page}; - - loadstate(); # if not already loaded - # Mark all feeds originating on this page as removable; - # preprocess will unmark those that still exist. - remove_feeds($page); +sub needsbuild (@) { #{{{ + my $needsbuild=shift; - return $params{content}; + foreach my $page (keys %pagestate) { + if (grep { $_ eq $pagesources{$page} } @$needsbuild) { + loadstate(); # if not already loaded + # Mark all feeds originating on this page as removable; + # preprocess will unmark those that still exist. + remove_feeds($page); + } + } } # }}} sub preprocess (@) { #{{{ @@ -128,8 +129,8 @@ my $state_loaded=0; sub loadstate () { #{{{ return if $state_loaded; if (-e "$config{wikistatedir}/aggregate") { - open (IN, "$config{wikistatedir}/aggregate" || - die "$config{wikistatedir}/aggregate: $!"); + open(IN, "$config{wikistatedir}/aggregate") || + die "$config{wikistatedir}/aggregate: $!"; while () { $_=IkiWiki::possibly_foolish_untaint($_); chomp; @@ -220,6 +221,7 @@ sub expire () { #{{{ foreach my $feed (values %feeds) { next unless $feed->{expireage} || $feed->{expirecount}; my $count=0; + my %seen; foreach my $item (sort { $IkiWiki::pagectime{$b->{page}} <=> $IkiWiki::pagectime{$a->{page}} } grep { exists $_->{page} && $_->{feed} eq $feed->{name} && $IkiWiki::pagectime{$_->{page}} } values %guids) { @@ -237,7 +239,10 @@ sub expire () { #{{{ $item->{expired}=1; } else { - $count++; + if (! $seen{$item->{page}}) { + $seen{$item->{page}}=1; + $count++; + } } } } @@ -475,7 +480,7 @@ sub pagefile ($) { #{{{ } #}}} sub htmlfn ($) { #{{{ - return shift().".html"; + return shift().".".$config{htmlext}; } #}}} 1