diff options
author | Joey Hess <joey@kodama.kitenet.net> | 2008-09-27 17:04:25 -0400 |
---|---|---|
committer | Joey Hess <joey@kodama.kitenet.net> | 2008-09-27 18:02:33 -0400 |
commit | 2ff3c8aee78114974b6930c18247f050d35f2012 (patch) | |
tree | 7d40386aca2c0b4e3d79bf10c19fc3a567b94af9 /IkiWiki/Plugin/editpage.pm | |
parent | a5d3acd37cd52a5cf0045ae4d300a2ef13a07a6e (diff) | |
download | ikiwiki-2ff3c8aee78114974b6930c18247f050d35f2012.tar ikiwiki-2ff3c8aee78114974b6930c18247f050d35f2012.tar.gz |
editpage: Be more aggressive (and less buggy) about cleaning up temporary files rendered during page preview.
Diffstat (limited to 'IkiWiki/Plugin/editpage.pm')
-rw-r--r-- | IkiWiki/Plugin/editpage.pm | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/IkiWiki/Plugin/editpage.pm b/IkiWiki/Plugin/editpage.pm index 687ebf51e..d12c6732d 100644 --- a/IkiWiki/Plugin/editpage.pm +++ b/IkiWiki/Plugin/editpage.pm @@ -8,6 +8,7 @@ use open qw{:utf8 :std}; sub import { #{{{ hook(type => "getsetup", id => "editpage", call => \&getsetup); + hook(type => "refresh", id => "editpage", call => \&refresh); hook(type => "sessioncgi", id => "editpage", call => \&IkiWiki::cgi_editpage); } # }}} @@ -19,6 +20,26 @@ sub getsetup () { #{{{ }, } #}}} +sub refresh () { + if (exists $wikistate{editpage} && exists $wikistate{editpage}{previews}) { + # Expire old preview files after one hour. + my $expire=time - (60 * 60); + + my @previews; + foreach my $file (@{$wikistate{editpage}{previews}}) { + my $mtime=(stat("$config{destdir}/$file"))[9]; + if (defined $mtime && $mtime <= $expire) { + debug(sprintf(gettext("removing old preview %s"), $file)); + IkiWiki::prune("$config{destdir}/$file"); + } + elsif (defined $mtime) { + push @previews, $file; + } + } + $wikistate{editpage}{previews}=\@previews; + } +} + # Back to ikiwiki namespace for the rest, this code is very much # internal to ikiwiki even though it's separated into a plugin, # and other plugins use the functions below. @@ -169,6 +190,7 @@ sub cgi_editpage ($$) { #{{{ # temporarily record its type $pagesources{$page}=$page.".".$type; } + my %wasrendered=map { $_ => 1 } @{$renderedfiles{$page}}; my $content=$form->field('editcontent'); @@ -191,11 +213,18 @@ sub cgi_editpage ($$) { #{{{ ); }); $form->tmpl_param("page_preview", $preview); - + if ($new) { delete $pagesources{$page}; } - # previewing may have created files on disk + + # Previewing may have created files on disk. + # Keep a list of these to be deleted later. + my %previews = map { $_ => 1 } @{$wikistate{editpage}{previews}}; + foreach my $file (@{$renderedfiles{$page}}) { + $previews{$file}=1 unless $wasrendered{$file}; + } + @{$wikistate{editpage}{previews}} = keys %previews; saveindex(); } elsif ($form->submitted eq "Save Page") { |