]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki/Plugin/aggregate.pm
Merge branch 'master' of ssh://git.kitenet.net/srv/git/ikiwiki.info
[ikiwiki.git] / IkiWiki / Plugin / aggregate.pm
index 1add539874bd478f8213073300c2469aae92931f..13c697dcc3c1d568cdd1cda90dd479fbe007f650 100644 (file)
@@ -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 $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 (@) { #{{{
@@ -180,7 +182,8 @@ sub savestate () { #{{{
                                }
                        }
                        else {
-                               unlink pagefile($data->{page});
+                               unlink pagefile($data->{page})
+                                       if exists $data->{page};
                        }
                        next;
                }
@@ -222,9 +225,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 +241,10 @@ sub expire () { #{{{
                                $item->{expired}=1;
                        }
                        else {
-                               $count++;
+                               if (! $seen{$item->{page}}) {
+                                       $seen{$item->{page}}=1;
+                                       $count++;
+                               }
                        }
                }
        }