use Term::ReadLine;
use Getopt::Long;
-use Image::Magick;
+my $haveimagick = eval { require Image::Magick; };
+{ package Image::Magick; } # to make perl compiler happy
my @sizes = (160, 640);
my $fullpath .= $self->{-fullpath};
print "iterate in dir $fullpath\n" if ($debug);
+ my $youngest=0;
my @rdirlist;
my @rimglist;
my $D;
while (my $de = readdir($D)) {
next if ($de =~ /^\./);
my $child = $self->new($de);
+ my @stat = stat($child->{-fullpath});
+ $youngest = $stat[9] if ($youngest < $stat[9]);
if ($child->isdir) {
push(@rdirlist,$child);
} elsif ($child->isimg) {
$img->makeaux;
}
+# no need to go beyond this point if the directory timestamp did not
+# change since we built index.html file last time.
+
+ my @istat = stat($self->{-fullpath}.'/index.html');
+ return unless ($youngest > $istat[9]);
+
# 5. start building index.html for the directory
$self->startindex;
sub doscaling {
my ($src,$dest,$factor,$w,$h) = @_; # this is not a method
- my $im = new Image::Magick;
- my $err;
- print "doscaling $src -> $dest by $factor\n" if ($debug);
- $err = $im->Read($src);
- unless ($err) {
- $im->Scale(width=>$w*$factor,height=>$h*$factor);
- $err=$im->Write($dest);
- warn "ImageMagick: write \"$dest\": $err" if ($err);
- } else { # fallback to command-line tools
- warn "ImageMagick: read \"$src\": $err";
+
+ my $err=1;
+ if ($haveimagick) {
+ my $im = new Image::Magick;
+ print "doscaling $src -> $dest by $factor\n" if ($debug);
+ if ($err = $im->Read($src)) {
+ warn "ImageMagick: read \"$src\": $err";
+ } else {
+ $im->Scale(width=>$w*$factor,height=>$h*$factor);
+ $err=$im->Write($dest);
+ warn "ImageMagick: write \"$dest\": $err" if ($err);
+ }
+ undef $im;
+ }
+ if ($err) { # fallback to command-line tools
system("djpeg \"$src\" | pnmscale \"$factor\" | cjpeg >\"$dest\"");
}
- undef $im;
}
sub makeaux {
# slideshow
for my $refresh('static', 'slide') {
my $fn = sprintf("%s/.html/%s-%s.html",$dn,$name,$refresh);
- my $imgsrc = '../'.$self->{$sizes[1]};
- my $fwdref;
- my $bakref;
- if ($nref) {
- $fwdref = sprintf("%s-%s.html",$nref,$refresh);
- } else {
- $fwdref = '../index.html';
- }
- if ($pref) {
- $bakref = sprintf("%s-%s.html",$pref,$refresh);
- } else {
- $bakref = '../index.html';
- }
- my $toggleref;
- my $toggletext;
- if ($refresh eq 'slide') {
- $toggleref=sprintf("%s-static.html",$name);
- $toggletext = 'Stop!';
- } else {
- $toggleref=sprintf("%s-slide.html",$name);
- $toggletext = 'Play->';
- }
- my $F;
- unless (open($F,'>'.$fn)) {
- warn "cannot open \"$fn\": $!";
- next;
- }
- if ($refresh eq 'slide') {
- print $F start_html(-title=>$title,
+ if (isnewer($self->{-fullpath},$fn)) {
+ my $imgsrc = '../'.$self->{$sizes[1]};
+ my $fwdref;
+ my $bakref;
+ if ($nref) {
+ $fwdref = sprintf("%s-%s.html",$nref,$refresh);
+ } else {
+ $fwdref = '../index.html';
+ }
+ if ($pref) {
+ $bakref = sprintf("%s-%s.html",$pref,$refresh);
+ } else {
+ $bakref = '../index.html';
+ }
+ my $toggleref;
+ my $toggletext;
+ if ($refresh eq 'slide') {
+ $toggleref=sprintf("%s-static.html",$name);
+ $toggletext = 'Stop!';
+ } else {
+ $toggleref=sprintf("%s-slide.html",$name);
+ $toggletext = 'Play->';
+ }
+ my $F;
+ unless (open($F,'>'.$fn)) {
+ warn "cannot open \"$fn\": $!";
+ next;
+ }
+ if ($refresh eq 'slide') {
+ print $F start_html(
+ -title=>$title,
-bgcolor=>"#808080",
-head=>meta({-http_equiv=>'Refresh',
-content=>"3; url=$fwdref"}),
-style=>{-src=>$inc."gallery.css"},
- ),"\n";
-
- } else {
- print $F start_html(-title=>$title,
+ ),"\n";
+
+ } else {
+ print $F start_html(-title=>$title,
-bgcolor=>"#808080",
-style=>{-src=>$inc."gallery.css"},
- ),"\n";
+ ),"\n";
+ }
+ print $F start_center,"\n",
+ h1($title),"\n",
+ start_table({-class=>'navi'}),start_Tr,"\n",
+ td(a({-href=>"../index.html"},"Index")),"\n",
+ td(a({-href=>$bakref},"<<Prev")),"\n",
+ td(a({-href=>$toggleref},$toggletext)),"\n",
+ td(a({-href=>$fwdref},"Next>>")),"\n",
+ end_Tr,
+ end_table,"\n",
+ table({-class=>'picframe'},
+ Tr(td(img({-src=>$imgsrc})))),"\n",
+ end_center,"\n",
+ end_html,"\n";
+ close($F);
+ }
+ }
+
+ # info html
+ my $fn = sprintf("%s/.html/%s-info.html",$dn,$name);
+ if (isnewer($self->{-fullpath},$fn)) {
+ my $F;
+ unless (open($F,'>'.$fn)) {
+ warn "cannot open \"$fn\": $!";
+ return;
}
- print $F start_center,"\n",
+ my $imgsrc = sprintf("../.%s/%s",$sizes[0],$name);
+ print $F start_html(-title=>$title,
+ -style=>{-src=>$inc."gallery.css"},),"\n",
+ start_center,"\n",
h1($title),"\n",
- start_table({-class=>'navi'}),start_Tr,"\n",
- td(a({-href=>"../index.html"},"Index")),"\n",
- td(a({-href=>$bakref},"<<Prev")),"\n",
- td(a({-href=>$toggleref},$toggletext)),"\n",
- td(a({-href=>$fwdref},"Next>>")),"\n",
- end_Tr,
- end_table,"\n",
- table({-class=>'picframe'},
- Tr(td(img({-src=>$imgsrc})))),"\n",
+ table({-class=>'ipage'},
+ Tr(td(img({-src=>$imgsrc})),
+ td($self->infotable))),
+ a({-href=>'../index.html'},'Index'),"\n",
end_center,"\n",
end_html,"\n";
close($F);
}
- my $fn = sprintf("%s/.html/%s-info.html",$dn,$name);
- my $F;
- unless (open($F,'>'.$fn)) {
- warn "cannot open \"$fn\": $!";
- return;
- }
-
- # info html
- my $imgsrc = sprintf("../.%s/%s",$sizes[0],$name);
- print $F start_html(-title=>$title,
- -style=>{-src=>$inc."gallery.css"},),"\n",
- start_center,"\n",
- h1($title),"\n",
- table({-class=>'ipage'},Tr(td(img({-src=>$imgsrc})),td($self->infotable))),
- a({-href=>'../index.html'},'Index'),"\n",
- end_center,"\n",
- end_html,"\n";
- close($F);
}
sub startindex {
my $self = shift;
my $fn = $self->{-fullpath}.'/index.html';
+ my $block = $self->{-fullpath}.'/.noindex';
+ $fn = '/dev/null' if ( -f $block );
my $IND;
unless (open($IND,'>'.$fn)) {
warn "cannot open $fn: $!";
end_div,"\n";
print $IND table({-class=>'slide'},Tr(td(
- a({-href=>".html/$name-info.html",
+ a({-href=>".html/$name-info.html",-title=>'Image Info',
-onClick=>"return showIbox('$name');"},$title),
br,
a({-href=>$medium,-rel=>"lightbox",-title=>$title},
img({-src=>$thumb})),
br,
- a({-href=>$name},"($w x $h)"),
+ a({-href=>$name,-title=>'Original Image'},"($w x $h)"),
br))),"\n";
}