X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/5cbd86235e7993cc067b76105b9ed2e4fbdda3a1..300e69bbbd22e512f2473286893a413f215e1921:/IkiWiki/Plugin/aggregate.pm?ds=inline

diff --git a/IkiWiki/Plugin/aggregate.pm b/IkiWiki/Plugin/aggregate.pm
index 1add53987..68ff6a616 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,18 @@ sub checkconfig () { #{{{
 	}
 } #}}}
 
-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 (@) { #{{{
@@ -222,9 +224,8 @@ sub expire () { #{{{
 		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}) {
@@ -239,7 +240,10 @@ sub expire () { #{{{
 				$item->{expired}=1;
 			}
 			else {
-				$count++;
+				if (! $seen{$item->{page}}) {
+					$seen{$item->{page}}=1;
+					$count++;
+				}
 			}
 		}
 	}