X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/c3eec7fdf016247490e387e16a4afa569576afd4..86781fc43ec263967350dd6f12af9f1d05914500:/IkiWiki/Plugin/aggregate.pm diff --git a/IkiWiki/Plugin/aggregate.pm b/IkiWiki/Plugin/aggregate.pm index 37939245c..a2c10ce5c 100644 --- a/IkiWiki/Plugin/aggregate.pm +++ b/IkiWiki/Plugin/aggregate.pm @@ -129,6 +129,7 @@ sub delete (@) { #{{{ my $state_loaded=0; sub loadstate () { #{{{ return if $state_loaded; + $state_loaded=1; if (-e "$config{wikistatedir}/aggregate") { open(IN, "$config{wikistatedir}/aggregate") || die "$config{wikistatedir}/aggregate: $!"; @@ -159,12 +160,11 @@ sub loadstate () { #{{{ } close IN; - - $state_loaded=1; } } #}}} sub savestate () { #{{{ + return unless $state_loaded; eval q{use HTML::Entities}; error($@) if $@; my $newfile="$config{wikistatedir}/aggregate.new"; @@ -229,7 +229,7 @@ sub expire () { #{{{ 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; } } @@ -301,6 +301,13 @@ sub aggregate () { #{{{ $content=Encode::decode_utf8($content); $f=eval{XML::Feed->parse(\$content)}; } + if ($@) { + # Another possibility is badly escaped entities. + $feed->{message}.=" ".sprintf(gettext("(feed entities escaped)")); + $content=~s/\&(?!amp)(\w+);/&$1;/g; + $content=Encode::decode_utf8($content); + $f=eval{XML::Feed->parse(\$content)}; + } if ($@) { $feed->{message}=gettext("feed crashed XML::Feed!")." ($@)"; $feed->{error}=1; @@ -317,6 +324,7 @@ sub aggregate () { #{{{ foreach my $entry ($f->entries) { add_page( feed => $feed, + copyright => $f->copyright, title => defined $entry->title ? decode_entities($entry->title) : "untitled", link => $entry->link, content => defined $entry->content->body ? $entry->content->body : "", @@ -396,6 +404,8 @@ sub add_page (@) { #{{{ $template->param(content => htmlescape(htmlabs($params{content}, $feed->{feedurl}))); $template->param(name => $feed->{name}); $template->param(url => $feed->{url}); + $template->param(copyright => $params{copyright}) + if defined $params{copyright} && length $params{copyright}; $template->param(permalink => urlabs($params{link}, $feed->{feedurl})) if defined $params{link}; if (ref $feed->{tags}) {