X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/18d086dde871210c7cc9ca754b9ee3297306a676..d57ef863803355f37b6c0c6d6caec203dfaeeed3:/IkiWiki/Plugin/aggregate.pm?ds=inline diff --git a/IkiWiki/Plugin/aggregate.pm b/IkiWiki/Plugin/aggregate.pm index f47dc58b3..c9c2880c5 100644 --- a/IkiWiki/Plugin/aggregate.pm +++ b/IkiWiki/Plugin/aggregate.pm @@ -158,11 +158,11 @@ sub migrate_to_internal { #{{{ next if $data->{expired}; $config{aggregateinternal} = 0; - my $oldname = pagefile($data->{page}); + my $oldname = "$config{srcdir}/".htmlfn($data->{page}); my $oldoutput = $config{destdir}."/".IkiWiki::htmlpage($data->{page}); $config{aggregateinternal} = 1; - my $newname = pagefile($data->{page}); + my $newname = "$config{srcdir}/".htmlfn($data->{page}); debug "moving $oldname -> $newname"; if (-e $newname) { @@ -228,7 +228,7 @@ sub preprocess (@) { #{{{ $feed->{name}=$name; $feed->{sourcepage}=$params{page}; $feed->{url}=$params{url}; - my $dir=exists $params{dir} ? $params{dir} : $params{page}."/".IkiWiki::titlepage($params{name}); + my $dir=exists $params{dir} ? $params{dir} : $params{page}."/".titlepage($params{name}); $dir=~s/^\/+//; ($dir)=$dir=~/$config{wiki_file_regexp}/; $feed->{dir}=$dir; @@ -364,13 +364,13 @@ sub garbage_collect () { #{{{ foreach my $guid (values %guids) { # any guid whose feed is gone should be removed if (! exists $feeds{$guid->{feed}}) { - unlink pagefile($guid->{page}) + unlink "$config{srcdir}/".htmlfn($guid->{page}) if exists $guid->{page}; delete $guids{$guid->{guid}}; } # handle expired guids elsif ($guid->{expired} && exists $guid->{page}) { - unlink pagefile($guid->{page}); + unlink "$config{srcdir}/".htmlfn($guid->{page}); delete $guid->{page}; delete $guid->{md5}; } @@ -420,11 +420,11 @@ sub expire () { #{{{ next unless $feed->{expireage} || $feed->{expirecount}; my $count=0; my %seen; - foreach my $item (sort { $IkiWiki::pagectime{$b->{page}} <=> $IkiWiki::pagectime{$a->{page}} } + foreach my $item (sort { ($IkiWiki::pagectime{$b->{page}} || 0) <=> ($IkiWiki::pagectime{$a->{page}} || 0) } grep { exists $_->{page} && $_->{feed} eq $feed->{name} } values %guids) { if ($feed->{expireage}) { - my $days_old = (time - $IkiWiki::pagectime{$item->{page}}) / 60 / 60 / 24; + my $days_old = (time - ($IkiWiki::pagectime{$item->{page}} || 0)) / 60 / 60 / 24; if ($days_old > $feed->{expireage}) { debug(sprintf(gettext("expiring %s (%s days old)"), $item->{page}, int($days_old))); @@ -460,7 +460,7 @@ sub aggregate (@) { #{{{ foreach my $feed (@_) { $feed->{lastupdate}=time; $feed->{newposts}=0; - $feed->{message}=sprintf(gettext("processed ok at %s"), + $feed->{message}=sprintf(gettext("last checked %s"), displaytime($feed->{lastupdate})); $feed->{error}=0; @@ -520,10 +520,10 @@ sub aggregate (@) { #{{{ } foreach my $entry ($f->entries) { - my $content=$content=$entry->content; + my $c=$entry->content; # atom feeds may have no content, only a summary - if (! defined $content) { - $content=$entry->summary; + if (! defined $c && ref $entry->summary) { + $c=$entry->summary; } add_page( @@ -531,9 +531,10 @@ sub aggregate (@) { #{{{ copyright => $f->copyright, title => defined $entry->title ? decode_entities($entry->title) : "untitled", link => $entry->link, - content => defined $content ? $content->body : "", + content => defined $c ? $c->body : "", guid => defined $entry->id ? $entry->id : time."_".$feed->{name}, ctime => $entry->issued ? ($entry->issued->epoch || time) : time, + base => (defined $c && $c->can("base")) ? $c->base : undef, ); } } @@ -559,7 +560,7 @@ sub add_page (@) { #{{{ $feed->{newposts}++; # assign it an unused page - my $page=IkiWiki::titlepage($params{title}); + my $page=titlepage($params{title}); # escape slashes and periods in title so it doesn't specify # directory name or trigger ".." disallowing code. $page=~s!([/.])!"__".ord($1)."__"!eg; @@ -570,7 +571,7 @@ sub add_page (@) { #{{{ } my $c=""; while (exists $IkiWiki::pagecase{lc $page.$c} || - -e pagefile($page.$c)) { + -e "$config{srcdir}/".htmlfn($page.$c)) { $c++ } @@ -581,7 +582,7 @@ sub add_page (@) { #{{{ $c=""; $page=$feed->{dir}."/item"; while (exists $IkiWiki::pagecase{lc $page.$c} || - -e pagefile($page.$c)) { + -e "$config{srcdir}/".htmlfn($page.$c)) { $c++ } } @@ -605,7 +606,8 @@ sub add_page (@) { #{{{ my $template=template($feed->{template}, blind_cache => 1); $template->param(title => $params{title}) if defined $params{title} && length($params{title}); - $template->param(content => htmlescape(htmlabs($params{content}, $feed->{feedurl}))); + $template->param(content => htmlescape(htmlabs($params{content}, + defined $params{base} ? $params{base} : $feed->{feedurl}))); $template->param(name => $feed->{name}); $template->param(url => $feed->{url}); $template->param(copyright => $params{copyright}) @@ -621,10 +623,14 @@ sub add_page (@) { #{{{ if (defined $mtime && $mtime <= time) { # Set the mtime, this lets the build process get the right # creation time on record for the new page. - utime $mtime, $mtime, pagefile($guid->{page}); + utime $mtime, $mtime, "$config{srcdir}/".htmlfn($guid->{page}); # Store it in pagectime for expiry code to use also. $IkiWiki::pagectime{$guid->{page}}=$mtime; } + else { + # Dummy value for expiry code. + $IkiWiki::pagectime{$guid->{page}}=time; + } } #}}} sub htmlescape ($) { #{{{ @@ -679,12 +685,6 @@ sub htmlabs ($$) { #{{{ return $ret; } #}}} -sub pagefile ($) { #{{{ - my $page=shift; - - return "$config{srcdir}/".htmlfn($page); -} #}}} - sub htmlfn ($) { #{{{ return shift().".".($config{aggregateinternal} ? "_aggregated" : $config{htmlext}); } #}}}