X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/b144831e462e0d2ba8225f6e5f7d9138efb03c77..a55752a7bedb83fa5339f232b9a61a60a67251f3:/IkiWiki/Plugin/pinger.pm diff --git a/IkiWiki/Plugin/pinger.pm b/IkiWiki/Plugin/pinger.pm index c6fa76e3f..b2d54af8a 100644 --- a/IkiWiki/Plugin/pinger.pm +++ b/IkiWiki/Plugin/pinger.pm @@ -3,19 +3,35 @@ package IkiWiki::Plugin::pinger; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; my %pages; my $pinged=0; -sub import { #{{{ +sub import { + hook(type => "getsetup", id => "pinger", call => \&getsetup); hook(type => "needsbuild", id => "pinger", call => \&needsbuild); hook(type => "preprocess", id => "ping", call => \&preprocess); hook(type => "delete", id => "pinger", call => \&ping); - hook(type => "change", id => "pinger", call => \&ping); -} # }}} + hook(type => "rendered", id => "pinger", call => \&ping); +} + +sub getsetup () { + return + plugin => { + safe => 1, + rebuild => 0, + }, + pinger_timeout => { + type => "integer", + example => 15, + description => "how many seconds to try pinging before timing out", + safe => 1, + rebuild => 0, + }, +} -sub needsbuild (@) { #{{{ +sub needsbuild (@) { my $needsbuild=shift; foreach my $page (keys %pagestate) { if (exists $pagestate{$page}{pinger}) { @@ -29,12 +45,13 @@ sub needsbuild (@) { #{{{ } } } -} # }}} + return $needsbuild; +} -sub preprocess (@) { #{{{ +sub preprocess (@) { my %params=@_; if (! exists $params{from} || ! exists $params{to}) { - return "[[ping ".gettext("requires 'from' and 'to' parameters")."]]"; + error gettext("requires 'from' and 'to' parameters"); } if ($params{from} eq $config{url}) { $pagestate{$params{destpage}}{pinger}{$params{to}}=1; @@ -44,16 +61,18 @@ sub preprocess (@) { #{{{ else { return sprintf(gettext("Ignoring ping directive for wiki %s (this wiki is %s)"), $params{from}, $config{url}); } -} # }}} +} sub ping { if (! $pinged && %pages) { $pinged=1; + eval q{use Net::INET6Glue::INET_is_INET6}; # may not be available + my $ua; eval q{use LWPx::ParanoidAgent}; if (!$@) { - $ua=LWPx::ParanoidAgent->new; + $ua=LWPx::ParanoidAgent->new(agent => $config{useragent}); } else { eval q{use LWP}; @@ -61,7 +80,7 @@ sub ping { debug(gettext("LWP not found, not pinging")); return; } - $ua=LWP::UserAgent->new; + $ua=useragent(); } $ua->timeout($config{pinger_timeout} || 15); @@ -89,8 +108,10 @@ sub ping { # only ping when a page was changed, so a ping loop # will still be avoided. next if $url=~/^\Q$config{cgiurl}\E/; + my $local_cgiurl = IkiWiki::cgiurl(); + next if $url=~/^\Q$local_cgiurl\E/; - $ua->head($url); + $ua->get($url); } exit 0;